rcmdnk's blog

20190825_raspberrypi_200_200

Raspberry Piで遊び始めましたが、これまでのところはBluetoothやWi-Fiを使っただけで 普通のPCでも出来ることだけでした。

ということで、とりあえず基本のLチカ(LEDチカチカ)をやってみました。

Sponsored Links

用意するもの

適当なRaspberry Piを用意して初期設定します。

今回必要なものは秋月電子で買うなら以下のもの:

抵抗は実際には別の用途に買った4.7kΩのものを使ってますが、下に書くように1kΩ位の方がちょうどよいです。

これ以外にRaspberry Pi用のmicroSDがなければ必要。

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ピンをジャンパーワイヤでつないではんだ付けとかなしで作っています。

20190825_raspberrypi.jpg

Raspberry Piの40本出ているGPIピンは写真の左下から1番から40番までの物理番号が付いていますが、 これとは別に電圧を制御できるピンにはBCM番号(GPIO番号)というものがついています。

以下のページなどを参照。

Raspberry Pi GPIO Pinout

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”にする必要があります。

[email protected]:~ $ gpio -g mode 14 out

-gはピン番号の代わりにBCM(GPIO)番号を使うためのオプションです。

あとはwriteサブコマンドを使って状態をOn/Off (1/0)するだけ

[email protected]:~ $ gpio -g write 14 1

これでLEDが光ります。

[email protected]:~ $ gpio -g write 14 0

これで消えます。

以下の場合も同様ですが、コマンドを送ってみて光らない場合、 上記gpio readallを使ってピン番号8(BCM(GPIO)番号14)が ModeOUTVが1になっているかどうか確認してみてください。

ここが正しく変更されているのであれば回路に問題があります。

Pythonで光らせる

GPIOのライブラリをインストール。

[email protected]:~ sudo pip3 install rpi.gpio

光らせるスクリプト:

led.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/env python3

import time
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
GPIO.setup(14, GPIO.OUT)

try:
    for i in range(10):
        GPIO.output(14, GPIO.HIGH)
        time.sleep(1)
        GPIO.output(14, GPIO.LOW)
        time.sleep(1)
except KeyboardInterrupt as k:
    pass
except Exception as e:
    print(e)

GPIO.cleanup()

10回光らせて消すだけのスクリプトです。

最後のcleanupがないと2回目以降に

[email protected]:~ $ 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サーバーを走らせておけば良いだけです。

スマホのアプリ側で以下の様なボタンを作ります。

20190825_blynk.jpg

OUTPUをGPIOの14番、MODEはSWITCH

これでRaspberry PiについたLEDのスイッチをON/OFF出来る様になります。

まとめ

Sponsored Links
Sponsored Links

« FreeBSDでmosh-serverが立ち上がらなくなった件 Raspberry Piで温度湿度気圧を測ってスマホで見る »