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"]]}]