第3章ではラズベリーパイを使ってハードウェアを動かしてみましょう.ハードウェアといっても初めは簡単で,LEDを光らせるだけです.通称『LEDチカチカ』です.これがハードウェア制御の手始め『hello, world』です.(なお,この章で対象とする RaspberryPiは 『Raspberry Pi 3 Model B』です.RaspberryPiの種類によってはピン配置やハード構成に違いがある可能性があります.)
電気的な信号の入出力に必要な端子は表1のように構成されています.HDMI端子を左に,GPIO端子列が右に,USB端子が下になるようにRaspberryPIを置き,上端の左が1番端子,右が2番端子で下に行くにしたがって端子番号が増えていきます.
表1 SRaspberry PiのGPIO端子のピン配置
端子名 | 端子番号 | 端子番号 | 端子名 |
+3.3V | 1 | 2 | +5V |
GPIO2 I2C-SDA | 3 | 4 | +5V |
GPIO3 I2C-SLC | 5 | 6 | GND |
GPIO4 | 7 | 8 | GPIO14 UART TxD |
GND | 9 | 10 | GPIO15 UART RxD |
GPIO17 | 11 | 12 | GPIO18 |
GPIO27 | 13 | 14 | GND |
GPIO22 | 15 | 16 | GPIO23 |
+3.3V | 17 | 18 | GPIO24 |
GPIO10 SPI-MOSI | 19 | 20 | GND |
GPIO9 SPI-MISO | 21 | 22 | GPIO25 |
GPIO11 SPI-SCLK | 23 | 24 | GPIO8 SPI CE0 |
GND | 25 | 26 | GPIO7 SPI-CE1 |
ID_SD EEPROM | 27 | 28 | ID_SC EEPROM |
GPIO5 | 29 | 30 | GND |
GPIO6 | 31 | 32 | GPIO12 |
GPIO13 | 33 | 34 | GND |
GPIO19 | 35 | 36 | GPIO16 |
GPIO26 | 37 | 38 | GPIO20 |
GND | 39 | 40 | GPIO21 |
LEDを光らせましょう.ここでは点滅はさせません.RaspberryPiの+3.3Vを利用してLEDを光らせるだけです.
以上で回路は出来上がり,RaspberryPIに電源端子にUSB 5Vを刺せばLEDが光るはずです.これでRaspberryPiの電源とLEDの確認はOKです.
LEDは光りましたか?R1の100ΩはLEDに流れる電流を制限しています.LEDを使用するときは必ず使用する必要があります.抵抗値はLEDの仕様から計算する必要があります.電源電圧が3.3Vで赤黄緑のLEDなら100Ω程度でしょう.
今度はLEDを点滅(チカチカ)させます.
図2を参照して回路を作成してください.
ソースリスト1にpythonプログラムを示します.エディタから入力して実行してください.
ソースリスト1 LEDを点灯 (led-on.py)
10:#! /user/bin/env python
20:
30:import RPi.GPIO as GPIO
40:#GPIO.cleanup()
50:
60:GPIO.setmode( GPIO.BCM )
70:GPIO.setup( 4, GPIO.OUT )
80:GPIO.output( 4, GPIO.HIGH )
必要なコマンドを以下に示します.
$ nano led-on.py ↵ (または gedit led-on.py)
$ python led-on.py ↵
入力するとき行番号とその隣の「:」は除いて入力してください.
ソースコードを変更して,LEDを消灯してください.<ヒント>GPIO.HIGHをGPIO.LOWに変更して,実行してください.ファイル名をled-on.pyからほかの名前に変更して保存してください.
ソースコード2を入力,実行してLEDを点滅させてください.終了するときはCTRL+Cです.
ソースコード2 LED点滅 (led-on-off.py)
010:#! /user/bin/env python
020:
030:import RPi.GPIO as GPIO
040:import time
050:
060:#GPIO.cleanup()
070:GPIO.setmode( GPIO.BCM )
080:GPIO.setup( 4, GPIO.OUT )
090:
100:while True:
110: GPIO.output( 4, GPIO.HIGH )
120: time.sleep( 1 )
130: GPIO.output( 4, GPIO.LOW )
140: time.sleep( 1 )
ソースコード4を入力,実行してLEDの点滅をON/OFFさせます.タクトスイッチを使った回路をつくりGPIO17と結びます
ソースコード4 LED点滅のON/OFF (led-on-off-sw.py)
010:#! /user/bin/env python
020:
030:import RPi.GPIO as GPIO
040:import time
050:
060:#GPIO.cleanup()
070:
080:GPIO.setmode(GPIO.BCM)
090:GPIO.setup(4,GPIO.OUT)
100:GPIO.setup(17,GPIO.IN)
110:
120:while True:
130: if GPIO.input(17)==GPIO.HIGH:
140: GPIO.output(4,GPIO.HIGH)
150: time.sleep(1)
160: GPIO.output(4, GPIO.LOW )
170: time.sleep(1)
180:
応用問題です.赤,青,黄のLEDと3本の抵抗を使って交通信号を作ってください.
応用問題2です.タクトスイッチを押すと赤→青→黄の変化が速くなる.