SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Raspberry Pi Zeroではじめよう! おうちで楽しむIoTレシピ

Raspberry Pi ZeroでIoTプラレールを作ってみよう~PythonとAzureでWebアプリから制御する

Raspberry Pi Zeroではじめよう! おうちで楽しむIoTレシピ 第10回

  • このエントリーをはてなブックマークに追加

 この連載では、約650円で買えるマイコンボードRaspberry Pi Zeroを使って、ITエンジニアがIoTを学べたり、家族で楽しんだりできるIoTレシピをご紹介していきます。最終回となる今回は、Raspberry Pi Zero Wをプラレールの貨車に搭載し、Webアプリで「IoTプラレール」を制御する方法をご紹介します。

  • このエントリーをはてなブックマークに追加

 用意するものや基板の実装方法は、前回記事で紹介しています。

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について説明します。

サンプルコード: 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マスコン」を作る方法をご紹介します。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
AzureでIoTマスコンを作ってみよう(1)

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
Raspberry Pi Zeroではじめよう! おうちで楽しむIoTレシピ連載記事一覧

もっと読む

この記事の著者

平 愛美(タイラ マナミ)

 熊本県出身のITエンジニア。2児の母で、趣味は写真とグルメ。最近はRaspberry Pi、Arduinoを使った家庭内IoTについて日々研究するIT系母ちゃんとして活躍中。主な著書は、『改訂3版 Linuxエンジニア養成読本』(寄稿、技術評論社 刊)、『Linuxシステム管理標準教科書』(共著、LPI-Japan)など。 ブログ:Mana Blog Next Twitter:@mana_cat

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/11301 2019/01/09 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング