micro:bitによるプログラミング（３）担当：稲川 孝司（帝塚山学院大学）
実習内容
 micro:bitによるフルカラーLEDの制御

引用・参考文献
高橋参吉、喜家村奨、稲川孝司：micro:bitで学ぶプログラミング ブロック型から
JavaScriptそしてPythonへ、コロナ社、（2019.9）.

1

【NeoPixelについて】• NeoPixelは、１つのセル毎に赤、緑、青の３つのLEDとその制御回路が入っており、シリアル通信でRGBの値を送ることで、簡単に複数個のLEDをフルカラーで光らせることができるLEDの集合体です。RGBそれぞれを256段階に調整でき、256*256*256=16777216色で光ります。
• 今回は、8個のLEDがStick型に接続された製品を使って、micro:bitから様々な色で光らせるプログラミング実習を行います。
• 実物のmicro:bitとNeopixelがなくてもシミュレータが動くので、ブラウザのみでも実習は可能です。

2

Micro:bitとNeoPixelの接続
Micro:bitとNeoPixelを右図のように接続します。
黄色はP0,赤は3V,黒はGND
3V端子から流せる電流は V1＜90mA V2＜200mA

3

【準備】NeoPixelライブラリーの入手
1)

ブラウザで2)
3)

新しいプロジェクト⇒名前を「rei3-1」と入力し、作成ボタンをクリックする。
ツールボックスの下にある「＋拡張機能」をクリックし、「neopixel」の写真をクリックする。
ツールボックスの「計算」の下に、水色のNeopixelのブロック群が追加される。

4)

https://makecode.microbit.org サイトに行く。

rei3-1
4

プログラムの３つの基本構造【順次構造】【反復構造】【選択構造】

処理１

ループ始端
条件

条件

処理２

処理１

処理１

処理３

ループ終端

処理２

【例題3-1】NeoPixelを光らせてみよう。(ファイル名:rei3-1）＜手順＞
1) 新しいプロジェクト⇒名前を「rei3-1」と入力し、作成ボタンをクリックする。
2)「最初だけ」の中に「Neopixel」ブロックから「変数をNeoPixelモードにする」を追加する。
3) NeoPixelを接続している端子はP0なので、P0であることを確認する。
4) NeoPixelの数は８個なので、ブロック内の24を８に変更する。
5) 「Neopixel」ブロックから「赤色に点灯する」ブロックを「最初だけ」に追加する
6) 作成したプログラムをmicro:bitに書き込み、赤色で点灯することを確認する。

【順次構造】

24を８に変更
ここをクリックして、好きな色に変えることができる

6

シミュレータについて

NeoPixelライブラリを追加したプログラムを作成すると、シミュレータ画面上にNeoPixelが自動的に表示されます。
7

【例題3-2】LEDを好きな色で100ミリ秒ごとに点滅させてみよう。
（ファイル名:rei3-2）＜手順＞
1) ファイル名を「rei3-2」と入力する。
2) 「最初だけ」ブロックの中に「変数をNeoPixelモードにする」ブロックを追加する
3) NeoPixelを接続している端子はP0なので、P0であることを確認する。
4) NeoPixelの数は8個なので、ブロック内の24を8に変更する。
---------------------------------------------------5) 「ずっと」ブロックの中に「赤色に点灯する」ブロックを追加する。
6) 基本から「一時停止（ミリ秒）100」ブロックを追加する
7) 「赤色に点灯する」ブロックを追加し、消灯するために色をblackに変更する。
8) 再度、基本から「一時停止（ミリ秒）100」ブロックを追加する
9) 作成したプログラムをmicro:bitに書き込みます。
8

【例題3-2】（ファイル名:rei3-2）【順次構造】【反復構造】
Neopixelのその他ブロックからブロックを選ぶと、RGBそれぞれを256段階に変えてフルカラーで表示させることができる。
9

