Mana Blog Next

自宅IoT、仕事と家庭、カメラ、筋トレ生活

【テスト走行】IoTプラレール Pythonのコードで動かす

前回の続きです。

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ブラウザーから操作する方法をご紹介します。