[誰偷喝我的五十嵐?] 使用7688 Duo與MCS雲服務打造小偷偵測系統

本文說明如何使用 7688 Duo 搭配 Mediatek Cloud Sandbox 雲服務做一個小偷偵測系統

作者/攝影   曾吉弘
時間   3小時
成本
  • 7688 Duo 開發板 = $600
  • PIR 紅外線感測器 = $
  • Webcam (Logitech C170) = $600
  • USB OTG轉接線 = $100
難度   * * * * * * *
材料表
  • 可聯網的個人電腦 (作業系統可用 Windows, Mac OSX 與 Linux,本範例使用 Windows 7) 只要能SSH登入 7688 來編寫 Node.js程式即可
  • 7688 Duo 開發板
  • PIR 紅外線感測器
  • Webcam (Logitech C170)
  • USB OTG轉接線


1.MCS端設定

  • 請登入Mediatek Cloud Sandbox,建立一個原型,裡面需有一個 Image Display channel,在此 channelId 為 image。這筆資訊需寫在 Node.js 程式中不可寫錯

  • 針對這個原型建立一個測試裝置,並記下 DeviceId, DeviceKey

2.7688 Duo 端設定

    • 將PIR感測器接好,訊號腳位接到D7,另外的Vcc 與 GND 就這是因為 7688 Duo 的 GPIO(0)與MCU D7連通,所以我可以用 pin.read(); 語法去讀取PIR是否被觸發。
    • 如果您有 7688 Duo 擴充板的話,就可以直接把 webcam 接上擴充板上的 USB host 接口,不然就需要額外的 USB OTG轉接線。

    • 請先將您的7688 Duo 連上外部網路,並SSH登入。請先執行以下指令來更新與安裝必要的函式庫:
      1. $ opkg update      (更新可用軟體)
      2. $ opkg install fswebcam  (拍攝照片軟體)
      3. $ npm install mcsjs   (Node.js的 mcs 函式庫)
      4. $ npm install bluebird –save  (另一個本範例所需的函式庫)
    • 使用 vim 或 nano 開啟一個 .js 檔並貼上以下內容,請把相關資訊改為您的資料。

                  $ nano imageupload.js

[pastacode lang=”java” manual=”%0Avar%20m%3Drequire(‘mraa’)%3B%0Avar%20mcs%20%3D%20require(‘mcsjs’)%3B%20%20%20%2F%2F%E5%8C%AF%E5%85%A5%E6%89%80%E9%9C%80%E5%87%BD%E5%BC%8F%E5%BA%AB%0Avar%20exec%20%3D%20require(‘child_process’).exec%3B%0Avar%20Promise%20%3D%20require(‘bluebird’)%3B%0Avar%20fs%20%3D%20Promise.promisifyAll(require(%22fs%22))%3B%0A%0Avar%20pin%3Dnew%20m.Gpio(0)%3B%20%20%2F%2FGPIO(0)%20-%3E%20D7%0Apin.dir(m.DIR_IN)%3B%20%20%20%20%20%20%20%20%20%20%2F%2F%E8%A8%AD%E5%AE%9A%E8%A9%B2%E8%85%B3%E4%BD%8D%E7%82%BA%E8%BC%B8%E5%85%A5%E6%A8%A1%E5%BC%8F%0A%0Avar%20myApp%20%3D%20mcs.register(%7B%0A%20%20deviceId%3A%20’XXXXX’%2C%0A%20%20deviceKey%3A%20’OOOOO’%2C%20%20%20%2F%2F%E5%9C%A8%E6%AD%A4%E5%A1%AB%E5%85%A5%E6%82%A8MCS%20test%20device%20%E7%9A%84%20ID%2C%20Key%0A%20%20host%3A%20’api.mediatek.com’%0A%7D)%3B%0A%0A%0AcheckButton()%3B%0A%0Afunction%20checkButton()%20%7B%0A%20%20var%20btn%3Dpin.read()%3B%20%20%2F%2F%E8%AE%80%E5%8F%96PIR%E8%85%B3%E4%BD%8D%E7%8B%80%E6%85%8B%0A%20%20if(btn%3D%3D0)%20%7B%0A%20%20%20%20%20%2F%2F%E4%B8%80%E7%A7%92%E4%B9%8B%E5%85%A7%E5%8F%AA%E8%83%BD%E6%8C%89%E4%B8%80%E6%AC%A1%EF%BC%8C%E9%80%99%E5%80%8B%E5%81%B5%E6%B8%AC%E9%A0%BB%E7%8E%87%E5%8F%AF%E8%87%AA%E8%A1%8C%E4%BF%AE%E8%A8%82%0A%20%20%20%20setTimeout(checkButton%2C1000)%3B%20%20%20%0A%20%20%20%20console.log(‘button%20pressed’)%3B%0A%20%20%20%20takeSnapshot()%3B%0A%20%20%7D%0A%20%20else%20setTimeout(checkButton%2C100)%3B%20%20%2F%2F%E6%AF%8F0.1%E7%A7%92%E8%AE%80%E5%8F%96%E4%B8%80%E6%AC%A1D7%E7%8B%80%E6%85%8B%0A%7D%0A%0Afunction%20takeSnapshot()%20%7B%0A%0A%20%20%20%20child%20%3D%20exec(‘fswebcam%20-i%200%20-d%20v4l2%3A%2Fdev%2Fvideo0%20–no-banner%20-p%20YUYV%20–jpeg%2095%20–save%20%2Ftmp%2Ftest.jpg’%2C%0A%20%20%20%20%20%20function%20(error%2C%20stdout%2C%20stderr)%20%7B%0A%20%20%20%20%20%20console.log(‘stdout%3A%20’%20%2B%20stdout)%3B%0A%20%20%20%20%20%20console.log(‘stderr%3A%20’%20%2B%20stderr)%3B%0A%20%20%20%20%20%20if%20(error%20!%3D%3D%20null)%20%7B%0A%20%20%20%20%20%20%20%20console.log(‘exec%20error%3A%20’%20%2B%20error)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%2F%2F%E8%AE%80%E5%8F%96%E5%B7%B2%E6%8B%8D%E7%85%A7%E7%9A%84%E5%9C%96%E6%AA%94%0A%20%20%20%20%20%20fs.readFileAsync(‘%2Ftmp%2Ftest.jpg’)%0A%20%20%20%20%20%20%20%20.then(function(data)%20%7B%0A%20%20%20%20%20%20%20%20myApp.emit(‘Image’%2C”%2C%20new%20Buffer(data).toString(‘base64’))%3B%0A%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D)%3B%0A%7D%0A” message=”” highlight=”” provider=”manual”/]

 

 

 

3.檔案確定都好了之後,使用 Ctrl + x離開 nano (vim 的話是 :wq),使用以下語法執行:

              $ node imageupload.js

4.請在PIR感測器前方,如果一直觸發或一直無法觸發,請調整PIR感測器上的十字鏍絲來得到比較好的偵測效果(應該說…  PIR的效果不算太好,受不了的話可以改用更簡單的 pushbutton)。您就能在MCS test device頁面上看到有照片被上傳了,可以點選該資料頻道右上角->打開歷史資料,就可以看到到底有幾張照片。

5.在此有個有趣的事情值得大家關注一下,我們每次照相的檔名都是 test.jpg,所以您如果在多次拍照之後,到 /tmp 資料夾中看看,一樣只有一張 test.jpg,因為每次都會覆寫掉前一張照片。但是這不會影響MCS上傳的功能。

 

相關文章:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *