はじめに
Moddable SDK 5.2.0でカメラデバイスがサポートされました。
その時の経緯はこちらにまとめています。
Node-RED MCUでカメラデバイスを使用できるようにするCameraノード(mcu_camera)を作った備忘メモです。
Moddable SDKのサンプルプログラム
Moddable SDKのサンプルプログラムの中に
examples/io/imagein/camera
というディレクトリがあり、その中の
camera-server-jpeg
を使用します。
Moddable SDKのサンプルプログラムをNode-RED MCU Editionのノードへ移植する
サンプルプログラムから移植した際の変更点は以下です。
- Node-REDノードの設定画面で画像フォーマットとサイズ(横 x 縦)を指定できるようにする
- 常にカメラデバイスが動作している(camera.read()を繰り返している)動作を、リクエスト(Node-REDノードの入力)があった時に動作するようにする
- 上記の変更により、camera.cでハードコーディングされているcamera_config.fb_count = 3の問題(frame bufferに3つの画像が保存されるため、frame(画像データ)を取得すると以前の古いデータが取得される)を回避するため、3回撮影してからframe(画像データ)を取得する
ハマった問題
Node-REDノードから画像データを出力する時にエラー(host objectエラー)が発生しました。
生成AI(Claude)に助けてもらい、データを変換することで解決しました。
(画像データはバイナリデータなので、Array.from()ではなく、Buffer.from()を使用)
camera.js
frame.bytes ??= new Uint8Array(frame);
msg.payload = Buffer.from(frame.bytes);
mcu_ameraノード
npmとNode-REDノードライブラリに登録しましたので、ぜひご利用ください!
残っている課題
Moddable SDK側の対応待ちの課題が2つ残っています。(2025年1月16日時点)
ソースコードを修正すれば解決する問題ですが、JavaScriptコードから設定変更が可能になるまで待つ必要があります。
カメラデバイスのクロック周波数が高すぎる問題
撮像(画像)が水平方向に反転する問題