前回unitv2とラズパイZERO間のuart通信についてまとめました。↓
今回はこれを利用してraspberrypiのGPIOを制御し、Lチカしてみようと思います。
動作の流れとしては、
unitv2(WEBサーバー)→js→CGI(python)→uart→ラズパイ(GPIO)
となります。unitv2にブラウザでアクセスし、そこの画面からラズパイのGPIOをON,OFFする感じです。
前回までの内容の、ラズパイ側のpythonにGPIOのプログラムを追加するだけです。
初めに
Lチカの準備
4つのLEDを上下左右のボタンに紐づけて点灯させたいので、ラズパイから適当に4つのGPIOからジャンピングワイヤーを引っ張ってきます。その先に抵抗とLEDをブレッドボード等を使って配置します。
RaspberryPi ZERO
python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
import time import serial import RPi.GPIO as GPIO data3 = 'abc' ## 初期化 GPIO.setmode(GPIO.BCM) MOTOR_A1 = 4; MOTOR_A2 = 13; MOTOR_A3 = 12; MOTOR_A4 = 25; GPIO.setup(MOTOR_A1, GPIO.OUT) GPIO.setup(MOTOR_A2, GPIO.OUT) GPIO.setup(MOTOR_A3, GPIO.OUT) GPIO.setup(MOTOR_A4, GPIO.OUT) ser = serial.Serial('/dev/ttyS0', 115200, timeout = 0.5) while True: #global data3 #コマンドの結果を受信 time.sleep(0.1) data = ser.readline() #区切り文字0x0Aまでのデータを受信 data2 = data.strip().decode('utf-8') print(data2) if data2 == 'hhhhh' or data2 == 'iiii' or data2 == 'kkkk' or data2 =='jjjj': data3 = data2 if data3 == 'hhhhh': GPIO.output(MOTOR_A1,GPIO.HIGH) print('ff') elif data3 == 'jjjj': GPIO.output(MOTOR_A2,GPIO.HIGH) print("lf") elif data3 == 'kkkk': GPIO.output(MOTOR_A3,GPIO.HIGH) print('bk') elif data3 == 'iiii': GPIO.output(MOTOR_A4,GPIO.HIGH) print('rt') elif data2 == 'ssss': GPIO.output(MOTOR_A1,GPIO.LOW) GPIO.output(MOTOR_A2,GPIO.LOW) GPIO.output(MOTOR_A3,GPIO.LOW) GPIO.output(MOTOR_A4,GPIO.LOW) data3 = 'abc' print('st') |
while文の手前でGPIOの初期化、setupを行います。
while文の中では、任意の文字列が検出された場合にGPIOピンの信号をON,OFFするようにしています。
それでは操作確認してみます。
動作確認
次回は、サーボモーターを動かしてみたいと思います。