3.2 Raspberry Pi B+ インタラクティブモードでLチカ

3.2 Raspberry Pi B+ インタラクティブモードでLチカ

これから、Python(プログラム)でLチカをしてみます。最初はPythonの対話型モード(インタラクティブモード)で、
1行ごとにプログラムを入れてLEDを点けます。次に消します。

(1) Lチカの回路を作ろう

① 組立
下の配線図、回路図をみて、回路を組立て下さい。

raspi_3.2_1 raspi_3.2_2

(2) Pythonを動かそう

① 電源を入れる。
Raspberry Pi B+ / Pi2 B / Pi3 BにACアダプタを繋ぎ、電源を入れます。

② ログインします。
Raspbianが立ち上がったら、ログインして下さい。

③ Pythonを立ち上げます
「sudo python」コマンドを実行して下さい。画面がPythonのシェル画面に変わります。

raspi_code_3.2_1

(3) LEDを点けてみよう

① モジュールの取り込み
「import RPi.GPIO as GPIO」を入力して下さい。
* 「RPi.GPIO」モジュールを取り込みます。

② GPIOの端子の選び方の選択。
「GPIO.setmode(GPIO.BCM)」を入力して下さい。

raspi_code_3.2_2

③ GPIOを選びます。
「LED1 = 5」を入力して下さい。
* 「GPIO5」をLED1にします。

④ LED1を出力にします。
「GPIO.setup(LED1, GPIO.OUT)」を入力して下さい。
* GPIO端子をGPIO番号で選択します。

⑤ LED1をHIGH(+3.3V)にします。
「GPIO.output(LED1, GPIO.HIGH)」を入力して下さい。
* HIGHになるとLED1に電流が流れてLED1が点きます。
* 点かない場合は、配線の間違い等がありますので、確かめて下さい。

raspi_code_3.2_3

(4) LEDを消してみよう

LED1をLOW(0V)にします。
「GPIO.output(LED1, GPIO.LOW)」を入力して下さい。
* LOWになるとLED1に電流が流れなくなりLED1が消えます。

raspi_code_3.2_4

(5) 後片付け

① GPIOの設定を消します。
「GPIO.cleanuo()」を入力して下さい。
* 設定のファイルを消さないと、次に使う時にGPIOが使えなくなることがあります。

② Pythonを終わります。
「exit()」を入力して下さい。
* raspibanに戻ります。

raspi_code_3.2_5

③ 電源をきります。
「sudo shutdown -h now」を入力して下さい。
* ステータスLEDの点滅が終わり、消えてからマイクロUSBのDC5Vを抜いて下さい。

raspi_code_3.2_6

3.3 Raspberry Pi B+ Lチカプログラムを作ろう!

 3.3 Raspberry Pi B+ Lチカプログラムを作ろう!
これから、対話型モード(インタラクティブモード)で、作ったプログラムを「nano」エディターを使ってプログラムを作り、
Lチカをします。

回路は3.2と同じです。

(1) Lピカのプログラムを作ろう

① 電源を入れます。
Raspberry Pi B+にACアダプタを繋ぎ、電源を入れます。

② ログインします。
Raspbianが立ち上がったら、ログインして下さい。

③ 「nano」エディター立ち上げます。
「nano rpi_bp_gpio_led1_1.py」コマンドを実行して下さい。画面が「nano」エディターの画面に変わります。

raspi_code_3.3_1

④ プログラムを入れます
サンプルプログラムを見て、入力します。
* 画面は入力が終わった状態です。

サンプルプログラム1

 #! /usr/bin/env python

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM) # use GPIO Number

LED1 = 5 # LED1 –> GPIO5
GPIO.setup(LED1, GPIO.OUT) # set GPIO5 output

GPIO.output(LED1, GPIO.HIGH) # LED1 ON

time.sleep(3)

GPIO.output(LED1, GPIO.LOW) # LED1 OFF

GPIO.cleanup()

 

 

⑤ 入力を終わります。
「ctrl + X」を実行します。次に、「y/n」は「enter」を入れます。

