@Makoto さん
GCPはどちらを使われたかわかりませんが、
runkitもAWSのLambdaもテンポラリ(大体60秒程度目安)でnode.jsを動かす環境になり、永続化には向いておりません。
24時間稼働のためにはherokuやAWSのec2などが適しておりますので、そちらを使っていただけないでしょうか。
@Makoto さん
GCPはどちらを使われたかわかりませんが、
runkitもAWSのLambdaもテンポラリ(大体60秒程度目安)でnode.jsを動かす環境になり、永続化には向いておりません。
24時間稼働のためにはherokuやAWSのec2などが適しておりますので、そちらを使っていただけないでしょうか。
①スマートスピーカー → ②IFTTT (WebHook) → ③アプリのwebhook受付 → ④ブロックプログラムでサーボモータを動かす
という手順で可能です。
まずは④部分を作るところから始めるとよいかと思います。
ブロックプログラムでは圧力センサーブロックはありませんが、
アナログ値ブロックで数字の変化を見ることは可能です。
圧力センサは圧力によって抵抗値が変わるセンサですので、アナログ値も変化し、そちらで読み取ることができます。
ありがとうございます、こちらは確実にBluetooth Classicなので、BLEの方では使えないですね。
@Mkubota さん
こちらの記事はBluetooth Classic のSPPではなく、BLE上でSPPを再現しているものになります。
Bluetooth Classic のSPPをUART経由で操作するモジュールもありそうなので、そちらはそちらで可能です。
つなぎたいのはBluetooth Classic のSPPと思っておりましたが、もしかして違うでしょうか。
もしよろしければ、つなぎたい先のデバイスを教えてもらえるとより具体的な話ができるかもしれません。
はい、可能です。
ObnizBLEGateway node.jsアプリ
AWS IoT のような構成にてAWS IoTへデータを入れることができます。
HTTPであれば、node.jsのnode-fetchライブラリなどを使って送信することもできますし、awsが公式で出しているsdkを使うことも可能かと思います。
https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/iot-sdks.html
node.jsアプリ AWS IoTの間では、データはデバイスを経由しませんので、純粋なnode.jsとしてAWS IoTへのデータ送信を実装いただければと思います。
@kemichi さん
obniz.js/ node-red-contrib-obniz 内部で描画関連はnode-canvasというモジュールを使用しています。しかし、このnode-canvasはPCの環境依存が激しく、うまく入らない場合があるため、オプションとして、自分で入れて頂く形をとっております。
node-redを自分でホスティングしている場合は、 npm install node-canvas
を実行してモジュールを追加することで、使用が可能になると思います。
もし、自分でホスティングしていない場合は、上記コマンドをすることができないと思いますので、canvasを使うことができません。
その場合は、dots関数のみ使用することができますので、
そちらで対応いただければと思います
const matrix = obniz.wired("Keyestudio_HT16K33", { vcc:0, gnd:1, sda:2, scl:3 });
const dots = [1,2,4,8,16,32,64,128]
matrix.draw(dots);
@Mkubota さん
いえ、デバイスはすべて対応しているのですが、その上のレイヤが対応していない状態なので、ほぼ無理と思っていただいたほうが良いかと思います。
Bluetooth Classic のSPPに対応するには、
HCI / L2CAP(classic)/ SDP / GAP(classic) / RFCOMM / SPP のプロトコルスタックを作る必要があるのですが、HCIがデバイスに実装されているのみとなり、その他のものがない状態です。
その他もプロトコルを独自で実装いただけるのであれば使うことができる、という状態ですが、難易度が高くてほぼ無理かと思います。
なお、BLEの場合は
HCI / L2CAP(ble) / ATT / SMP / GAP(ble) / GATT の全てに対応する必要があり、HCIは各デバイス、その他はobnizjsにて実装されています
別のデバイスにつながるのは問題なので、
scan時のパラメーターを指定するか、
connectする直前に該当のデバイスかどうかを判定するif分を入れる必要があるかと思います。
@Yodanaka さん
はい、obnizBoardの場合はそちらでは動きません。
VCCの出力が3Vのときに30mA以上動かせるデバイスの場合は、そちらの記載で動かすことができます。
obnizjsはすべてのデバイス共通の物となっておりますので、わかりにくくなっておりますが、よろしくお願いいたします。
@Yodanaka さん
なるほど、5Vのモジュールと勘違いしていました。
3Vでは1mAしか出力できないので、たしかに電源不足になりますね。
別電源で取るか、obnizBoardで5V1A出力をしてそれを抵抗などで分圧する といった事が必要になります。
@Mkubota さん
エラーログを見る限り、
TypeError: Cannot read property 'discoverCharacteristics' of undefined
at Peripheral.<anonymous> (C:\nodejs_obniz\DEMO\mainMMA_catch.js:112:25)
と、mainMMA_catch.jsの112行目でエラーが発生しているようです。
こちらは @Mkubota さんが書かれたコードだと思われますので、そちらの内容を見てみないとなんともわからない状態です。
推測でいくと、serviceを検索したのに見つからなかったが、そのままcharacterisitcsを検索しようとした と思われます。
serviceを検索したのに見つからなないというのは、
・デバイスがおかしくなった
・違うデバイスに接続した
などが考えられます。
@Yodanaka さん
データシートを見る限り、このモジュールは30mAしか使わないので、obniz Boardの1Aでは十分に足りると思われます。
そのため、電源供給ができなくて止まっているとは考えにくく、
・回路が壊れている
・ピンのアサインを間違えている
・配線を間違えている
などの原因が考えられます。
io1がおかしいとのことですので、そこを中心に、配線の再チェック、もしくはモジュールの交換を試していただけないでしょうか。
@Yodanaka さん
解決できてよかったです。
iPhoneのBLEは自動でキャッシュが働いたりすることもあるようですので、それがでてきていたのかもしれません。
@Mkubota さん
obnizデバイス/obnizCloudはBluetooth Classicも含めたHCIに対応しておりますが、
obniz.jsおよびobniz-nobleはBluetooth Classic全般に対応しておりません。あくまでBLEのみの対応となります。
そのため、SPPのプロトコルスタックは持っておりませんが、その部分を実装すれば使うことができる、という状態になります。
プロトコルスタックを実装するのはなかなかに難易度が高いので、基本的には使えないと思っていただければと思います。
Synchronization Timeout はBLEを接続しに行こうとしたが、デバイス側の応答がないなどでうまく接続が成立せず、一定時間たったときのエラーになります。
BLEとして定義されているエラーです。
BLEは無線のため、100%接続ができるわけではなく、接続失敗も多分に発生します。
Synchronization Timeoutがおきても大丈夫なようにプログラムを書くことをおすすめします
(try catchで判定してリトライするようにするなど)
また、接続失敗確率を下げる修正が先週リリースしたobnizjs 3.12.0に入っておりますので、
アップデートがまだでしたら、そちらも合わせてアップデートいただけると良いかと思います。
@野村大智 さん
ブロックのプログラムで対応しているのはでてくる選択肢のもののみとなります。
ブロックのプログラムをJavaScriptに変換すれば、猫や犬など、1000種類の判定が可能になります
https://obniz.com/ja/doc/guides/ai-robot-kit/convertjs
また、「cannot start camera on your device」とでた場合は、デバイス自体が対応していないか、セキュリティの理由で権限付与がされていない可能性があります。
■iOS(iPhone・iPad) Safari カメラとマイクの許可方法
1.『設定』をタップしてください。
2.下へスクロールし、『Safari』をタップしてください。
3.一番下へスクロールし、『カメラ』をタップしてください。
4.『確認』をタップ、またはすでにチェックされている事をご確認ください。
5.前の画面に戻り、『マイク』をタップしてください。
6.『確認』をタップ、またはすでにチェックされている事をご確認ください。
@Mkubota さん
nodejsでは例外が発生するとそこで処理が止まってしまうため、適切なハンドリングを行う必要があります。
nobleはPCのBLEを使用するのに対して、obniz-nobleはネットワーク越しの機器のBLEを使用するため、例外が発生しやすくなってしまいます。
適切なエラーハンドリングをすれば継続受信できるようになるかと思います。
@Mkubota さん
obniz-nobleとobniz.jsはBLEを共用で使うことができません。
noble自体が何年もメンテナンスされていないものになるため、
考えが理解しやすいのはobniz.jsのほうかもしれません。
どちらか使いやすい方で使っていただければと思います。
@Mkubota さん
var obniz = new Obniz( "OBNIZ_ID_HERE");
こちらの記載が定数になっているようですね
for文の中のobnizIdが入るべきかと思いますので、
var obniz = new Obniz( obnizId );
で試していただけますか?