オーディオ、ビジュアル機器、料理のツール、キットの製作などを取り上げます。前回、ラズパイにA-DコンバータのMCP3008をつなげ、実験のためにチャネル0のCH0を3.3VにCH1をGNDに接続して動作を確認しました。入力電圧を可変できるようにして、実験を続けます。●ボリュームを使って電圧を変化させる電子部品にボリューム(可変抵抗)があります。実験では半固定抵抗がよく使われます。トリマとも呼ばれます。市販の製品の中でも使われていますが、基板取り付け用の寿命は200回ほどで短命です。1回転(300度)のが普通で、精密に値を設定できる多回転(20回ぐらい)もあり、計測回路などではよく使われています。回路図では、VRx、RVxという名称です。VはVariableの頭文字と思われます。●MCP3008との接続チャネル0=CH0へ可変電圧を入れるようにします。今回のテスト回路では、ボリュームの値は適当でかまいません。5k~50kΩのどれを使ってもよいです。converter」を中央のワーク・スペースへドラッグ&ドロップします。このノードをダブルクリックして設定画面を開きます。「A0」はデフォルトのままです。チップ・セレクト信号も前回と同様、デフォルトのCE0のままです。Doneをクリックして終了します。injectノードをドラッグ&ドロップし、ダブルクリックで設定画面を出します。Payloadは「timestamp」を選び、Repeatは「interval」を選び、デフォルトの1秒のままでDoneを押して終了します。0)のノードを結びます。これで、1秒ごとにA-Dコンバータのデータを読みに行きます。debugノードを追加します。0)」ノードの出力につなぎます。これで、A-D変換された入力電圧がdebugノードに渡たされたので、画面右のdebugエリアに変換データが表示されます。画面右肩のDeployをクリックし、画面右のdebugタブをクリックします。「474」というA-D変換したデータが表示されています。10ビットA-Dコンバータは0~1023のデータを出力します。1.5275Vの電圧が入力されていることがわかります。ボリュームを回すと、この値も変わってきます。この計算式をfunctionノードを追加して書き加えます。書かれているだけです。node-REDでは各ノード間をメッセージが流れていきます。functionの前から入ってきたA-Dコンバータのメッセージをそのままfunctionの後ろから垂れ流すという動作になります。("電圧="+(msg.payload*3.3/1024)+"V");を追加します。msg.payloadは、流れてきたメッセージのうち「payload=データ本体」という変数で、型は何も指定していませんが、今は数値です。筆者の環境だけの問題かもしれませんが、エディットが正常にできません。テキスト・エディタで打ち込んだ文字をコピーして貼り込んでいます。Doneを押して完了です。0)」とdebugノードを結んでいる線の上にfunctionノードを持っていくと、線をつなぎなおしてくれます。このままではfunctionが何をしているのかがわからないので、設定画面のNameに「変換式」と入れました。Deployボタンを押します。debugエリアの表示が変わりました。無駄に桁数が多いですね。適当なところで四捨五入します。("電圧="+Math.round(msg.payload*3.3*10000/1024)/10000+"V");Math.roundは小数点以下を四捨五入します。一度1万倍して、四捨五入して1万で割ることで、小数点以下5桁以下を四捨五入しました。メッセージのうちpayloadを見ていますが、ヘッダなど、JSON形式全体の出力を見たいときは、debugノードを変更します。動作が変な時には役立つ情報が出力されます。●MQTTブローカに測定データを投げるMQTTを使うと、injectで1秒ごとにA-Dコンバータのデータを取得するように設定しているので、常に新しいデータがサーバーに送られます。温度を表示するのにhttpノードを使う場合、Webブラウザを人かプログラムで更新をしないと、新しいデータが表示されません。ここからは、インターネット上で、常に新しい測定データを表示できるようにします。outputにあるmqttノード(Publisher)をドラッグ&ドロップします。アイコンをダブルクリックして設定画面をだします。Server、Topic、QoSを変更します。Topicに「温度」という文字を入れましたが、「アナログ電圧CH0」というのでもよいでしょう。functionノードからmqttノードをつなぎます。右肩のDeployをクリックすると、mqttノードの下にconnectと表示が出ます。これで、測定データを含むメッセージがMQTTブローカに届いています。●MQTTブローカからデータを受け取るMQTTブローカに届いているメッセージを受け取るSubscriberを設定します。今、同じラズパイで作業をしていますが、このデータを受け取るのは、このラズパイでなくてもよいはずです。画面左にあるノード・パレットのinputにあるmqttノードをドラッグ&ドロップします。debugノードもドラッグ&ドロップします。mqttノード(購読側。Subscriber)の設定は、Publisherと内容を合わせます。debugノードはデフォルトのままです。mqttノードとdebugノードをつないで、Deployをクリックします。このままでは、二つのdebugノードからメッセージが右のdebugエリアに出てしまいます。データ形式が同じなので、どちらからの出力なのか判別できません。debugノードのアイコンの右にあるベロのようなところをクリックすると、少し引っ込んで色が薄くなります。これで、debug出力を抑制できます。MQTTブローカからSubscribeしたデータだけを、右のdebugエリアに表示するようにしました。●IoTデータ可視化サービスを利用dweet.ioというWebでは、いろいろな形式のデータを受け取ってグラフ化してくれます。node-REDにこのサイトと通信するノードを追加します。paletteから、installタブの検索欄に「dweet」をいれるとnode-red-node-dweetioが出てくるので、installボタンを押します。ノード・パレットのoutputからdweetioノードをドラッグ&ドロップします。ノード・アイコンをダブル・クリックして設定画面を出します。Thingの欄に「ondo」と入れます。mqttノードの出力をdweetioノードにつなぎます。Delpoyを押すと、成功したと表示が出ます。反映されているかどうかを確認するために、下記のURLをアクセスします。https://dweet.io/follow/ondoほぼ1秒ごとに電圧が更新されています。freeboard」というリンクがあります。クリックしてそのまま飛んでいくとDATASOUCESが設定されています。freeboardは複数の計測結果を表示できるサイトです。一度登録をしているので、すぐに表示ができましたが、初めてのときは登録作業を求められるかもしれません。「電圧=2...」を表示しているpayloadのスパナの形をしたWIDGETの編集アイコンの下付近にマウスを載せると、同じスパナが出てくるのでクリックします。文字の大きさSIZEを変更します。データをどこから持ってくるかはVALUEの欄に記入します。最初は「datasoureces["」の文字があります。欄の右のDATASOURCEをクリックすると、「Dweet」が出ます。クリックすると取り込まれ、「datasoureces["Dweet"]」に欄の内容が変わり、次の選択肢として「payload」がでるので、クリックすると、欄は、datasources["Dweet"]["payload"]と、完全な形になります。そのまま、右下のSAVEをクリックします。最終的には、Dweet.ioと同じ表示です。電圧が1秒ごとに更新されてます。こちらのfreeboardはいろいろな図を利用できるのが特徴です。データを蓄積して折れ線グラフを書くときなどは便利でしょう。ライセンスで提供されています。