はじめに
RaspberryPi Pico2でMicroPythonを使って、シリアルLEDを使う方法を解説します。
単色やフルカラーなどのLEDを使っていて「もっといっぱいLEDを使いたいっ!」と思ったことはないでしょうか?
通常のLEDを使うと、LEDの個数分配線も増えますが、今回は紹介するシリアルLEDなら、3本の配線だけでたくさんのLEDを操作することができます。
複数のLEDを光らせる、光の流れを作る、グラデーションにする、といったことも簡単にできるので、記事を参考にぜひ作ってみてください。
プログラムも簡単になるようにMicroPython組み込みの「NeoPixel」ライブラリを使います。
記事ではRaspberryPi Pico2を使っていますが、Pico、PicoWでも同じ配線・プログラムで動作します。
ぜひお手持ちのPicoシリーズで、試してみてください。
~ この記事の内容 / Contents ~
環境
この記事で使用する環境は以下の通りです。
環境 | バージョンなど | 備考 |
開発用PCのOS | Windows11 | Windows10でもOKです |
言語 | MicroPython Ver.1.24.0 | |
開発環境 | Thonny Ver.4.1.4 | |
ボード | RaspberryPi Pico2 | Pico, PicoWでもOKです |
シリアルLED(テープタイプ)
シリアルLEDは複数のLEDが連結されたLEDです。テープ状・四角・円形など、様々なタイプが存在します。
並び方はいろいろありますが、共通してどのタイプにも小さなコントローラー(WS2812Bなど)が搭載されており、このコントローラーに対して信号を送ることで、LEDを操作することができます。
また、LED同士は数珠繋ぎ(バス型)に接続されているので、1本の信号線で、複数のLEDを操作することができます。
今回は、WS2812Bのコントローラー搭載LEDが60個連結された、以下のテープ型のシリアルLED「BTF-LIGHTING WS2812B」を使用します。
Pico2とシリアルLEDの接続
RaspberryPi Pico2 とシリアルLEDを以下のようにつなぎます。
ピン番号 | 内容 | 接続先 | 備考 |
1 | GP0 | DIN | |
36 | 3V3 | 電源 | |
38 | GND | グラウンド |
今回使うシリアルLEDには、ブレッドボード向けに端部が配線のままの変換コネクターが付属しています。
この線一見すると「単線」に見えますが、実は「撚り線」です。先端をハンダ付けしているだけなので、「もう少し長くしたいな〜」と被覆を剥くとブレッドボードに差さらなくなるので注意してください(実体験)
点灯させるLEDの数に注意してください。
Picoシリーズの最大出力電流は小さく、出力される電流が多くなると、プログラム(ファームウェア)が停止することがあります。
H/Wとしてもよろしくない使い方なので、点灯させる数を増やしたい場合は電池など別の3.3V程度の電源を以下の分岐された配線につないで使用してください。
Picoピンアサイン(Pin-Out)
※ Pico公式サイトより引用
使用する部品
RaspberryPi Pico 2
今からPicoを揃えるなら、RaspberryPi Pico2がおすすめです。Picoに比べて1.5倍高速で、値段はほぼ一緒です。
すぐに使えるキットもあります
ピンヘッダが半田付けされて、USBケーブルやピンのレイアウト表までついた、すぐに使えるセットもあります。
シリアルLED(テープ型)
今回使用したシリアルLEDです。コントローラーとしてWS2812Bを搭載しています。この記事で使っているものも以下のリンクから購入したものです。
ジップロックのようなマチ付きの袋にきっちり梱包されて届き、断線や不良もありませんでした。
ブレッドボード
国内サンハヤト製のブレッドボードです。少々堅めの指し心地ですが、海外製と違ってピン穴の番号がすべて印刷されており、品質も高いのでおすすめです。
ジャンパワイヤ(自作用)
キットだと丁度いい長さがない、色がない。という方は以下の配線で自分の好きなジャンパワイヤを作ることができます。
既製のジャンパワイヤとほぼ同じ固さなので、切って曲げるだけで理想のジャンパワイヤが作れます。
コネクタからブレッドボード間の配線にもぴったりです。
プログラム概要
今回のプログラムの概要は以下の通りです。
- NeoPixelライブラリの設定
- 各LEDを点灯させる
シリアルLEDライブラリ
シリアルLEDを簡単に扱うためライブラリに「NeoPixel」を使います。
ネットではこのライブラリをボード型のシリアルLEDに使っている情報が多いですが、テープ型のLEDにも問題なく使えます。
PicoシリーズのMicroPythonのファームウェアにもデフォルトで入っているので、追加のインストールも不要です。
実行結果
後述するプログラムの実行結果は以下の通りです。
全体コード
全体コードは以下の通りです。詳細な内容は後述する「コードのポイント」で解説します。
import machine, neopixel, time
# ピンの番号とLEDの数でNeoPixcelを設定
np = neopixel.NeoPixel(machine.Pin(0), 60)
for loop in range(100):
# LEDの数でループ
for i in range(60):
# 一旦全部消灯に設定
for cnt in range(60):
np[cnt] = (0, 0, 0)
# LEDを1つだけ、青点灯にする
# 色の指定は G, R, B の順
np[i] = ( 0, 0, 255)
# シリアルLEDに書き込み(信号を送る)
np.write()
# 0.05秒待機
time.sleep(0.05)
# 60個光った後に0.1秒待機
time.sleep(0.1)
Picoシリーズ単体(Thonnyなし)の状態でプログラムを実行する場合は、Picoシリーズ本体に「main.py」という名前でプログラムを保存してください。
コードのポイント
NeoPixelライブラリの設定
NeoPixelライブラリ用の設定を行います。
引数にはLEDの信号線(DIN)に接続する、Picoのピン名称(GP〇〇)と、操作するLEDの総数を指定します。
# ピンの番号とLEDの数でNeoPixcelを設定
np = neopixel.NeoPixel(machine.Pin(0), 60)
LEDの点灯
LEDが移動するように光らせるために、1つずつ場所をずらしながら点灯させます。
LEDは一度点灯(値を設定)するとその状態を維持するため、点灯させた後はnp配列の中身を(0,0,0)で消灯させてから、次のLEDを点灯させるようにしています。
for loop in range(100):
# LEDの数でループ
for i in range(60):
# 一旦全部消灯に設定
for cnt in range(60):
np[cnt] = (0, 0, 0)
# LEDを1つだけ、青点灯にする
# 色の指定は G, R, B の順
np[i] = ( 0, 0, 255)
# シリアルLEDに書き込み(信号を送る)
np.write()
まとめ
RaspberryPi Pico2でMicroPythonを使って、シリアルLEDを使う方法を解説しました。
最近見ることも多くなってきましたが、仕組みや操作方法も簡単なので、普及するのも納得ですよね。
デスクトップ回り・イベントのイルミネーションを、既製品にはできない「オリジナル」のパターンで光らせたりなど、とても楽しく使えるアイテムなので、ぜひぜひ使ってみてください。
参考になればうれしいです。
お知らせ
MicroPythonのプログラミングガイドブックが遂に発売!
「MicroPython」の本が遂にでました。
この一冊で、MicroPythonの言語仕様から、プログラミングの仕方まで”ガッツリ”学べます!
内容は、普段別言語で開発している人や、これからマイコンを始める(工学系の)学生を対象としているので「初心者向け」ではありません。しかし、「自前のライブラリの作成」が目標なので、これ一冊で「ガッツリ」とMicroPythonを学ぶことができます。
全ての内容はここでは紹介しきれないので、詳細は以下のAmazonページをご覧ください。目次だけでも”ガッツリ”なのが確認できると思います。
Pico/Pico W関連のおすすめ本
RaspberryPi Pico / Pico W関連のおすすめ本を独断と偏見で3つ選んでみました。Picoやるならとりあえずこれ買っとけ的な本や、電子工作全般で使える本などを厳選しています。
質問・要望 大歓迎です
「こんな解説記事作って」「こんなことがしたいけど、〇〇で困ってる」など、コメント欄で教えてください。 質問・要望に、中の人ができる限り対応します。
使えたよ・設定できたよの一言コメントも大歓迎。気軽に足跡を残してみてください。記事を紹介したい方はブログ、SNSにバシバシ貼ってもらってOKです。