Raspberry Piで遊び始めましたが、これまでのところはBluetoothやWi-Fiを使っただけで 普通のPCでも出来ることだけでした。
ということで、とりあえず基本のLチカ(LEDチカチカ)をやってみました。
用意するもの
適当なRaspberry Piを用意して初期設定します。
今回必要なものは秋月電子で買うなら以下のもの:
- Raspberry Pi Zero WH: 2160円
- ミニブレッドボード BB-601(スケルトン): パーツ一般 秋月電子通商-電子部品・ネット通販: 170円
- ブレッドボード・ジャンパーワイヤ(オス-メス) 15cm(黒) (10本入): パーツ一般 秋月電子通商-電子部品・ネット通販: 220円
- 高輝度5mm赤色LED 7cd60度 (10個入): LED(発光ダイオード) 秋月電子通商-電子部品・ネット通販: 150円
- カーボン抵抗(炭素皮膜抵抗) 1/2W 1kΩ (100本入): パーツ一般 秋月電子通商-電子部品・ネット通販: 100円
抵抗は実際には別の用途に買った4.7kΩのものを使ってますが、下に書くように1kΩ位の方がちょうどよいです。
これ以外にRaspberry Pi用のmicroSDがなければ必要。
- TOSHIBA マイクロSDカード(microSDHC)EXCERIA 16GB 100MB/s: 雑貨 秋月電子通商-電子部品・ネット通販: 780円
Raspberry Pi Zeroはスマホに使うようなmicro USB用の充電器でも使えますが、 ACアダプターも買っておくと安心です。
LED用抵抗
今回のLEDはIF 20mA、VF 2.1Vとなっています。これと適当な抵抗を合わせて ちょうどよい電流を流すようにします。
Raspberry PiのGPIOピンは3.3Vの電圧になるので3.3V-2.1V=1.2V位が抵抗にかかるとして1.2V/20mA=60Ω、となります。
ということで60Ω以上の抵抗であれば流れる電流が20mA以下となってLEDは安全に使えるはずです。
ただ、Raspberry PiのGPIOピンの出力電流は16mAまで、ということなのですが 1、 Raspberry Pi Cookbook 2 によると、3mA以上の電流を流すとRaspberry Piの寿命を縮めてしまう可能性があるということなので、 1.2V/3mA=400Ωは必要。
ということで適当に500~1kΩとかの抵抗にしておけば大丈夫です。
今回は別の用途で買ったものがあったので4.7kΩとなってますが、あまり大きくすると 暗くなってしまうのでLEDをメインに使う場合には適当に抵抗を変えてください。
回路
簡単にブレッドボードとGPIOピンをジャンパーワイヤでつないではんだ付けとかなしで作っています。
Raspberry Piの40本出ているGPIピンは写真の左下から1番から40番までの物理番号が付いていますが、 これとは別に電圧を制御できるピンにはBCM番号(GPIO番号)というものがついています。
以下のページなどを参照。
1番は3.3V, 2番が5Vの定電圧、6番がグラウンドで8番目がBCM(GPIO)14番になっています。
ターミナルからコマンドで
$ gpio readall
+-----+-----+---------+------+---+-Pi ZeroW-+---+------+---------+-----+-----+
| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| | | 3.3v | | | 1 || 2 | | | 5v | | |
| 2 | 8 | SDA.1 | ALT0 | 1 | 3 || 4 | | | 5v | | |
| 3 | 9 | SCL.1 | ALT0 | 1 | 5 || 6 | | | 0v | | |
| 4 | 7 | GPIO. 7 | IN | 1 | 7 || 8 | 0 | IN | TxD | 15 | 14 |
| | | 0v | | | 9 || 10 | 1 | IN | RxD | 16 | 15 |
| 17 | 0 | GPIO. 0 | IN | 0 | 11 || 12 | 0 | IN | GPIO. 1 | 1 | 18 |
| 27 | 2 | GPIO. 2 | IN | 0 | 13 || 14 | | | 0v | | |
| 22 | 3 | GPIO. 3 | IN | 0 | 15 || 16 | 0 | IN | GPIO. 4 | 4 | 23 |
| | | 3.3v | | | 17 || 18 | 0 | IN | GPIO. 5 | 5 | 24 |
| 10 | 12 | MOSI | IN | 0 | 19 || 20 | | | 0v | | |
| 9 | 13 | MISO | IN | 0 | 21 || 22 | 0 | IN | GPIO. 6 | 6 | 25 |
| 11 | 14 | SCLK | IN | 0 | 23 || 24 | 1 | IN | CE0 | 10 | 8 |
| | | 0v | | | 25 || 26 | 1 | IN | CE1 | 11 | 7 |
| 0 | 30 | SDA.0 | IN | 1 | 27 || 28 | 1 | IN | SCL.0 | 31 | 1 |
| 5 | 21 | GPIO.21 | IN | 1 | 29 || 30 | | | 0v | | |
| 6 | 22 | GPIO.22 | IN | 1 | 31 || 32 | 0 | IN | GPIO.26 | 26 | 12 |
| 13 | 23 | GPIO.23 | IN | 0 | 33 || 34 | | | 0v | | |
| 19 | 24 | GPIO.24 | IN | 0 | 35 || 36 | 0 | IN | GPIO.27 | 27 | 16 |
| 26 | 25 | GPIO.25 | IN | 0 | 37 || 38 | 0 | IN | GPIO.28 | 28 | 20 |
| | | 0v | | | 39 || 40 | 0 | IN | GPIO.29 | 29 | 21 |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |
+-----+-----+---------+------+---+-Pi ZeroW-+---+------+---------+-----+-----+
と言った感じで確認することも出来ます。
ブレッドボードでは写真で赤く囲ったところのように半分の一列が全部つながった状態です。 ここの列の別の箇所に挿せば回路的につながることになります。
LEDは見ると足が長い方(アノード)と短い方(カソード)があるので長い方を電圧の高い方にします。
上の写真では6番からまず抵抗に入り、抵抗とLEDのアノードをつなげ、 カソード側はRaspberry Piのグラウンドにつながっています。
このテストを行う前に、6番に挿さっているジャンパーを 1番の3.3Vの定電圧につけておいてちゃんと光るかテストすると良いと思います。
6番ピンは最初は電圧が0なのでこの回路を作っただけでは光りません。
Lチカ
上の写真の様にGPIO番号14を使ってます。
コマンドで光らせる
gpio
コマンドで簡単に光らせることができます。
最初にモードを”OUT”にする必要があります。
pi@raspberrypi:~ $ gpio -g mode 14 out
-g
はピン番号の代わりにBCM(GPIO)番号を使うためのオプションです。
あとはwrite
サブコマンドを使って状態をOn/Off (1/0)するだけ
pi@raspberrypi:~ $ gpio -g write 14 1
これでLEDが光ります。
pi@raspberrypi:~ $ gpio -g write 14 0
これで消えます。
以下の場合も同様ですが、コマンドを送ってみて光らない場合、
上記gpio readall
を使ってピン番号8(BCM(GPIO)番号14)が
Mode
がOUT
でV
が1になっているかどうか確認してみてください。
ここが正しく変更されているのであれば回路に問題があります。
Pythonで光らせる
GPIOのライブラリをインストール。
pi@raspberrypi:~ sudo pip3 install rpi.gpio
光らせるスクリプト:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
10回光らせて消すだけのスクリプトです。
最後のcleanup
がないと2回目以降に
pi@raspberrypi:~ $ python3 ./led.py
./led.py:6: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnigs(False) to disable warnings.
GPIO.setup(14, GPIO.OUT)
といったwarningが出てしまうので忘れずに例外時にもしっかり実行される様に。 (これが出ても動作はします。)
Blynkを使ってスマホからLチカ
Blynkを使うと簡単にスマホからRaspberry Piを操作することが出来ます。
詳細は上を参照ということにして、Raspberry Pi側としてはmain.cppに何も変更が必要ないのでblynk
サーバーを走らせておけば良いだけです。
スマホのアプリ側で以下の様なボタンを作ります。
OUTPUをGPIOの14番、MODEはSWITCH。
これでRaspberry PiについたLEDのスイッチをON/OFF出来る様になります。