Pico PR

RaspberryPi Pico 2で「フルカラーLED」を使う方法 ~ MicroPython Machineモジュール編~

記事内に商品プロモーションを含む場合があります

はじめに

RaspberryPi Pico2 で、MicroPythonとMachineモジュールを使って「フルカラーLED」を光らせる方法を解説します。

「フルカラーLED」は一般的な単色のLEDと違って、複数の色を発色できるLEDです。

手ごろな価格で使い方も簡単。工作やプロダクトをゲーミングPCのように光らせたり、おもちゃや、飾り物のイルミネーションを作ったりと応用先も幅広いです。

初心者の方でも簡単にできるので、記事の内容参考にぜひ使ってみてください。

Pico2でなくてもOK

記事ではRaspberryPi Pico2を使っていますが、Pico、PicoWでも同じ配線・プログラムで動作します。

ぜひお手持ちのPicoシリーズで、試してみてください。

環境

この記事で使用する環境は以下の通りです。

環境 バージョンなど 備考
開発用PCのOS Windows11 Windows10でもOKです
言語  MicroPython  Ver.1.24.0
開発環境 Thonny  Ver.4.1.4
ボード RaspberryPi Pico2 Pico, PicoWでもOKです

フルカラーLED(SH5RGB)

フルカラーLEDは、「赤」「緑」「青」の色を組み合わせることで、1つのLEDで様々な色が表示できるLEDです。

パッケージに入ったフルカラーLEDの画像
フルカラーLED (SH5RGB)
フルカラーLEDを拡大した画像
フルカラーLED(拡大)

接続する端子(足)が4つで、その内3つが「赤(R)」「緑(G)」「青(B)」の色に対応しており、それぞれの足の電圧の強弱で色を指定できます。

残る1本は共通化されたグラウンドで、グラウンドが共通化されていることからこのタイプは「カソードコモン」と呼ばれます。

逆にプラス側が共通化され、グラウンド側が3つに分かれているものは「アノードコモン」と呼ばれます。

電圧の変更

Picoシリーズにはピンの出力電圧を変更する機能はありません。そのため、PWMを使って電圧を変更します。PWMについてはこちらの記事をご覧ください。

なお、MicroPythonには、フルカラーLED用ライブラリを扱う「NeoPixel」というライブラリもありますが、今回はあえて基礎的なMachineライブラリを使用する方法を解説します。

SH5RGBの端子とスペック

端子(足)の並びとスペックは以下の通りです。

カラーLEDの各端子の説明
SH5RGBの足の並び
型番 SH5RGB
順電圧(VF) RED 1.8 ~ 2.2V
GREEN 3.2 〜 3.4V
BLUE 3.0 〜 3.4V
順方向電流 20mA

RaspberryPi Pico2とフルカラーLEDの接続

Pico2とフルカラーLEDを以下のように接続します。

フルカラーLEDとPico2の接続方法を説明する画像
ピン番号 内容 接続先 備考
17 GP13 RED
18 GND Common GND 共通のGNDです。
19 GP14 GREEN
20 GP15 BLUE

Picoピンアサイン(Pin-Out)

RaspberryPi Picoのピンアサイン(pinout)の画像

Pico公式サイトより引用

使用する部品

RaspberryPi Pico 2

今からPicoを揃えるなら、RaspberryPi Pico2がおすすめです。Picoに比べて1.5倍高速で、値段はほぼ一緒です。

ノーブランド品
¥1,475 (2024/11/27 21:32時点 | Amazon調べ)

すぐに使えるキットもあります

ピンヘッダが半田付けされて、USBケーブルやピンのレイアウト表までついた、すぐに使えるセットもあります(さらに今ならブラックフライデーのセール中です!)。

フルカラーLED

記事内で使っているフルカラーLEDです。100個単位での販売が多い中、20個というちょうどいい数量で購入できます。

私も以下のリンク先から実際に購入しました。エアキャップ付きの封筒など、梱包状態も良好なので、おすすめできる購入先です。

ジャンパワイヤ(セット)

固いジャンパワイヤがセットになったキットです。やわらかい配線よりスッキリした回路が作れます。

ジャンパワイヤ(自作用)

キットだと丁度いい長さがない、色がない。という方は以下の配線で自作できます。ジャンパワイヤとほぼ同じ固さの配線なので、切って曲げるだけで理想のジャンパワイヤが作れます。

抵抗

お手持ちのものでOKです。ない方は一度セットで揃えてしまうと送料と時間が節約できます。

ブレッドボード

国内サンハヤト製のブレッドボードです。少々堅めの指し心地ですが、海外製と違ってピン穴の番号がすべて印刷されており、品質も高いのでおすすめです。

プログラム概要

今回のプログラムの概要は以下の通りです。

  • PWMの設定をする
  • 赤 → 緑 → 青 → 黄 → 白 → 消灯 の順で点灯させる

実行結果

後述するコードの実行結果は以下の通りです。

基本的に直視できない位の明るさになります。画像だと赤が暗く見えますが、実際はちょうどいいくらいの明るさで、暗く感じることはありません。

フルカラーLEDを赤で点灯させた際の画像
赤点灯
フルカラーLEDを緑で点灯させた際の画像
緑点灯
フルカラーLEDを青で点灯させた際の画像
青点灯
フルカラーLEDを黄色で点灯させた際の画像
黄点灯
フルカラーLEDを白で点灯させた際の画像
白点灯

