ラズパイ(Zero W)でLチカする

2019/05/19

python プログラミング ラズパイ

電子工作の"Hello world"的存在、Lチカをラズパイでやったのでまとめました。

まずGPIOピンを取り付ける。

自分が購入したのは「Raspberry Pi Zero W」なので、GPIOピンヘッダを別途はんだ付けする必要があります。余談ですが、初めからGPIOピンがはんだ付けされている「Raspberry Pi Zero WH」というものもあります。WHの方が500円ほど高いですが、GPIOを使う予定の人はこちらを購入する方がいいかもしれないですね。

以下実際にはんだ付けした際の写真です。
はんだ付けの際に下記サイトを参考にいたしました。
(参考:Raspberry Pi ZeroのGPIOピンをはんだ付けする(Rev.C))

参考サイトと同様にピンヘッダが浮いてないか確認しながら対角線からはんだ付けします。


画像のようにGPIOピンの反対側に物を挟んであげて浮かしてあげるとはんだ付けしやすいと思います。後は残りのピンをはんだ付けしていくだけです。

参考サイトにも記載があったのですが、黒いプラスチック部分が熱に弱いのであまり長く熱さない方がいいです。

長く熱しすぎせいか下記図のようにピンの長さがバラバラになってしまいました...
長く熱しすぎたのも原因だと思いますが、連続してはんだ付けをしてしまったのも原因かなと反省しています。
(2022/08/27追記)
ピンの長さがばらばらですが、この後取り付けた拡張ボードが問題なく動作しました。
なので、この状態でも問題なさそうです。

GPIOピンの配置を理解する。

次にGPIOのピンの配置を調べます。ピンの配置はRPi Low-level peripheralsに記載があります。

参考サイトより引用

参考サイトより引用(Model A+)



参考サイトに載っていたのはラズパイのModelA+/B+/B2のピンアサインだったので、
ラズパイWも同じかどうか確認します。
コマンドラインからGPIOの状態を見ることが出来るので、見てみます。
gpio readall
でピンアサインなどを確認することが出来ます。
この表の見方ですが、Physicalとなっているのは物理ピン番号です。
先ほどのピンアサインと比較するとGPIOの番号が少しずれていますが、おおよそ一致しています。

VはそのピンがHighかLowかを表示しています。Modeはそのピンを入力として使用するか、出力として使用するかが表示されています。


BCM、wPiはよくわからなかったので、調べてみたら下記のような記述がありました。
Raspberry Pi のボード (SoC) は米国 Broadcom 社によって設計されています。 Raspberry Pi 3 Model B の SoC は Broadcom BCM2837、RPi 2B は Broadcom BCM2836 です。
GPIO の番号は BCM ピン番号で割り当てられており、通常プログラミング時には BCM 番号を使います。
(出典:Raspberry Pi 2/3 B ピン配置 (40ピン))

  • BCM : GPIO番号
  • wPi : Wiring Piというライブラリを使う場合の番号
  • Name : 端子名称
  • Mode : 入力や出力などの設定
  • V : pull up/pull downで1がpull up、0がpull down
  • Physical : 物理的な端子番号