⑥入力したプログラムを実行します。

入力を実行します。
「sudo python rpi_bp_gpio_led1_1.py」を実行します。
*LEDが3秒間点いてその後に、「led1 done」のメッセージが出ます。
* LEDが点いたことを確かめて下さい。

raspi_code_3.3_4

(2) Lピカを繰り返してLチカにしよう

Lピカが出来ました。Lピカを繰り返して、Lチカにします。
* Pythonの新しい命令を使います。
* for , in , range(n)

* 書き方
for i in range(10):
インデント 命令
インデント 命令
インデント スペース

① 「nano」エディター立ち上げます。

「nano rpi_bp_gpio_led1a_1.py」コマンドを実行して下さい。
画面が「nano」エディターの画面に変わります。

② プログラムを変更します。

サンプルの様にプログラムを変更します。
– 「GPIO.output(LED1, GPIO.HIGH)」の前に「for i in range(10):」を追加します。

– 「GPIO.output(LED1, GPIO.HIGH)」~「GPIO.output(LED1, GPIO.LOW)」をサンプルの様に直します。

* 各命令をインデント(Tabキー)します。スペースは使わないこと。
* 「time.sleep(3)」を「time.sleep(0.5)」に変更します。
* 「time.sleep(0.5)」を追加します。

サンプルプログラム2

 #! /usr/bin/env python

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM) # use GPIO Number

LED1 = 5 # LED1 –> GPIO5
GPIO.setup(LED1, GPIO.OUT) # set GPIO5 output

for i in range(10): # repeat 10 times
print(i)
GPIO.output(LED1, GPIO.HIGH) # LED1 ON
time.sleep(0.5)

GPIO.output(LED1, GPIO.LOW) # LED1 OFF
time.sleep(0.5)

GPIO.cleanup()

print(“led1a done”)

 

③入力を終わります。

「ctrl + X」を実行します。
次に、「y/n」は「enter」を入れます。

④ 入力したプログラムを実行します。
「sudo python rpi_bp_gpio_led1a_1.py」を実行します。

* LEDが1秒間隔で10回点滅します。その後に、「led1a done」のメッセージが出ます。
* Lチカをすることを確かめて下さい。
raspi_code_3.3_7

⑤ 電源をきります。
「sudo shutdown -h now」を入力して下さい。
*ステータスLEDの点滅が終わり、消えてからマイクロUSBのDC5Vを抜いて下さい。

raspi_code_3.3_5

3.4 Raspberry Pi B+ スイッチでLEDをON/OFF

3.4 Lチカを部品にしよう

(1) Lチカを部品(関数)にします。部品は初期化、LEDのオン、LEDのオフの3種類です。
LEDの初期化、LEDのオン、LEDのオフを部品(関数)にします。
*Pythonの新しい命令を使います。
*def
*書き方
def 関数名():
インデント命令
インデント命令
インデントスペース

① 「nano」エディター立ち上げます。
「nano rpi_bp_gpio_led1b_1.py」コマンドを実行して下さい。画面が「nano」エディターの画面に変わります。

② プログラムを変更します。
サンプルの様にプログラムを変更します。 -初期化の関数「def led1_init(): ~」を追加します。
-LED1をオンする関数「def led1_on(): ~」を追加します。

サンプルプログラミング1

 #! /usr/bin/env python

import RPi.GPIO as GPIO
import time

def led1_init():
GPIO.setup(LED1, GPIO.OUT) # set GPIO5 output

def led1_on():
GPIO.output(LED1, GPIO.HIGH) # LED1 ON

def led1_off():
GPIO.output(LED1, GPIO.LOW) # LED1 OFF

# start

GPIO.setmode(GPIO.BCM) # use GPIO Number

LED1 = 5 # LED1 –> GPIO5
led1_init()

for i in range(10): # repeat 10 times
print(i)
led1_on()
time.sleep(0.5)

led1_off()
time.sleep(0.5)

GPIO.cleanup()

 

 

 

 

