読者です 読者をやめる 読者になる 読者になる

Mana Blog Next

ガジェット好きIT系母ちゃんが二人の子どもを育てながらIoTに挑戦するブログ。

スポンサーリンク

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

前回の続きです。

IoTプラレールを制御するPythonのコードは、GitHubのこちらに公開しています。 GitHub - htaira/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ブラウザーから操作する方法をご紹介します。

© Manami Taira