node-RED Tips -- Input (1)

CPUのクロックを表示(2016/11/30)

 ラズパイのクロックは、デフォルトから次のように/boot/config.txtに書き加えると変更できます。Raspberry Pi 3 Model 3の例です。

arm_freq=1300

 クロックを高くし過ぎると、リブートして立ち上がらないときがあります。一度電源を落とします。再度電源を入れたときにShiftキーを押したままにしておくと、デフォルトのクロックで立ち上がり、config.txtを修正できます。それもできないときは、PCへマイクロSDメモリもってきて/boot/config.txtを修正します。このディレクトリはfatフォーマットになっています。

 動作中に発熱しCPU温度が高く(85℃以上)なると600(700)MHzにクロック・ダウンします。これらの数値は、古いかもしれません。

 動作時のクロックは、ファイルに書き込まれているので次のように読み出します。

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq

 node-REDはexecノードにこの記述を直接書き込んで実行できます。

[{"id":"4404c35a.efde9c","type":"tab","label":"Flow 1"},{"id":"7ef2285a.865898","type":"inject","z":"4404c35a.efde9c","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":104,"y":87,"wires":[["c7914d15.39e7f"]]},{"id":"f9cd19d7.e625c8","type":"debug","z":"4404c35a.efde9c","name":"","active":true,"console":"false","complete":"payload","x":730,"y":282,"wires":[]},{"id":"c7914d15.39e7f","type":"exec","z":"4404c35a.efde9c","command":"cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq","addpay":true,"append":"","useSpawn":"","timer":"","name":"","x":402,"y":180.5,"wires":[["f9cd19d7.e625c8"],[],[]]}]

CPUの温度を表示(2016/11/30)

 execノードを使います。

vcgencmd measure_temp

を入力し、その下の+Appendのmsg.payloadのチェックを外します。

 実行すると、摂氏で温度が取り出せます。℃の表示がおかしいですが、見た目は気にしないことにします。

[{"id":"4404c35a.efde9c","type":"tab","label":"Flow 1"},{"id":"7ef2285a.865898","type":"inject","z":"4404c35a.efde9c","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":104,"y":87,"wires":[["c7914d15.39e7f"]]},{"id":"f9cd19d7.e625c8","type":"debug","z":"4404c35a.efde9c","name":"","active":true,"console":"false","complete":"payload","x":730,"y":282,"wires":[]},{"id":"c7914d15.39e7f","type":"exec","z":"4404c35a.efde9c","command":"vcgencmd measure_temp","addpay":false,"append":"","useSpawn":"","timer":"","name":"","x":349,"y":172.5,"wires":[["f9cd19d7.e625c8"],[],[]]}]

IPアドレスをしゃべる(2016/11/30)

 IPアドレスを表示します。execノードに、シェルでは動作する

hostname -I

と書き込んでも実行されません。

 ラズパイで、次のシェル・プログラムをテキスト・エディタで作成します。保存名はip.shにしました。

#!/bin/sh
hostname -I | cut -c -15

 実行権を付けます。

sudo chmod 755 ip.sh

 node-REDのexecノードに、フルパスでプログラムを記述します。$HOMEは/home/piでも同じです。

$HOME/ip.sh

 実行すると、DHCPでふられたIPアドレスが得られます。

 これに、play audioノードを追加してつなげば、IPアドレスを読み上げてくれます。

[{"id":"4404c35a.efde9c","type":"tab","label":"Flow 1"},{"id":"7ef2285a.865898","type":"inject","z":"4404c35a.efde9c","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":104,"y":87,"wires":[["c7914d15.39e7f"]]},{"id":"f9cd19d7.e625c8","type":"debug","z":"4404c35a.efde9c","name":"","active":true,"console":"false","complete":"payload","x":730,"y":282,"wires":[]},{"id":"c7914d15.39e7f","type":"exec","z":"4404c35a.efde9c","command":"$HOME/ip.sh","addpay":true,"append":"","useSpawn":"","timer":"","name":"","x":309,"y":172.5,"wires":[["f9cd19d7.e625c8","36c65b18.2f9274"],[],[]]},{"id":"36c65b18.2f9274","type":"play audio","z":"4404c35a.efde9c","name":"","voice":"","x":454,"y":348,"wires":[]}]

DMM 34461Aで測定(2016/11/30)

 HP-IBからGP-IBと変わりましたが、長い間計測装置のインターフェースとしてGP-IBは使われてきました。時代はUSBやイーサネットです。DMMとして数多く出荷されたHP(Agilent)の34401Aの制御はSCPIというGP-IBの命令体系を継承しています。DMMは現在、Keysight(Aligent)の34461Aに移行しています。このDMMは標準でUSBとイーサネットを装備しています。Keysight社に限らず、多くのDMMはSCPIを採用しています。また、DMMに限らず、数多くの測定器がSCPIを操作言語として利用できます。ただし、SCPIはいろいろ方言があるようなので、利用する機種のマニュアルに合わして変更してください。

 計測器のイーサネット接続では、5025ポートを使うことが多いと、この文献に書かれています。

 この文献に書かれているように、ラズパイのPythonで動かすコードは次のようになります。