光の3原色 R(赤）G(緑) B(青)

2進数

0000
0001

0010
0011
0100

0101
0110
0111

1000
1001
1010

00221345678
91013456789A

1011

111101

13D

15F

1100

赤緑
青256色× 256色× 256色＝16777216色

10進数 16進数

1110
1111

1214BCE10

原色大辞典 https://www.colordic.org/

16進数表示11

micro:bitでの16進数から10進数への自動変換】(例)
16進数であることを示す
0xを先頭に追加する

0x87

0xce

0xeb

自動的に10進数になる

12【コラム：LEDの番号の割り当てについて】
NeoPixelは、順番にLEDを点灯させるために、それぞれに番号が割り当てられています。
8個のStick型の場合は、右図のように、信号線に近いほうから順に０から7が割り当てられます。
個別に色を設定して点灯する方法は、で番号を指定し、ｎ番目のLEDを好きな色で点灯させることができます。
また、で、点灯しているLEDを下にずらすことができます。

０１２３４５６７13

【例題3-3】8個のLEDを個別に好きな色に指定して、点灯させてみよう。
（ファイル名:rei3-3）＜手順＞
1) ファイル名を「rei3-3」と入力する。
2) 「最初だけ」ブロックの中に「変数をNeoPixelモードにする」ブロックを追加する。
3) 今回のNeoPixelの数は8個なので、ブロック内の24を8に変更する。
----------------------------------4)「ずっと」ブロックの中に、NeoPixelの「その他」ブロックから「stripの０番目のLEDを赤色に設定する」ブロックを追加する。
5)「設定」ブロックを右クリックして複製し、計8個の「設定」ブロックを作成。
6) 設定する番号を０から7の順に変更し、色はすきな色に変更する。
7)「stripを設定した色で点灯する」ブロックを追加する。
8) 作成したプログラムをmicro:bitに書き込みます。
14【例3-3】（rei3-3）【反復構造】【行のコピペの方法】
ブロックの1行目を右クリックして複製し、貼り付け、数字と色を変える15

【例題3-4】「1個分ずらす」ブロックを使って、点灯した緑のLEDを上から下へ移動させてみよう。 （ファイル名: rei3-4）＜手順＞
１）ファイル名を「rei3-4」と入力します。
２）「最初だけ」中に「変数をNeoPixelモードにする」ブロックを追加する。
３）今回のNeoPixelの数は8個なので、ブロック内の24を8に変更します。
------------------------------------４）「ずっと」の中に、NeoPixelの「その他」ブロックから「０番目のLEDの色を設定する」ブロックを追加する。
５）ループから「くりかえし」ブロックを入れ、回数を8回に設定します。
６）「くりかえし」の中に、NeoPixelから「指定した色で点灯する」ブロックを追加する。
７）さらに、基本から「一時停止(ミリ秒)100」ブロックを追加する。
８）そのブロックの下に、NeoPixelから「色をLED1個分ずらす」ブロックを追加する。
９）作成したプログラムをmicro:bitに書き込みます。
16

【例題3-4】（rei3-4）【反復構造】

０１２３４５６７17

【例題3-5】１つだけLEDを点灯させて、下から上へ移動させてみよう。
(7番目から順に０番目までの点灯するために、例題3-4の次の2か所を修正します。
※最初だけブロックは例題3-4と同じなので省略している。） (rei3-5)【反復構造】

変更箇所

０１２３４５６７18

【応用１】例題3-4と例題3-5を組み合わせて、LEDを上下に移動させるプログラムを作成してみよう。

【コラム：加速度センサについて】
micro:bitには、3次元の加速度センサが搭載されており、図のようにx,y,zの３方向の加速度を計測することができます。
Z軸
地上では下向きの重力加速度があるので、それを計測してmicro:bitを3次元的に動かすだけで値を変化させることができます。
また、動きや振動、衝撃なども検知することができます。

Y軸

X軸20【例題3-6】micro:bitを傾けて、搭載されている加速度センサから３つの値を読み込んでRGBの3つの色に対応したLEDを点灯させ、（ファイル名:rei3-6）micro:bitを動かして色を変えてみよう。
＜手順＞
1) 「最初だけ」ブロックの中に「変数をNeoPixelモードにする」ブロックを追加する。
------------------------------------2) ずっとブロックの中に、NeoPixelのその他から「stripの０番目を赤色にする」ブロックを追加する。
3) 赤の部分を、NeoPixelのその他から「RGB(赤255、緑255、青255)」に置き換える。
4) 数値の255の部分を加速度X、加速度Y,加速度Zに置き換える。
5) Neopixelから「Stripを指定した色で点灯する」ブロックを追加する。
6) 基本から一時停止(ミリ秒）100を追加する。
7) NeoPixelから「stripに設定されている色を1個分ずらす」ブロックを追加する。
8) 作成したプログラムをmicro:bitに書き込みます。
21