全体コード

全体コードは以下の通りです。詳細な内容は後述する「コードのポイント」で解説します。

import machine
import time
from machine import PWM

# 各ピンをPWMに設定します
Red   = PWM(machine.Pin(13, machine.Pin.OUT))
Green = PWM(machine.Pin(14, machine.Pin.OUT))
Blue  = PWM(machine.Pin(15, machine.Pin.OUT))

# PWMの周期(Hz)を設定します
Red.freq(1000)
Green.freq(1000)
Blue.freq(1000)

# Duty比の最大値です
max = 65535

for i in range(100):
   
    # 赤
    Red.duty_u16(max)
    Green.duty_u16(0)
    Blue.duty_u16(0)
    time.sleep(2)   
        
    # 緑
    Red.duty_u16(0)
    Green.duty_u16(max)
    Blue.duty_u16(0)
    time.sleep(2)

    # 青
    Red.duty_u16(0)
    Green.duty_u16(0)
    Blue.duty_u16(max)
    time.sleep(2)

    # 黄
    Red.duty_u16(max)
    Green.duty_u16(max)
    Blue.duty_u16(0)
    time.sleep(2)

    # 白
    Red.duty_u16(max)
    Green.duty_u16(max)
    Blue.duty_u16(max)
    time.sleep(2)

    # 消灯
    Red.duty_u16(0)
    Green.duty_u16(0)
    Blue.duty_u16(0)
    time.sleep(2)

コードのポイント

PWMの設定

Machineモジュールを使って、PWMの設定を行います。PWMに使用するピンの「GP〇〇」の番号を指定し、周波数を1000Hzに設定します。

# 各ピンをPWMに設定します
Red   = PWM(machine.Pin(13, machine.Pin.OUT))
Green = PWM(machine.Pin(14, machine.Pin.OUT))
Blue  = PWM(machine.Pin(15, machine.Pin.OUT))

# PWMの周期(Hz)を設定します
Red.freq(1000)
Green.freq(1000)
Blue.freq(1000)

単色のLEDは10Hzなどのように、周波数が低いと点滅しているように見えますが、フルカラーLEDでは点滅にはならないようです。

色を指定してLEDを光らせる

RGBのバランスを指定して色を指定します。

Picoシリーズでは、PWMのDuty比(1周期中にどのくらいの間信号をONにするか?)を変えることで電圧を変化させることができます。

duty比を設定するためのduty_u16関数は、比率を符号なし16ビット(0~65535)で指定する仕様であるので、0~65535の値で比率を指定します。

3色の指定は混ぜることもでき、絵の具のように3色の全てを指定すると白。赤と黄色を指定することで「黄色」の点灯になります。

全てを0に指定すると「消灯」になります。

# 赤
    Red.duty_u16(max)
    Green.duty_u16(0)
    Blue.duty_u16(0)
    time.sleep(2)   
        
    # 緑
    Red.duty_u16(0)
    Green.duty_u16(max)
    Blue.duty_u16(0)
    time.sleep(2)

    # 青
    Red.duty_u16(0)
    Green.duty_u16(0)
    Blue.duty_u16(max)
    time.sleep(2)

    # 黄
    Red.duty_u16(max)
    Green.duty_u16(max)
    Blue.duty_u16(0)
    time.sleep(2)

    # 白
    Red.duty_u16(max)
    Green.duty_u16(max)
    Blue.duty_u16(max)
    time.sleep(2)

    # 消灯
    Red.duty_u16(0)
    Green.duty_u16(0)
    Blue.duty_u16(0)
    time.sleep(2)

まとめ

RaspberryPi Pico2 で、MicroPythonとMachineモジュールを使って「フルカラーLED」を光らせる方法を解説しました。


安くて扱いも簡単。色や点灯・点滅など、プログラムの結果がわかりやすく反映されるので、作るのも楽しいです。アイデアや製作物の表現の幅も広がるので、ぜひぜひ使ってみてください。

参考になればうれしいです。

おすすめ書籍

MicroPythonのプログラミングガイドブックがついに登場!

「MicroPython」の専門書がついに発売になりました!

この一冊で、MicroPythonの言語仕様から、プログラミングの仕方までが、”ガッツリ”学べます!

別言語を使っている人や、これからマイコンを始める(工学系の)学生を対象としているので「初心者向け」ではありません。しかし、「自前のライブラリの作成」が目標なので、これ一冊で「ガッツリ」とMicroPythonを学びたい人におすすめの内容となっています。

全ての内容はここでは紹介しきれないので、詳細は以下からご覧ください。目次だけでも”ガッツリ”なのが確認できると思います。

質問・要望 大歓迎です

「こんな解説記事作って」「こんなことがしたいけど、〇〇で困ってる」など、コメント欄で教えてください。 質問・要望に、中の人ができる限り対応します。

使えたよ・設定できたよの一言コメントも大歓迎。気軽に足跡を残してみてください。記事を紹介したい方はブログ、SNSにバシバシ貼ってもらってOKです。

ABOUT ME
えす
現役のソフトウェアエンジニアです。 C++ C# Python を使ってます。10年ちょい設計/開発部門にいましたが、今はQAエンジニアっぽいことをしています。
Index