#!usr/bin/env python
import socket
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('192.168.111.102', 5025))
s.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
s.settimeout(2)
s.send('*IDN?\n')
print 'ID: ' + s.recv(1000)
s.send('CONF:VOLT:AC 100,0.0001\n')
s.send('VOLT:AC:BAND 20\n')
s.send('READ?\n')
print 'AC: ' + s.recv(1000)
s.close()

 *IDN? は製造業者や機種の情報を聞いています。返ってきたのは

ID: Keysight Technologies,34461A,MY53216054,A.02.09-02.37-02.09-00.49-01-01

 CONF:VOLT:AC 100,0.0001\nとVOLT:AC:BAND 20\nでAC電圧測定を指定して、READ?\nでデータを読み取ります。返ってきたのは次の電圧でした。

AC: +0.00000000E+00

 DHCPサーバによってふられているIPアドレス「192.168.111.102」は、34461Aでは次のように調べます。

  • Shiftキー-Utilityキー
  • メニューI/O config
  • メニューLAN settings

 これらの情報を踏まえて、node-REDでTCP通信を行えばいいのですが、DMMから送られてきた文字列をそのまま取り込むと、データが化けます。文字列の最後に\0が存在しないので、次のように0を足します。\0が正しいかもしれませんが、さきほどの文献のCのプログラム・ソースにコメントとして書かれています。

msg.payload= ((msg.payload)+0);

[{"id":"bc1fe993.d99478","type":"tab","label":"Flow 2"},{"id":"33dfeeed.91f562","type":"inject","z":"bc1fe993.d99478","name":"DCセット例","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":113,"y":274,"wires":[["d4c3a8f2.1d9ee8"]]},{"id":"8400981d.68bc28","type":"debug","z":"bc1fe993.d99478","name":"","active":true,"console":"true","complete":"payload","x":653,"y":403,"wires":[]},{"id":"927a6c28.1ecfe","type":"tcp request","z":"bc1fe993.d99478","server":"192.168.111.102","port":"5025","out":"time","splitc":"100","name":"","x":507,"y":232,"wires":[["43559975.5a06b8"]]},{"id":"d4c3a8f2.1d9ee8","type":"function","z":"bc1fe993.d99478","name":"","func":"msg.payload = (\"CONF:VOLT:DC 100, 0.0001\\nVOLT:DC:BAND 20\\n\");\nreturn msg;\n","outputs":1,"noerr":0,"x":252,"y":274,"wires":[["927a6c28.1ecfe"]]},{"id":"98d30fc4.9951e","type":"inject","z":"bc1fe993.d99478","name":"機器情報","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":95,"y":163,"wires":[["38b4272c.772398"]]},{"id":"38b4272c.772398","type":"function","z":"bc1fe993.d99478","name":"*IDN?","func":"msg.payload = (\"*IDN?\\nSYST:TEMP?\\n\");\nreturn msg;\n","outputs":1,"noerr":0,"x":221,"y":163,"wires":[["927a6c28.1ecfe"]]},{"id":"43559975.5a06b8","type":"function","z":"bc1fe993.d99478","name":"デリミタ0追加","func":"msg.payload= ((msg.payload)+0);\nreturn msg;","outputs":1,"noerr":0,"x":550,"y":331,"wires":[["8400981d.68bc28"]]},{"id":"7f8f7bd0.35e224","type":"inject","z":"bc1fe993.d99478","name":"リセット","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":100,"y":114,"wires":[["746cc5e1.dbe8ec"]]},{"id":"746cc5e1.dbe8ec","type":"function","z":"bc1fe993.d99478","name":"*RST","func":"msg.payload = (\"*RST\\n\");\nreturn msg;","outputs":1,"noerr":0,"x":223,"y":116,"wires":[["927a6c28.1ecfe"]]},{"id":"706497d0.e3b158","type":"inject","z":"bc1fe993.d99478","name":"測定","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":93,"y":385,"wires":[["210afae0.e1a846"]]},{"id":"210afae0.e1a846","type":"function","z":"bc1fe993.d99478","name":"READ","func":"msg.payload = (\"READ?\\n\");\nreturn msg;","outputs":1,"noerr":0,"x":251,"y":382,"wires":[["927a6c28.1ecfe"]]},{"id":"d7b68bee.05b048","type":"inject","z":"bc1fe993.d99478","name":"ACセット例","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":112,"y":327,"wires":[["ad2232d.50097d"]]},{"id":"ad2232d.50097d","type":"function","z":"bc1fe993.d99478","name":"","func":"msg.payload = (\"CONF:VOLT:DC 100, 0.0001\\nVOLT:DC:BAND 20\\n\");\nreturn msg;\n","outputs":1,"noerr":0,"x":253,"y":329,"wires":[["927a6c28.1ecfe"]]}]