用意するものや基板の実装方法は、前回記事で紹介しています。
IoTプラレールをPythonのコードで動かす~テスト走行
前回記事では、プラレールと貨車を改造して準備する所まで紹介しました。今回はPythonのプログラムでプラレールを動作させてみます。まずはテスト走行です。
事前セットアップ
テスト走行を始める前に、Raspberry Pi Raspbian Stretchのパッケージアップデートを実行し、再起動を行います。
$ sudo apt update $ sudo apt upgrade $ sudo reboot
Raspberry PiをMQTT Subscriberとして動作させるため、以下の必要パッケージをインストールします。
$ sudo apt install python-rpi.gpio $ pip install paho-mqtt
GitコマンドでIoTプラレール用のSubscriberを展開します。次の手順で紹介するサンプルコード motor_on_off.py
も以下のリポジトリに格納されています。
$ git clone https://github.com/manami-taira/iot-plarail-subscriber.git
モーター制御
まず、モーターを制御するにあたり、Pythonのサンプルコードをご紹介します。動作確認用のサンプルコードのmotor_on_off.py
について説明します。
#-*- coding: utf-8 -*- import RPi.GPIO as GPIO import time IN_A = 20 #GPIO:20 IN_B = 21 #GPIO:21 def gpio_init(): GPIO.setmode(GPIO.BCM) 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.BCM)を指定することでRaspberry Piの40ピンの表記名と同じモードで初期化します。gpio_init()はmotor_init()の中から呼ばれています。
def gpio_init(): GPIO.setmode(GPIO.BCM) return
GPIO:20とGPIO:21をOUTPUTモードに指定します。
def motor_init(): gpio_init() GPIO.setup(IN_A,GPIO.OUT) GPIO.setup(IN_B,GPIO.OUT) motor_stop() return
そして、GPIO:20をLOW、GPIO:21をLOWにセットして初期化します。
def motor_stop(): GPIO.output(IN_A,GPIO.LOW) GPIO.output(IN_B,GPIO.LOW) return
次にGPIO:20 をHIGH、GPIO:21をLOWにセットします。次のtime.sleep() 関数で走行させたい秒数を指定します。
def motor_forward(): GPIO.output(IN_A,GPIO.HIGH) GPIO.output(IN_B,GPIO.LOW) return
最後に車両を停止させるために、GPIO:20 をLOW、GPIO:21をLOWにセットします。
def motor_stop(): GPIO.output(IN_A,GPIO.LOW) GPIO.output(IN_B,GPIO.LOW) return
動作確認時はレールに載せずに駆動車両をペットボトル飲料のキャップに乗せて浮かせるか、横に90°倒した状態で確認すると良いでしょう。レールの上で行うとHDMIケーブルやシリアルケーブルがつながった状態で発進してしまい大変なことになります。
上記で紹介したサンプルプログラムでは外部から操作できません。Wi-Fi経由でRaspberry Pi Zero WにSSHでログインしてから、Pythonのコードを実行すると動作確認しやすいです。
次のようにPythonコマンドで実行すると駆動車両のモーターが2秒間動いて静止します。
# python ./motor_on_off.py
ただ、コマンドラインから操作するだけでは子どもに遊ばせるには難しいでしょう。そこで次に、MQTTプロトコルを使ってWebブラウザーから操作する「IoTマスコン」を作る方法をご紹介します。