③ 入力を終わります。
「ctrl+X」を実行します。次に、「y/n」は「enter」を入れます。

④ 入力したプログラムを実行します。
「sudo python rpi_bp_gpio_led1b_1.py」を実行します。
*LEDが1秒間隔で10回点滅します。その後に、「led1b done」のメッセージが出ます。

raspi_code_3.4_1

⑤ 電源をきります。

「sudo shutdown -h now」を入力して下さい。
*ステータスLEDの点滅が終わり、消えてからマイクロUSBのDC5Vを抜いて下さい。

raspi_code_3.4_2

(2) LEDを増やそう

作ったLチカを部品(関数)を増やします。部品(関数)にすると、コピーペーストして、少し直すだけで新しい部品(関数)が簡単に出来ます。

①組立
下の配線図、回路図をみて、回路を組立て下さい。

raspi_3.4_1 raspi_3.4_2

② 「nano」エディター立ち上げます。

「nano rpi_bp_gpio_led2_1.py」コマンドを実行して下さい。
画面が「nano」エディターの画面に変わります。

③ プログラムを変更します。

サンプルの様にプログラムを変更します。

-初期化の関数「def led2_init(): ~」を追加します。
-LED1をオンする関数「def led2_on(): ~」を追加します。
-LED1をオフする関数「def led2_off(): ~」を追加します。

サンプルプログラミング2

 #! /usr/bin/env python

import RPi.GPIO as GPIO
import time

def led1_init():
GPIO.setup(LED1, GPIO.OUT) # set GPIO5 output

def led1_on():
GPIO.output(LED1, GPIO.HIGH) # LED1 ON

def led1_off():
GPIO.output(LED1, GPIO.LOW) # LED1 OFF

def led2_init():
GPIO.setup(LED2, GPIO.OUT) # set GPIO6 output

def led2_on():
GPIO.output(LED2, GPIO.HIGH) # LED2 ON

def led2_off():
GPIO.output(LED2, GPIO.LOW) # LED2 OFF

#start
GPIO.setmode(GPIO.BCM) # use GPIO Number

LED1 = 5 # LED1 –> GPIO5
led1_init()

LED2 = 6 # LED1 –> GPIO6
led2_init()

for i in range(10):
print(i)
led1_on()
led2_on()
time.sleep(0.5)

led1_off()
led2_off()
time.sleep(0.5)

 

 

 

 

④ 入力を終わります。

「ctrl+X」を実行します。次に、「y/n」は「enter」を入れます。

⑤ 入力したプログラムを実行します。

「sudo python rpi_bp_gpio_led2_1.py」を実行します。
*LED1とLED2が1秒間隔で10回点滅します。その後に、「led2 done」のメッセージが出ます。

raspi_code_3.4_3

⑥ 電源をきります。

「sudo shutdown -h now」を入力して下さい。
*ステータスLEDの点滅が終わり、消えてからマイクロUSBのDC5Vを抜いて下さい。

raspi_code_3.4_4

(3) 同じ形の関数をまとめよう

LED1とLED2の部品(関数)はGPIO番号だけが違っています。違っているGPIO番号を引数(ひきすう)で渡すと、初期化、LEDのオン、LEDのオフの部品(関数)をまとめることできます。

LEDを増やしても、作る関数は増えません。

*Pythonの新しい命令を使います。
*def

*書き方

def 関数名(引数):
インデント命令
インデント命令
インデントスペース

① 「nano」エディター立ち上げます。
「nano rpi_bp_gpio_led2a_1.py」コマンドを実行して下さい。画面が「nano」エディターの画面に変わります。

② プログラムを変更します。

サンプルの様にプログラムを変更します。
-初期化の関数「def led_init(leds): ~に変えます。
-LED1をオンする関数「def led_on(leds): ~」に変えます。 -LED1をオフする関数「def led_off(leds): ~」に変えます。
-LED2の関数は全て削除します。

*関数を定義する部分がまとまって、「(2)LEDを増やそう」のサンプルプログラムに比べて、かなりすっきりしました。

