ArduinoとNode.jsで測定したセンサからの値をDBに保存できる?
前回までの記事で、「測距モジュールとArduinoとNode.jsとSocket.IOで距離を測定してブラウザに表示!」という記事を掲載させていただきました。
今回は更にArduinoとNode.jsで測定したセンサからの値をDB(mongoDB)に保存してみましたので、その方法をご紹介したいと思います。
mongoDBの準備
今回はDBにmongoDBを使用しました。まずはmongoDBをインストールしましょう。
Node.js(サーバ側)のソース
app.jsのソースを作成します。
①requireでmongodbのソースを読み込む
②接続文字列をurlの中に格納します。localhostの下にはmydbと記述しています。mydbはデータベースの名前です。
③sp.onの中にArduinoからデータが送信されてきたときの処理を記述します。
④Arduinoから送信されてきたデータは変数dに追加されます。
⑤console.logで変数dに格納されている値を確認します。
⑥lengthプロパティで変数dの文字数を取得し、変数lenに格納します。
⑦変数lenに格納されている文字数が12文字より大きかったらifの中の処理を実行します。
⑧JSONデータからlengthの値を変数aに格納します。
⑨mongoDBに接続する処理を記述します。今回はproductsという名前でコレクションを取得します。
⑩取得したコレクションにドキュメントを挿入する処理を記述します。
⑪try { }catch {}で上記でエラーが発生したときには、errorと表示するようにします。
⑫Arduinoからのデータの受信処理が完了したら変数dの値を空にセットしなおしておきます。
⑬io.sockets.emit ()で、変数aに格納されているArduinoから送信されてきたデータをクライアント側に送信します。
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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
// mongodbモジュールの読み込み var MongoClient = require("mongodb").MongoClient; // 接続文字列 var url = "mongodb://localhost/mydb"; var d = ""; //data from arduino sp.on('data', function(data) { //console.log("serialport data received: " + data); //JSON形式のデータが途切れても2回目以降に追加されるようにした d += data; console.log("emit_from_server_d = " + d); //lengthプロパティで文字数を格納 var len = d.length; //文字数が12文字より大きかったら以下の処理を実行 if(len > 12){ //console.log("emit_from_server_if_d = " + d); try{ //JSONデータからlengthの値を変数aに格納 var a = JSON.parse(d).length; // MongoDB へ 接続 MongoClient.connect(url, (error, db) => { var collection; // コレクションの取得 collection = db.collection("products"); // コレクションにドキュメントを挿入 collection.insertOne({ //変数aの値をlengthとして挿入 "length": a // "name": a, // "price": 1280 }, (error, result) => { db.close(); }); }); console.log("emit_from_server_if_try_a = " + a); io.sockets.emit('emit_from_server', a); d = ""; }catch(e){ console.log('error'); d = ""; } } }); |
Node.jsを起動してmongoDBにデータを保存する
Node.jsのソースを用意し、Arduinoからセンサのデータが送信されてきていることが確認できたら、mongoDBを起動します。
mongoDBをインストールしたフォルダのbinに移動し、「mongod.exe」をダブルクリックします。
すると、以下の画面が表示されますので、これはそのまま放置します。
次にNode.jsを起動します。
コマンドプロンプトでapp.jsがあるフォルダまで移動し、「node app.js」を入力して実行します。
すると、Arduinoから送信されてきたセンサ(測距モジュール)の値が受信されます。
データを数個受信できたら、「Ctrl+C」で処理を中断します。
mongoDBにデータが保存されたことを確認
mongoDBにデータが保存されたことを確認します。
コマンドプロンプトでmongoDBがインストールされたフォルダまで移動し、「mongo」と入力して実行します。これでmongoシェルが起動しますので、「use mydb」と入力して実行します。
次に、「db.products.find()」と入力して実行すると、Arduinoから送信されてきたセンサ(測距モジュール)の値がしっかりと保存されていることが確認できます。
今回はこのようにして、ArduinoとNode.jsで測定したセンサからの値をmongoDBに保存してみました。
mongoDBで使用できるモジュールとして「mongoose」というモジュールがあるみたいですが、そちらのほうは上手く実装することができませんでした。とりあえず、DBにデータを登録することができたので今回はよしとします。
コメントを残す