「RaspberryPi」に無線モジュール「TWE-Lite DIP」を接続してUART通信をする。


TWE-Lite DIP端末のアナログ入力をRaspberryPiに取り込み、入力電圧が1Vを越えると 端末のLEDを点灯させる試みです。
動作画像をYouTubeにアッしてあります。
無線モジュールTWE-Lite DIP は東京コスモス(株)の製品で完成品でも\1,890と安価ですし、初心者にも解りやすい説明書と
ピン配置表が付いてきます。電子工作大好き人間の好奇心をくすぐる楽しいガジェットです。

今回の試みのためUART-RS232Cレベルコンバータの作成から始めましたが、不明なことや疑問はリンク貼付先の諸兄ページ
の他にも多くの関連ページから情報をいただき感謝しております。     
結線図

Raspberry-pi+TWE-Lite DIP 結線図   上側の「TWE-Lite DIP」は端末として使います。
  アナログ入力のボリュームと出力表示のLEDを接続
  してあります。また、応答を速くするため M1をGND
  に接続して親機としています。

  下側の「TWE-Lite DIP」は「RaspberryPi」とUARTと
  デジタル入出力(トランジスタ−で反転)端子を接続
  してあります。
  UARL接続は、RX-RX TX-TX GND-GND になります。

  端子番号は仕様書等で調べてください。


TWE-Lite DIPのシリアルデーターをRaspberry-Piで見る

RaspberryPiの初期設定ではGPIOのシリアルピンはポートとして使えないため、設定を変更する必要があります。
参考ページ RaspberryPiのUART端子番号の解説もあります。

動作確認のために、ターミナルエミュレータ(minicom)をインストールして
pi@raspberrypi ~ $ minicom -b 115200 -o -D /dev/ttyAMA0
welcome to minicom 2.6.1
OPTIONS: I18n
Compiled on Apr 28 2012, 19:24:31.
Port /dev/ttyAMA0
Press CTRL-A Z for help on special keys

:0081150160810001C300778F000AAC1B000000FFFFFFFDF3
ちなみに minicomを終了するコマンドはctrl+A Q です。
上記:008…DF3 データの内容は TWE-Lite DIP使用方法にあります。
詳細は、TWE-Lite DIPを試す AD変換結果が参考になりました。

Pythonで見る。
Pythonのシリアルポート操作ライブラリをインストールして
#! /usr/bin/env python
import serial
ser=serial.Serial('/dev/ttyAMA0',115200)
while True:
  rx= ser.readline()
  print rx  #シリアルデータ
  rx01 = rx[37:39] #ADI-1の入力値
#補正値を取り出す。もっとスマートな方法があるだろうな!
  rx02 = rx[46] # ef1(0x) 補正値
  rx03 = int(str(rx02),16) # 16進 -> 2進
  rx04 = bin(rx03)[4:6] # 8bit binary -> LSB 2bit
  rx05 = int(str(rx04),2) # 2bit binary -> Decimal
#計算 補正値は 0〜3 実際は0〜12(mV)
  a01 = (int(rx01,16))*4
  a02 = (a01 + rx05) * 4
  print a02, "[mV]"

RaspberryPiのGPIO出力
手始めにコマンド入力で動作確認をしてみました。GPIO-7(26p)のみを対象に出力として設定して
1(= on)、0(= off)を書き込みます。その都度のsudoタイプが煩わしいので、rootになって
pi@raspberrypi ~ $ sudo -i
root@raspberrypi:~# echo 7 > /sys/class/gpio/export
root@raspberrypi:~# echo out > /sys/class/gpio/gpio7/direction
root@raspberrypi:~# echo 1 > /sys/class/gpio/gpio7/value
root@raspberrypi:~# echo 0 > /sys/class/gpio/gpio7/value
root@raspberrypi:~# echo 7 > /sys/class/gpio/unexport
root@raspberrypi:~# exit
logout
pi@raspberrypi ~ $
上記手順で、TWE-Lite DIP親機のLEDが off→on→off します。
 
Pythonで動かす。
「Let's start… RaspberryPi's …(GPIO) facilities.」を参考にしました。
sudo apt-get update
sudo apt-get install python-rpi.gpio
GPIO操作ライブラリをインストールしてから
#! /usr/bin/env python
import serial
import RPi.GPIO as GPIO
IO_NO = 7
print("press ^C to exit program ...\n")
GPIO.setmode(GPIO.BCM) # ***
GPIO.setup(IO_NO, GPIO.OUT)
ser=serial.Serial('/dev/ttyAMA0',115200)
try:
  while True:
    rx= ser.readline()
    print rx
    rx01 = rx[37:39]
    rx02 = rx[46]
    rx03 = int(str(rx02),16)
    rx04 = bin(rx03)[4:6]
    rx05 = int(str(rx04),2)
    a01 = (int(rx01,16))*4
    a = (a01 + rx05) * 4
    print " ---> ", a, "[mV]"
    if a > 1000 :
      GPIO.output(IO_NO, True)
    else:
      GPIO.output(IO_NO, False)
except KeyboardInterrupt:
    print("detect key interrupt\n")
GPIO.cleanup()
print("Program exit\n")
*** GPIO.setmode(GPIO.BOARD) だと、データ表示はしますが「Lチカ」ができません。

終了時は GPIO.cleanup()でポートを解放しないと、次に同じプログラムを走らせた時にエラーが出ます。
これはコマンド入力の echo * > /sys/class/gpio/unexport でも同様でした。      2014/01/12

ホームページに戻る