サンプルプログラミング3

 #! /usr/bin/env python

import RPi.GPIO as GPIO
import time

def led_init(leds):
GPIO.setup(leds, GPIO.OUT) # set GPIO leds output

def led_on(leds):
GPIO.output(leds, GPIO.HIGH) # leds ON

def led_off(leds):
GPIO.output(leds, GPIO.LOW) # leds OFF

#start
GPIO.setmode(GPIO.BCM) # use GPIO Number

LED1 = 5 # LED1 –> GPIO5
led_init(LED1)

LED2 = 6 # LED1 –> GPIO6
led_init(LED2)

for i in range(10):
print(i)
led_on(LED1)
led_on(LED2)
time.sleep(0.5)

led_off(LED1)
led_off(LED2)
time.sleep(0.5)

GPIO.cleanup()

 

 

 

③ 入力を終わります。
「ctrl+X」を実行します。次に、「y/n」は「enter」を入れます。

④ 入力したプログラムを実行します。
「sudo python rpi_bp_gpio_led2a_1.py」を実行します。
*LED1とLED2が1秒間隔で10回点滅します。その後に、「led2 a done」のメッセージが出ます。
*実行した結果は前と変わりません。

raspi_code_3.4_5

⑤ 電源をきります。
「sudo shutdown -h now」を入力して下さい。
*ステータスLEDの点滅が終わり、消えてからマイクロUSBのDC5Vを抜いて下さい。

raspi_code_3.4_6

3.5 Lチカをモジュール(部品のセット)にしよう

 3.5 Lチカをモジュール(部品のセット)にしよう
Lチカを部品(関数)にします。部品は初期化、LEDのオン、LEDのオフの3種類です。この部品を他のプログラムで取り込んで使えるようにします。
回路は3.2と同じです。

(1) Lチカノの部品をモジュール(部品のセット)にしよう

作ったモジュールを使ってみよう。自分で作った、モジュールを「import」して使うことで、自分で作った関数(部品)を使って簡単にプログラムを大きくしていけます。
*Pythonの新しい命令を使います。
*import、as
*書き方
import モジュール名as ニックネーム
*取り込んで、部品(関数)を使うときは「ニックネーム.関数」で使います。

① 「nano」エディター立ち上げます。
「nano rpi_bp_gpio_led1c_1.py」コマンドを実行して下さい。画面が「nano」エディターの画面に変わります。

② プログラムを変更します。
サンプルの様にプログラムを変更します。

サンプルプログラム1

 #! /usr/bin/env python

import RPi.GPIO as GPIO
import time

def led_init(leds):
GPIO.setup(leds, GPIO.OUT) # set GPIO leds output

def led_on(leds):
GPIO.output(leds, GPIO.HIGH) # leds ON

def led_off(leds):
GPIO.output(leds, GPIO.LOW) # leds OFF

if __name__ ==(“__main__”):
#start

GPIO.setmode(GPIO.BCM) # use GPIO Number

LED1 = 5 # LED1 –> GPIO5
led_init(LED1)

LED2 = 6 # LED1 –> GPIO6
led_init(LED2)

for i in range(10):
print(i)
led_on(LED1)
led_on(LED2)
time.sleep(0.5)

led_off(LED1)
led_off(LED2)
time.sleep(0.5)

GPIO.cleanup()
print(“led2b done”)

 

 

 

 

③ 入力を終わります。
「ctrl+X」を実行します。次に、「y/n」は「enter」を入れます。

④ 入力したプログラムを実行します。
「sudo python rpi_bp_gpio_led1b_1.py」を実行します。
*LEDが1秒間隔で10回点滅します。その後に、「led1b done」のメッセージが出ます。

raspi_code_3.5_1

⑤ 電源をきります。
「sudo shutdown -h now」を入力して下さい。
*ステータスLEDの点滅が終わり、消えてからマイクロUSBのDC5Vを抜いて下さい。

raspi_code_3.5_2

