TWELITE I/O確認
通信できることが分かったので、具体的にI/Oを行ってみたくなるのは人情。
TWELITE-DIPからMONO Stickに送られてくるデータを翻訳してみた。PythonのソースコードはRaspberry PiによるIoTシステム制御(森北出版)を参照させていただいた。
:788115017B810CCAC2006E33000BFB1680002BFFFFFFFEFA
[0] : src = 0x78
[1] : command = 0x81
[2] : packet id = 0x15
[3] : version = 0x01
[4] : LQI = 0x7B
[5-8] : src address = 0x810CCAC2
[9] : dist = 0x00
[10-11]: time stamp = 0x6E33
[12] : relay flag = 0x00
[13-14]: volt = 0x0BFB
[15] : reserved = 0x16
[16] : DI1-4 = 0x80
[17] : DI1-4_chg = 0x00
DI1=0/0 DI2=0/0 DI3=0/0 DI4=0/0
[18-21]: e1-e4 = 0x2BFFFFFF
[22] : ef1-ef4 = 0xFE
AD1=0696 AD2=-001 AD3=-001 AD4=-001 [mV]
これを見ていればDIPが送ってくるデータの確認ができる。DIPでは”超簡単!標準アプリ”が走っている。これは1秒間隔でデータを送ってくるのでこのデータ表示も1秒間隔で更新される。
電源がONになっているかを目視確認するためにLED1を配置し、DIPのマニュアル通りにDO1とPWM1にLEDを配置した。またDI1にSW1を配置した。DI1はプルアップされているのでこの回路になっている。更にAI1に温度センサー出力を繋いでいる。
この回路でSW1をONすると以下に変わる。
ON DI1=1/1 DI2=0/0 DI3=0/0 DI4=0/0
SW1をOFFすると以下になる。
DI1=0/1 DI2=0/0 DI3=0/0 DI4=0/0
つまりChange bit(の0/1の分母)は1のままの残るわけだ。これで1秒のインターバルよりも短い時間で状態遷移が発生しても記録が残るわけだ。
温度センサー(AD1)も手を当てていると数値が上がっていく。期待通りの動き。
次に出力制御を見てみる。その前に実際のブレッドボードは以下の通り。出力制御ではLED2とLED3の制御を行う。
以下がサンプルプログラム。至ってシンプル。
import serial
sr = serial.Serial("/dev/ttyUSB0", 115200)
# 78 80 01 00 01 00FF 0000 0000 0000
sr.write(':7880010101007F000000000000XX' + '\r\n')
sr.close()
太字が重要で、最初の太字の00のBit0からBit3DO1からDO4に対応する。1がHighで0がLow。回路図の通りで、DO1がLowでLED3が点灯する。次の01はマスクで、01になっているのでDO1はマスクされていない状態。
次の00FFがPWMの値。3FFでMAXでここでの設定は7FなのでLDE2はかなり暗い。
なおMONO-WIRLESSには以下の記載がある。
1: 1バイト : 宛先アドレス(論理デバイスID) (0x00: 親機, 0x01 ~ 0x64: 子機ID指定, 0x78: 全子機)
親機から子機、または子機から親機への伝送に限ります。
2: 1バイト : コマンド番号 (0x80 固定)
3: 1バイト : 書式バージョン (0x01 固定, 将来のための拡張)
4: 1バイト : IO状態
b7..b3b2b1b0とした場合 b0/b1/b2/b3 が DO1/DO2/DO3/DO4)の設定値となり、0がHi、1がLoとなります。設定を有効化するために、続く IO状 態マスクのビットがを1に設定します。
5: 1バイト : IO状態設定マスク
b7..b3b2b1b0とした場合 b0/b1/b2/b3 が DO1/DO2/DO3/DO4)の設定値となり、0で対応するDOを設定しない、1で設定します。
6: 2バイト : PWM1の設定値 0(0%)~1024(100%)または0xFFFF(設定しない)を与えます。
7: 2バイト : PWM2の設定値
8: 2バイト : PWM3の設定値
9: 2バイト : PWM4の設定値
10:1バイト : チェックサム
チェックサムは省略可能で、その場合は”XX”を入力すればよい。
チェックサムを計算したければ、上記MONO-WIRELESSの以下の解説に従えばよい。
データ部の各バイトの和を8ビット幅で計算し2の補数をとります。つまりデータ部の各バイトの総和+チェックサムバイトを8ビット幅で計算すると0になります。
チェックサムバイトをアスキー文字列2文字で表現します。
例えば 00A01301FF123456 では 0x00 + 0xA0 + ... + 0x56 = 0x4F となり、この二の補数は0xB1 です。(つまり 0x4F + 0xB1 = 0)
まぁ、いずれにせよ基本的なI/Oが出来ていることが確認できたわけだ。
めでたし、めでたし。
« TWELITE パワーオン | トップページ | TWELITE Device IDの設定 »
「TWELITE日記」カテゴリの記事
- TWELITEでソーラーパワーを使う - その4(2024.01.28)
- TWELITEでソーラーパワーを使う - その3(2024.01.26)
- TWELITEでソーラーパワーを使う - その2(2024.01.23)
- TWELITEでソーラーパワーを使う(2024.01.23)
- ゼロプレシャーICソケットに細いピンヘッダーを取り付けた(2024.01.20)
コメント