今回はAWS IoTとArduinoロボットをNode.jsとMQTTで連携する方法をご紹介したいと思います。
今回の概要図を描いてみました。イメージとしてはこんな感じです。
AWS SNSとAWS IoTの設定
今回はArduinoロボットに取り付けたセンサデータをメールで送信するために、「AWS SNS」と「AWS IoT」を使用します。
以下の記事の方法でAWS SNSとAWS IoTの設定を行います。
AWS IoTでArduinoからのセンサのデータをメールで通知する方法
Node.jsのソースの編集
今回はデバイス側とAWS IoTを連携させるために「Node.js」と「MQTT」を使用します。
以下のときに作成した「app.js」を編集します。
ArduinoとXBeeとNode.jsを使用してWeb画面からラジコンを操作できるようにしてみた!
AWS IoTにデータを送信するために、8行目~20行目のソースを「app.js」に追記します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
var app = require('http').createServer(handler), io = require('socket.io').listen(app), fs = require('fs'), path = require('path'), serialport = require('serialport'); //AWS IoTのほうにも送信するための必要な定義 var awsIot = require('aws-iot-device-sdk'); var thingName = 'Arduino'; // Replace with your own thing name var device = awsIot.device({ keyPath: 'private.pem.key', certPath: 'certificate.pem.crt', caPath: 'rootCA.pem', clientId: thingName, host: 'a3e7dlqyufcbp9.iot.us-west-2.amazonaws.com' }); //AWS IoTのほうにも送信するための必要な定義ここまで io.set('log level', 1); // Serial Port var portName = 'COM2'; // WINDOWS環境(Macの場合は異なります) var sp = new serialport(portName, { //baudRate: 57600, baudRate: 9600, dataBits: 8, parity: 'none', stopBits: 1, flowControl: false, }); |
Arduinoからデータを受信したときに、20行目~23行目のソースを追記してAWS IoTのほうにも送信します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
var d = ""; //data from arduino sp.on('data', function(data) { d += data; console.log("emit_from_server_d = " + d); var len = d.length; if(len > 12){ //console.log("emit_from_server_if_d = " + d); try{ var a = JSON.parse(d).length; //console.log("emit_from_server_if_try_d = " + d); console.log("emit_from_server_if_try_a = " + a); io.sockets.emit('emit_from_server', a); d = ""; //AWS IoTのほうにも送信 console.log('connect'); device.publish('topic/test', "length = " + a); //AWS IoTに送信ここまで }catch(e){ console.log('error'); d = ""; } } }); |
証明書・プライベートキー・ルートの用意
app.jsと同じフォルダにダウンロードしてきた「証明書・プライベートキー・ルート」を配置します。Node.jsには「keyPath:~」、「certPath:~」、「caPath:~」の部分に指定します。
❏関連資料・記事
・AWS IoTでArduinoからのセンサのデータをメールで通知する方法
・Rubyの「arduino_firmata」を使ってArduinoのLチカをやってみた!
・ArduinoとXBeeとNode.jsを使用してWeb画面からラジコンを操作できるようにしてみた!
「aws-iot-device-sdk」のインストール
Node.jsからAWS IoTを呼び出すために「aws-iot-device-sdk」をインストールします。
コマンドプロンプトから以下のコマンドを実行します。
1 |
npm install aws-iot-device-sdk |
ロボットを操作し、センサデータをAWS IoTへ送信する
上記の手順が完了したら、Node.jsでapp.jsを起動し、ブラウザからのコントロールパネルからロボットを操作してみます。
①コマンドプロンプトを起動し、app.jsがあるフォルダで以下のコマンドを実行します。
1 |
node app.js |
②ブラウザを立ち上げてロボットを操作してみます。「F」ボタンが押されるとロボットが前進するとともに、測距モジュールからのデータが送信されてくるので、ブラウザに距離が表示されます。
③ブラウザにデータが表示されたら、設定した自分のメールアドレスにもセンサデータの値が送信されてきていることが確認できます。
以上、今回はAWS IoTとArduinoロボットをNode.jsとMQTTで連携する方法についてご紹介させていただきました!
今後はインターフェースでAWSの人工知能などを使用していけたらいいかなと思います!
コメントを残す