code

2017年1月10日 星期二

Smart7688Duo-使用Arduino控制UVC Camera

聯發科的Smart 7688 DUO要使用UVC camera來做影像監視串流很簡單,不過網路上搜尋到的資料大都兩種教學:
  1. 透過終端機輸入指令
  2. 用聯發科的MCS網頁完成
第一種不實用。第二種自己使用還可以,但若要變成產品的話,不太可能依靠別人的網頁來生產。

一般監視產品,應該會透過兩種方式開啟監控:
  1. 硬體觸發
  2. 網路啟動
硬體觸發指的是有直接連接到Smart7688的按鈕開關或是感知器(如人體感知器),透過電位的High/Low來啟動監視。網路啟動則是透過例如手機傳遞指令,來開關監控。

這篇主要介紹硬體觸發,不過為了簡單,不會真的連接感知器,而是透過Serial Port輸入0/1模擬電位的High/Low。

程式主要是Arduino完成的。

首先需要知道開啟camera的Shell指令;
mjpg_streamer -i "input_uvc.so -f 20 -d /dev/video0" -o "output_http.so"
網路上一般7688教學文章都是透過終端機輸入的,我們要想辦法透過Arduino輸入這串指令。

整個程式架構大概長這樣;
sensorValue = Serial.read() # 讀取輸入
if sensorValue == 1 {
    # 使用上面Shell command開啟camera
} else {
    # 關閉camera
}

接下來要知道Arduino怎麼執行Shell指令:
Process p;
p.runShellCommand(Shell Command);

不過用Process之前要先透過終端機開啟bridge,不然無法用Arduino控制
root@mylinkit:~# uci set yunbridge.config.disabled='0'
root@mylinkit:~# uci commit
root@mylinkit:~# reboot


完整Arduino程式碼:
#include <Bridge.h>

void setup() {
  Bridge.begin();
  Serial.begin(115200);
  while (!Serial);
}

void loop() {
  int c = Serial.read();  
  if (c != -1) {
    switch(c) {
    case '0':      
      disableCamera();
      break;
    case '1': 
      enableCamera();
      break;
    }    
  }  // End if
}

void enableCamera() {
  Serial.println("Enable UVC camera");
  
  Process p;
  p.runShellCommand("mjpg_streamer -i \"input_uvc.so -f 20 -d /dev/video0\" -o \"output_http.so\" &");    
}

void disableCamera() {
  Serial.println("Disable UVC camera");
  
  Process p;
  p.runShellCommand("killall mjpg_streamer");  
}


沒有留言:

張貼留言