(出典:http://jellyware.jp/kurage/raspi/led_chikachika.html)

制御するライブラリによってピンの番号をBCMかwPiを使い分けるというイメージでしょうか?

手元にある抵抗で大丈夫か確認

書く必要は無いとは思いますが、LEDを光らせるためには抵抗が必要です。
(抵抗が無いとLEDに大電流が流れてしまい、LEDが壊れてしまうためです。)

手元にある抵抗が220 Ωしかないので、それで大丈夫かを確認します。
適当なGPIOピンをオンにしてテスターで測定します。(ONの仕方は後程紹介します。)
GPIOがONになると3.3V程度出力されているみたいです。
なので、LEDに流れる電流は3.3V/220 Ω = 15 mAとなります。

LEDの種類にもよるとは思いますが、15 mA程度なら問題なく光らせることが出来ると思います。

(追記)
今回はたまたま問題無かったですが、GPIOの出力の電流には以下のような制限があるみたいです。

GPIOを出力電圧制御にした場合、このように電流が流れますが、この電流には以下のような制限があります。
・GPIOピン1本あたりの最大電流は16mA
・複数本のGPIOピンを使用する場合、同時に流せる電流の合計は50mAまで
「制限」と書くと、例えばGPIOピンに20mA流れるようなLEDを光らせる回路を接続した場合、GPIOピンから流れる電流は16mAで制限される、という意味に取られるかもしれません。でも実際には、20mA流れるような回路を接続すると20mA流れてしまいます。上の制限とは「この値を超えないように電子回路を設計してください」いう意味になります。

 

では、上の制限を超えて使用するとどうなるのでしょうか。これはプロセッサ(BCM2837)のGPIOピンの制限ですので、いずれプロセッサがダメになってしまいます。 
(参考:Raspberry PiのGPIO概要)

いよいよLチカ

配線図

今回は出力として7番ピン(物理ピン番号)、グランドとして9番ピン(物理ピン番号)を使用します。

他の方がラズパイの配線図を書くのに「fritzing」というものを使っていたので、それで配線図を書いてみます。インストールはこちらから出来ます

初めてこのソフトを使用したのですが、色々出来そうでいいですね。
(まだ使いこなせてないので、これから勉強していきます。)


実際に配線をしたのが下記の図です。
(追記)
ジャンパー線をつなぎ変えるときは以下のことに注意してください
これから作業をしていく上で、ジャンパワイヤを繋ぎかえる時は、必ずメス側のコネクタを先に外すようにしてください。オス側を先に抜いた場合、それが拡張コネクタや他の部品に触れるとRaspberry Piにダメージを与えてしまう可能性があるためです。
(引用:Raspberry Piの電源でLEDを1個光らせてみる)

RPI.GPIO

Lチカの方法として色々な方法があるみたいですが、今回はRPI.GPIOを使用します。
これはラズパイに標準で入っているpythonのGPIOを制御するライブラリです。

今回は下記の記事を参考にしました。
(参考:PythonのRPi.GPIOでRaspberry Piの制御)

Lチカまでの流れとしては、

  1. ピンの配置を物理番号で指定するか、先ほど簡単に説明したBCMで指定するかを選択
  2. 出力ピンを指定
  3. 出力を指定
  4. GPIOを開放
です。
1についてですが、下記のどちらかを記述します。
GPIO.setmode(GPIO.BCM) # BCMで指定する。
GPIO.setmode(GPIO.BOARD) # 物理値で指定する
2についてはどのピンで出力するかを決めます。
GPIO.setup(ピン番号, GPIO.OUT) #出力指定(今回の場合でBCMで指定する場合は4、物理値で指定する場合は7)
3については指定したピンのON/OFFを決めます。
GPIO.output(ピン番号, 1) #出力 ここでは3.3Vにする
GPIO.output(ピン番号, 0) #出力 ここでは0Vにする
最後にGPIOを開放します。
GPIO.cleanup()
この記述が無いと、次回実行するときに「ピンが使用されています」とのエラーが出るみたいです。

ソースコード

実際に動作に使用したコードです。
とりあえず3秒間点灯させて、3秒消灯、再度3秒点灯させる。というコードを書きました。
GPIO.setmode(GPIO.BOARD)#物理値でピンの番号を指定するならこちら
#GPIO.setmode(GPIO.BCM)#BCMでピンの番号を指定するならこちら
channel = 7#今回は物理値で指定するので、7.(BCMの場合は4)
GPIO.setup(channel,GPIO.OUT)

#3秒間点灯して、3秒間消灯、また3秒間点灯させる
GPIO.output(channel,True)
time.sleep(3)
GPIO.output(channel,False)
time.sleep(3)
GPIO.output(channel,True)
time.sleep(3)
GPIO.cleanup()#GPIOの開放

実際の動作

申し訳ないのですが、手振れが酷いです。
とりあえず意図した通りに動作しました。

自己紹介

はじめまして 社会人になってからバイクやプログラミングなどを始めました。 プログラミングや整備の記事を書いていますが、独学なので間違った情報が多いかもしれません。 間違っている情報や改善点がありましたらコメントしていただけると幸いです。

X(旧Twitter)

フォローお願いします!

QooQ