【例題3-6】（ファイル名:rei3-6）【反復構造】

Z軸

Y軸

X軸
22

【例題3-7】 レインボーパターンで光らせてみよう。
NeoPixelのライブラリの中に「レインボーパターンに点灯する」という命令があり、それを使うと、虹色で光らせることができます。
（ファイル名:rei3-7）＜手順＞
1) 「最初だけ」ブロックの中に、「変数をNeoPixelモードにする」ブロックを追加する。
2) 今回のNeoPixelの数は8個なので、ブロック内の24を8に変更する。
3) 次に「Stripをレインボーパターンに点灯する」ブロックを追加する。
4) 作成したプログラムをmicro:bitに書き込みます。

23

【例題3-8】レインボーパターンで下移動させよう。
例題3-7ではレインボーパターンの色が固定されていたので、「ずっと」ブロックの中に「1個分ずらす」ブロックを追加して、色が順番に下移動するようにしてみよう。（ファイル名:rei3-8）＜手順＞
1) 「最初だけ」のブロックは、例題3-7をそのまま使います。
2) 「ずっと」ブロックの中に、Neopixelから「LED1個分ずらす（ひとまわり）」ブロックと「設定した色で点灯する」ブロックを追加する。
3) 基本から「一時停止（ミリ秒）100」ブロックを追加する。
4) 作成したプログラムをmicro:bitに書き込みます。

【反復構造】

24

【例題3-9】レインボーパターンで上移動させよう。
例題3-8ではレインボーパターンで下移動したので、ここでは上移動するようにしてみよう。
（ファイル名:rei3-9）＜手順＞
1) ブロックは、例題3-8を基本的にそのまま使います。
2) 「LED１個分ずらす（ひとまわり）」ブロックの１を「-1」に変更します。

【反復構造】

変更箇所

25

【コラム：ロールとピッチ】
micro:bitには、3次元の加速度センサが搭載されており、右下のようにロールとピッチの角度を調べることができます。
ここでは、ピッチを使ってmicro:bitを前に傾けたときに、LEDが上移動後ろに傾けたときにLEDが下移動するプログラムを考えます。

26

【例題3-10】MICRO:BITを前後に傾けて、前に傾けた時はレインボーパターンが上移動し、後ろに傾けた時はレインボーパターンが下移動するプログラムを作成しよう。（ファイル名:rei3-10）
傾斜「ピッチ」の値は、 MICRO:BITを前に倒した時は負の値になり、後ろに倒した時には正の値になるので、例題3-9のプログラムを次のように変更します。
（最初だけ、の部分は例題3-9と同じなので省略）【選択構造】

27

【例題3-11】２つのNeopixelを使って、レインボーパターンで、1つは下移動、もう1つは上移動で点灯させてみよう。（ファイル名:rei3-11）（1つ目はP0端子に、2つ目はP1端子に接続するものとする）＜手順１＞「変数」から「変数を追加する」で「strip2」を追加し、最初だけのブロックのNeoPixelの２つの命令をコピーして, 「strip2」で接続端子をP1にしたブロックを作成する。

＜手順２＞

右図のように２つのNeopixelが表示されるので、ずっとブロックの中に、stripは下移動(1)を、strip2は上移動(-1)を設定する。
（ファイル名:rei3-11）【反復構造】

29

【シミュレータによるNeopixel動作】【応用１】変数をもう1つ追加して、3つのNeopixelを動かしてみよう【応用２】16個や24個のLEDを光らせてみよう

画面に、本物そっくりなシミュレータが表示され、動作する

30