カメラで屋外ストリーミングIoTを自作する
コンテンツ
今回やること
カメラモジュールとobnizを使って、屋外でもストリーミングができるIoTを作ってみます。
用意するもの
- Jpegシリアルカメラ x 1
- obniz Board x 1
- モバイルバッテリー x 1
- micro usbケーブル x 1
- ワイヤケーブル x 数本
- モバイルwifiルーター もしくは テザリングができる携帯電話 (カメラ設置場所にwifi環境があればそれでもOK)
組み立て方
Jpegシリアルカメラのライブラリを参考に、図のようにobnizとカメラモジュールを接続します。
このカメラモジュールはUARTで通信をしますので、GND、VCCの他にUART用のTx、Rxを接続し、合計4本の配線を行います。
ただ、obnizのピン1本からの給電では電源が足りないため、VCCをobniz以外とつなげるか、もしくはobnizのピンを2本使う必要があります。ここでは2本のピンから電源を供給することを選択し、io6とio9もvcc/gnd供給に使用する方法でカメラを動かしています。
電源は以下のように供給してください。
obnizとバッテリーをmicro USB経由で接続したらハードウェアは完成です。
プログラム
- obnizとカメラをソフトウェア的にも接続する
上記で配線した情報をソフトウェア上にも記述します。
io6/io9は追加電源として使っているので、そちらも記述します。
obniz.com6.output(true); obniz.com9.output(false); var cam = obniz.wired("JpegSerialCam", {vcc:0, cam_tx:1, cam_rx:2, gnd:3});
- カメラの初期設定
カメラの初期設定をします。
baudと取得画像のサイズを指定しています。
ストリーミングをするので、一番小さい画像サイズで、一番早い通信速度を指定しています。
await cam.startWait({baud: 38400}); await cam.setBaudWait(115200); await cam.setSizeWait("160x120");
- 写真を取り続ける
await cam.takeWait();
で写真が取れるので、それをwhileループでずっと取り続けます。
HTML上に表示するために、imgタグにbase64エンコードしたデータを入れています。
while(true){ const jpegData = await cam.takeWait(); document.getElementById("image").src = "data:image/jpeg;base64," + cam.arrayToBase64(jpegData); }