LED
Atom Matrixには25個のLEDが組み込まれています
このLEDはWS2812というチップが使われていて、少ない配線と簡単なプログラムで、非常にカラフルでダイナミックな光の表現を可能にする、マイコン工作において最も人気のあるLEDチップです
1. LED配置図
25個のLEDは、ジグザグ状に配置されていて、一本の線で繋がっています
0 1 2 3 4
9 8 7 6 5
10 11 12 13 14
19 18 17 16 15
20 21 22 23 24
2. gemのインストール
WS2812をESP32で使うために必要なことがあるのですが、今回は、あらかじめ、簡単に利用できるようにしたgemを使います
PCで R2P2-ESP32/components/picoruby-esp32/picoruby/build_config/xtensa-esp.rb
この設定ファイルを開いて以下を追加してください
conf.gem core: 'picoruby-pwm'
conf.gem github: 'ksbmyk/picoruby-ws2812', branch: 'main' # 追加
conf.picoruby(alloc_libc: false)
シリアルモニタを立ち上げている場合は一度 Ctl+] で終了してください
追加した設定ファイルの状態で、再度buildして、追加したgemを取り込みます。
rake clean build
この内容でマイコンに書き込みます。
ESPBAUD=115200 rake flash
再度シリアルモニターを立ち上げます。
rake monitor
3. IRBで点灯
まずは1つ点灯させます。 これは最初にインストールしたWS2812 gemを読み込むためのコードです。WS2812というLEDを簡単に制御できるgemを使います。
シリアルモニターで、irbを起動してください
$> irb
irb>
以下を打ち込んでください。先ほど追加したgemを使うので require 'ws2812' としています。
27というのは、AtomMatrixでLEDが繋がっているpinの番号です。
require 'ws2812'
led = WS2812.new(pin: 27, num: 25)
led.set_rgb(0, 255, 0, 0)
led.show
左上、0番目のLEDが赤になりました
set_hexメソッドを使うと16進でも色を指定できます
led.set_hex(0, 0xFF0000)
led.show
好きな色に変えてみましょう
# RGB値で指定
led.set_rgb(0, 0, 255, 0) # 緑
led.show
led.set_rgb(0, 0, 0, 255) # 青
led.show
led.set_rgb(0, 255, 255, 0) # 黄色
led.show
led.set_rgb(0, 255, 0, 255) # マゼンタ
led.show
# または16進数で
led.set_hex(0, 0x00FF00) # 緑
led.show
led.set_hex(0, 0x0000FF) # 青
led.show
複数点灯させます。第1引数にLEDのインデックスを指定します。
# RGB値で指定
led.set_rgb(0, 255, 0, 0)
led.set_rgb(1, 0, 255, 0)
led.set_rgb(2, 0, 0, 255)
led.show
# または16進数で
led.set_hex(0, 0xFF0000)
led.set_hex(1, 0x00FF00)
led.set_hex(2, 0x0000FF)
led.show
clearメソッドで全てのLEDを消灯できます。
led.clear
4. ファイルを送る
長いコードをirbで書くのは大変なので(現在esp32用のR2P2ではカーソルキーが使えなかったりコピー&ペーストができなかったりします) 手元でファイルを作り、それを実行します
一度、irbを exit で終了し、シリアルモニターを Ctr+] で終了してください。
PCで以下の内容のファイルを作り、 R2P2-ESP32/storage/home/ の下に、 square.rb という名前で保存してください
require 'ws2812'
led = WS2812.new(pin: 27, num: 25)
# 四隅だけ光らせる
led.set_rgb(0, 255, 0, 0) # 左上
led.set_rgb(4, 0, 255, 0) # 右上
led.set_rgb(20, 0, 0, 255) # 左下
led.set_rgb(24, 255, 255, 0) # 右下
led.show
PCに保存したファイルをマイコンに転送します
ESPBAUD=115200 rake flash
もう一度シリアルモニターを立ち上げます
rake monitor
シリアルモニターで ls を実行すると先ほど転送したファイルが見えます
$> ls
square.rb
このファイルを実行します
./square.rb
四隅が違う色で光りました
Tips
ファイルを続けて実行すると、以下のようなメッセージが表示されることがあります
W (xxxxx) rmt: GPIO 27 is not usable, maybe conflict with others
これは警告メッセージですが、LEDの制御には問題ありません。気にせず次のステップに進んでください