本文說明如何使用 7688 Duo 搭配 Mediatek Cloud Sandbox 雲服務做一個小偷偵測系統
| 作者/攝影 | 曾吉弘 |
| 時間 | 3小時 |
| 成本 |
|
| 難度 | * * * * * * * |
| 材料表 |
|
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登入。請先執行以下指令來更新與安裝必要的函式庫:
- $ opkg update (更新可用軟體)
- $ opkg install fswebcam (拍攝照片軟體)
- $ npm install mcsjs (Node.js的 mcs 函式庫)
- $ npm install bluebird –save (另一個本範例所需的函式庫)
- 請先將您的7688 Duo 連上外部網路,並SSH登入。請先執行以下指令來更新與安裝必要的函式庫:
-
- 使用 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上傳的功能。
相關文章:











