次回以降の開催の予定(タップ or クリックすると開くよ)

次回以降の開催予定のCoderDojo岐阜は以下の日程で参加申込と開催を行う予定です。

参加申し込みの前に必ず参加の際のルールなどをご確認ください。

参加申し込み開始2024年5月18日(土)9時〜 (開催日より1週間前日)
開催日時・場所2024年5月25日(土)
時間:9時30分〜11時30分
場所:みんなの森 ぎふメディアコスモス かんがえるスタジオ

[Arduino]ESP32マイコンでプログラミング 第2回

  • -
    コピー

今回やること(Lチカ)

今回はESP32にLEDを接続して点滅させることを行います。プログラミングだけでなく、簡単な電気回路の説明もしていきます。自分のアイディアを実現させるためには、電気回路の知識も持っておくと幅が広がります。

必要なもの

ESP32マイコンボード以外に必要な部品を説明します。

ブレッドボード

ブレッドボードは穴に部品のリードやジャンバー線を挿入するだけで電気回路を試作できる便利な道具です。

(B)の写真のように電源ラインの穴は+-がそれぞれ横一直線で電気的につながっています。それ以外の穴は縦に5個ずつ(A~E、F~J)電気的につながっています。つながっている穴に部品のリードやジャンパー線を挿入することで、それらを接続することができます。

Amazonなどで「ブレッドボード」で検索すれば、たくさん出てきますので、お好みのサイズのものを購入してください。

ただし、ものによっては接触不良を起こしやすいものや劣化の早いものもありますから、カスタマレビューを見て評価の低いものは避けるようにしてください。

国内メーカは「サンハヤト」が有名です。Amazonブレッドボードだけではなく、後述する電子部品もセットになったキットもありますので、そちらを選んでも良いでしょう。

ブレッドボードはブロック状になっており、プラレールのように接続して大きくすることができます。

1ブロックだけでも使用することはできますが、(A)の写真のようにESP32マイコンボードを挿入すると、穴のグループとのピッチの相性が良くなくて、ESP32の左側の信号ラインは1列しか穴が使えません。また、右側は1列も使うことができず信号ラインに外部回路を接続することができません。

2ブロック以上のものを使用して、ESP32が電源ラインをまたぐように挿入すると、(B)の写真ように左側は3列・右側は2列の穴が使えて実用的になります。

電子部品

ESP32マイコンとブレッドボードを使って電子回路実験をするために使用する電子部品の一例です。「ジャンパー線」はブレッドボードの穴に挿入して電気回路を構成するためのものです。

光らすための「LED」音を出すため「ブザー」マイコンに信号を与えるための「スイッチ」そして電流を制限するための「抵抗器」などが最低限必要でしょう。

私が学生の頃は岐阜にもパーツショップがあったのですが無くなってしまいました。今リアル店舗でパーツを入手しようとすると名古屋の大須アメ横ビルまで出かける必要があります。

電子パーツを個々に買い揃えるのは大変ですので、電子工作に必要ないろいろなパーツがセットになったキットを購入するのが便利です。

Amazonで「電子工作 キット」と検索するといろいろなものがヒットしますので、希望に合ったものを購入すると良いでしょう。

写真は私が持っているキットで、LCDディスプレイやドットマトリクスLEDなどいろいろな部品がセットになっています。このきっとはESP32用ではなく、RaspberryPiというマイコンボードを対象にしたキットです。

RaspberryPiの端子をブレッドボードに挿入するボードなどの専用部品以外の部品はESP32の電子工作にもそのまま使用できます。

電子工作キットで「スタータキット」ではESP32マイコンもセットになったものがあります。ただし、この記事で使用しているのは[ESP32-WROOM-32D]という型番です。

スタータキットに入っているマイコンボードは[ESP32-WROVER]などの型式の異なるものが入っている場合があります。(ESP32-WROVERはESP32-WROOM-32Dより古い初期の製品)ESP-WROOM-32系のマイコンボードであれば同じように使えると思われますが、上手くいかなかったときにGoogleで調べたりして自己解決できる能力が必要になります。

ESP32マイコンはESP32-WROOM-32D純正品を購入して、マイコンは含まない電子パーツだけのキットを購入したほうが無難でしょう。

LEDの使い方

LEDには極性があります。プラス側を「アノード」、マイナス側を「カソード」と呼びます。

リード線のどちらがアノード/カソードかはリード線の長さでわかるようになってます。

長いリード線がアノードです。リード線を切ってしまって長さで判断が付かない場合は、LEDの内部を見て▽状の大きな形となっている側がほとんどの場合カソードです。(テスタを使って調べるのが確実ですが)記号では「アノード」は、「カソード」はで表記します。これは英語ではなくドイツ語のAnode、Kathodeに由来しています。

さて、豆電球の場合は(最近のニンジャは豆電球なんて見たことないのかな?)電源(図では電池)に直接接続すれば点灯しました。LEDの場合は電源に直接接続すると電流が流れ過ぎて壊れてしまいます。

また、極性(アノード・カソード)を間違えて逆方向に一定以上の電圧が加わっても壊れてしまいます。一般的なLEDでは逆方向の耐電圧は3~5V程度です。ですので、マイコンを使った電子工作の電源電圧は3.3Vまたは5Vがほとんどですので、間違えて逆方向に接続しても壊れることはまずないでしょう。

LEDを点灯させるときには、必ず電流値を制限する抵抗器を直列に接続します。(アノード側、カソード側どちらでも良いです。)(A)は実体図で描いたもので、(B)はそれを回路図で書いたものです。

LEDが点灯する適切な電流値となるように抵抗器の抵抗値を決める必要があります。LEDを点灯させるのに適切な電流値はLEDのスペックにより異なっていますが(LEDのデータシートに記載されています。)一般的なLEDで1~20mA程度です。最近のLEDは高輝度ですので1mAでも十分に光ります。

この図が電流制限抵抗値の求め方です。LEDには「順方向電圧」という規格があり、これより高い電圧が印加されないと光りません。また、電流が変化してもLED両端の電圧はこの「順方向電圧」のほぼ一定になります。

LEDと抵抗器は直列に接続されていますので、LEDに流れる電流も抵抗器に流れる電流も同じです。LEDの両端の電圧と抵抗器の両端の電圧を足したものが電源電圧と等しくなります。

ですので抵抗器の両端電圧は電源電圧からLEDの両端の電圧(=順方向電圧)を差し引いたものになります。電流と電圧はオームの法則 V=I×R(R=V÷I)の関係があります。(オームの法則は中学2年で習います。)上図の四角枠内の式が抵抗値を計算するための式になります。電源電圧が3VのときでLEDに5mAの電流を流したいときには240Ωとなります。

5mA = 0.005Aになります。m(ミリ)は1000分の1ですから、長さの5mmが0.005mに換算されるのと同じ関係です。もっと詳しく知りたい方はGoogleで「LED 使い方」で検索してみてください。

抵抗器の抵抗値の見かた

リード線型抵抗器には○○Ωと数値が直接書かれているものではなく、カラーコードという色で表されています。(チップ抵抗など数字で記入されてるものもあります。)カラーコードには線5本タイプと線4本タイプがあり、昔は精度が良くなく線4本タイプが一般的でしたが、最近は線5本タイプが一般的になっています。

各色が0~9までの数字に対応しています。このカラーコードは語呂合わせの覚え方もありますが、基本は10色だけですので「黒茶赤橙黄緑青紫灰白」と覚えてしまった方が早いです。

ここでは線5本タイプで説明します。抵抗器に印刷されている5本の帯は、両端の帯で一番端に近い側が1つ目の数字(第1数字)となります。

第1数字から第3数字で3桁の数値を表します。赤(2)・橙(3)・紫(7)で237となります。これに4番目の帯の色がゼロの数(数学で難しく言うと10の乗数)を示していますので、茶(1)でゼロが1個となり、2370Ωとなります。第1数字から第3数字までで3桁の数字となりますから、100Ωより小さい数字を表す手段として0.1倍(金)や0.01倍(銀)があり、例えば乗数部分の帯が金色の場合は##.#Ωと小数1桁までの抵抗値を表すことができます。

抵抗器は例えば1Ω単位で全部の抵抗値が揃っているわけではありません。そんなことしたら、すごい数の種類になってしまいます。ですので抵抗器は飛び飛びの値の抵抗値のものが用意されてます。

この飛び飛びの値は「E系列」と言って国際規格で定められており、電気回路を設計するうえで不自由が無いように決められています。

LEDを点滅させよう

LED点滅させるのに必要な電子回路の知識を得たところで、いよいよESP32マイコンを使ってLEDを点滅させてみましょう。

LEDを点滅させるプログラムです。今回は「IO12」端子にLEDを接続します。(「IO12」はESP32マイコンボードの基板の端子部分に印刷されてる記号です。)

⓵で「12」という数字に名前を付けます。これはプログラムを作るときに「12」という数字では何を意味するか解りません。そこで数字に名前(このプログラムではLED_RED)という名前を付けて意味のあるものにします。

また、LEDの接続端子をIO12からIO14に変更することが必要になった場合、プログラムに直接数字を書き込んでいた場合は、プログラム全部の12が使用されている部分を探して14に置き換える必要があります。

このように名前を付けておけば、名前を付けている部分を14に変更するだけで良く簡単にできます。また、直し忘れが無くなり、いわゆるバグの発生も押させることができます。このように数字などに名前を付けることを「マクロ定義」と言います。

初期化部分に②があります。これはIO12端子を出力ポート(デジタル信号を出力するための端子)として使いますよ、という指示をしています。ここで①で定義したLED_REDが使われています。これを直接12と書いていたらわかり難いでしょう。

次にプログラム本体です。③は出力ポート(IO12端子)を[HIGH]状態にしなさい、という命令です。

0.5秒(=500ミリ秒)待って、今度は④で出力ポート(IO12端子)を[LOW]状態にしなさい、と命令しています。その後再度0.5秒待っています。これをloop()でぐるぐる繰り返しますので、出力ポートが0.5秒ごとに[HIGH]に[LOW]への切り換えを繰り返すプログラムになります。ESP32マイコンボードは出力ポートは[HIGH]のときには電源電圧の3.3V、[LOW]のときには0Vになります。

マイコンボードへはUSBケーブルから5Vが供給されていますが、CPU(マイコンの頭脳)は3.3Vで動作するために、ボード上の回路で5Vから3.3Vに変換されています。

ブレッドボード上にESP32マイコンボードでLEDを点滅させる回路を作成します。

ESP32マイコンボードの一番右側にある[3V3]端子から電源のプラスを、[GND]端子から電源のマイナスを取り出します。(GND端子は複数ありますが、どのGND端子を使っても良いです。)

取り出した電源はブレッドボードの電源ラインに接続します。
(ブレッドボードの電源ラインを使わなくても回路は構成できますが、電源ラインを使った方がブレッドボード上での回路がわかり易くなります。)

マイコンボードの一番左側の端子は5Vの電源が出力されていますが、ESP32マイコンは3.3Vで動作していますので、3.3Vを電源ラインのプラスに使用してください。5VはESP32の入出力端子への印加可能電圧を超えます。(電流が小さいので5Vを使用してもすぐには壊れないと思いますが回避したほうが無難です。)

LEDのアノード(+)をプログラムで出力ポートで指定した[IO12]端子へ接続します。LEDのカソード(-)は抵抗器を介して電源の0V(GND)ラインに接続します。

プログラムを書きこんで実行させると、赤色LEDが0.5秒ごとに点滅をすることが確認できます。

この回路構成の場合、IO12端子が[HIGH](=3.3V)となるとLEDのアノードからカソードへ電流が流れてLEDが点灯します。[LOW](=0V)になるとLEDは消灯します。

このように操作対象の部品(今回はLED)のプラス側(LEDではアノード)を出力ポートに接続して、マイナス側(LEDではカソード)を電源のマイナス(GND)に接続する使い方を「マイナスコモン接続」と呼びます。

エンジニアでない一般の人にはこちらの接続の方がイメージしやすいかもしれません。

接続回路を変えてテストしてみましょう。今度はLEDのカソード(-)をプログラムで出力ポートで指定した[IO12]端子へ接続します。LEDのアノード(+)は抵抗器を介して電源の+3.3Vラインに接続します。

この回路構成の場合、IO12端子が[HIGH](=3.3V)のときには、LEDのリードにはアノード(+)・カソード(-)ともに3.3Vが加えられるので同じ電圧となりLED点灯しません。

IO12端子が[LOW](=0V)になるとLEDに緑矢印に示すように電流が流れてLEDが点灯します。部品(今回はLED)のマイナス側(LEDではカソード)を出力ポートに接続して、プラス側(LEDではアノード)を電源のプラス側に接続する使い方を「プラスコモン接続」と呼びます。

前の赤色LEDの回路ではIO12端子が[HIGH]のときに点灯し、この緑色LEDの回路ではIO12端子が[LOW]のときに点灯するという逆のふるまいになります。

赤色LEDのときの回路(マイナスコモン接続)を適用するか、緑色LEDのときの回路(プラスコモン接続)を適用するかは、使っているマイコンボードのIO端子のスペックにより決まります。

ここで使用しているESP32マイコンボードのIO端子は、[HIGH]となって端子から電流が出ていく方向に流れるときに流すことができる最大電流と、[LOW]となって端子に電流を取り込む方向に流れるときに流すことができる最大電流はどちらも同じ程度(出ていく方向20mA/取り込む方向28mA)となっています。

マイコンボードによっては出ていく方向に流せる電流は小さく、取り込む方向のみ大きな電流が流せるスペックのものもあります。その場合には、緑色LEDの回路(プラスコモン接続)でしか使用できないことになります。

では、今回の実験の最後です。この図のように赤色LEDのときの回路と緑色LEDのときの回路を接続したらどうなるでしょうか?

答えは・・・・次の動画で

赤色LEDと緑色LEDが交互に点滅します。なぜそのようになるかは自分で考えてみましょう。

では、また次の回をお楽しみに!

  • -
    コピー

この記事を書いた人

アバター

かとう あきのり

半導体製造・検査装置メーカでエンジニアしています。制御ソフトウェア作成がメインですがハード設計もやります。休日はDIYか庭のバラの手入れをしています。