(2) モジュールを使おう
作ったモジュールを使ってみよう。自分で作った、モジュールを「import」して使うことで、自分で作った関数(部品)を使って簡単にプログラムを大きくしていけます。

*Pythonの新しい命令を使います。
*import、as
*書き方
import モジュール名as ニックネーム
*取り込んで、部品(関数)を使うときは「ニックネーム.関数」で使います。

① 「nano」エディター立ち上げます。
「nano rpi_bp_gpio_led2c_1.py」コマンドを実行して下さい。画面が「nano」エディターの画面に変わります。

② プログラムを変更します。
サンプルの様にプログラムを変更します。
-「import time」の後に「import rpi_bp_gpio_led2c_1.pyas ctrl」を追加します。
-全部の関数定義「def」を削除します。

サンプルプログラム2

 #! /usr/bin/env python

import RPi.GPIO as GPIO
import time

import rpi_bp_gpio_led2b_1 as ctrl

if __name__ ==(“__main__”):
#start

GPIO.setmode(GPIO.BCM) # use GPIO Number

LED1 = 5 # LED1 –> GPIO5
ctrl.led_init(LED1)

LED2 = 6 # LED1 –> GPIO6
ctrl.led_init(LED2)

for i in range(10):
print(i)
ctrl.led_on(LED1)
ctrl.led_on(LED2)
time.sleep(0.5)

ctrl.led_off(LED1)
ctrl.led_off(LED2)
time.sleep(0.5)

GPIO.cleanup()

 

 

 

③ 入力を終わります。
「ctrl+X」を実行します。次に、「y/n」は「enter」を入れます。

④ 入力したプログラムを実行します。
「sudo python rpi_bp_gpio_led1c_1.py」を実行します。
*LEDが1秒間隔で10回点滅します。その後に、「led1b done」のメッセージが出ます。

raspi_code_3.5_3

⑤ 電源をきります。
「sudo shutdown -h now」を入力して下さい。
*ステータスLEDの点滅が終わり、消えてからマイクロUSBのDC5Vを抜いて下さい。

raspi_code_3.5_4

(3) 同じ部品名(関数名)でモジュールを使おう
作ったモジュールを使ってみよう。自分で作った、モジュールを「import」して使うことで、自分で作った関数(部品)をそのまま使えるようにします。
*Pythonの新しい命令を使います。

*from
*書き方
from モジュール名import *

① 「nano」エディター立ち上げます。
「nano rpi_bp_gpio_led2d_1.py」コマンドを実行して下さい。画面が「nano」エディターの画面に変わります。

② プログラムを変更します。
サンプルの様にプログラムを変更します。
-「import rpi_bp_gpio_led2c_1.pyas ctrl」を「from rpi_bp_gpio_led2c_1.pyimport *」に変更します。
-使用する関数の「ctrl.」をとります。

サンプルプログラム3

 #! /usr/bin/env python

import RPi.GPIO as GPIO
import time

from rpi_bp_gpio_led2b_1 import *

if __name__ ==(“__main__”):
#start

GPIO.setmode(GPIO.BCM) # use GPIO Number

LED1 = 5 # LED1 –> GPIO5
led_init(LED1)

LED2 = 6 # LED1 –> GPIO6
led_init(LED2)

for i in range(10):
print(i)
led_on(LED1)
led_on(LED2)
time.sleep(0.5)

led_off(LED1)
led_off(LED2)
time.sleep(0.5)

GPIO.cleanup()
print(“led2d done”)

 

 

 

 

③ 入力を終わります。
「ctrl+X」を実行します。次に、「y/n」は「enter」を入れます。

④ 入力したプログラムを実行します。
「sudo python rpi_bp_gpio_led1d_1.py」を実行します。
*LEDが1秒間隔で10回点滅します。その後に、「led1d done」のメッセージが出ます。

raspi_code_3.5_5

⑤ 電源をきります。
「sudo shutdown -h now」を入力して下さい。
*ステータスLEDの点滅が終わり、消えてからマイクロUSBのDC5Vを抜いて下さい。

raspi_code_3.5_6