前回の続きです。
IoTプラレールを制御するPythonのコードは、GitHubのこちらに公開しています。 GitHub - manami-taira/iot-plarail-subscriber: iot-plarail-subscriber
まず、モーターを制御するにあたりサンプルコードをご紹介します。 動作確認用のサンプルコードとしては motor_on_off.py について紹介しますね。
サンプルコード: motor_on_off.py
#-*- coding: utf-8 -*- import RPi.GPIO as GPIO import time IN_A = 5 #GPIO:5 IN_B = 6 #GPIO:6 def gpio_init(): GPIO.setmode(GPIO.BMC) return def gpio_cleanup(): GPIO.cleanup() return def motor_init(): gpio_init() GPIO.setup(IN_A,GPIO.OUT) GPIO.setup(IN_B,GPIO.OUT) motor_stop() return def motor_forward(): GPIO.output(IN_A,GPIO.HIGH) GPIO.output(IN_B,GPIO.LOW) return def motor_stop(): GPIO.output(IN_A,GPIO.LOW) GPIO.output(IN_B,GPIO.LOW) return def main(): motor_init() motor_forward() time.sleep(2.0) motor_stop() gpio_cleanup() return if __name__ == "__main__": main()
どうでしょうか?ちょっと行数が多いでしょうか?短くまとまっていると思いますが、少しずつ解説していきますね。
main()関数の部分から辿っていきましょう。
def main(): motor_init() motor_forward() time.sleep(2.0) motor_stop() gpio_cleanup() return
まず、GPIO.setmode(GPIO.BMC)を指定することでラズパイの40ピンの表記名と同じモードで初期化します。 gpio_init()はmotor_init()の中から呼ばれています。
def gpio_init(): GPIO.setmode(GPIO.BMC) return
GPIO:5とGPIO:6をOUTPUTモードに指定します。
def motor_init(): gpio_init() GPIO.setup(IN_A,GPIO.OUT) GPIO.setup(IN_B,GPIO.OUT) motor_stop() return
そして、GPIO:5をLOW、GPIO:6をLOWにセットして初期化します。
def motor_stop(): GPIO.output(IN_A,GPIO.LOW) GPIO.output(IN_B,GPIO.LOW) return
次にGPIO:5番をHIGH、GPIO:6をLOWにセットします。次のtime.sleep() 関数で走行させたい秒数を指定します。
def motor_forward(): GPIO.output(IN_A,GPIO.HIGH) GPIO.output(IN_B,GPIO.LOW) return
最後に車両を停止させるために、GPIO:5番をLOW、GPIO:6番をLOWにセットします。
def motor_stop(): GPIO.output(IN_A,GPIO.LOW) GPIO.output(IN_B,GPIO.LOW) return
動作確認時はレールに載せずに駆動車両をペットボトル飲料のキャップで浮かせるか、横に90°倒した状態で確認すると良いでしょう。 レールの上で行うとHDMIケーブルやシリアルケーブルが繋がった状態で発進してしまい大変な事になります。
上記で紹介したサンプルプログラムでは外部から操作できません。Wi-Fi経由でラズパイZeroにSSHでログインしてからPythonのコードを実行すると動作確認しやすいです。
次のようにpythonコマンドで実行すると駆動車両のモーターが2秒間動いて静止します。
# python ./motor_on_off.py
また、コマンドラインから操作するだけでは子供に遊ばせるには難しいので、次回はIoTでよく使われるMQTTプロトコルを使ってWebブラウザーから操作する方法をご紹介します。