おもちゃ病院で必要な部品をAliExpressで購入しようと思いました。
Choice という仕組みがあって、1500円以上なら送料無料になるんですよ。
そういえばラジオペンチさんのブログで、NEOPIXELというRGB LEDをテープに多段接続
したテープLEDが安く売っていることを思い出しました。
WS2812BとWS2813の違いですが、WS2813はデータ線が2系統になっているので、途中の1個が壊れても次のLEDから先は点灯する冗長性が特徴の様です。信号線が増えるのでテープの幅は若干太くなるようです。
またリフレッシュレートが500Hzから2kHzに上っていることも特徴のようです。
ラジオペンチさんのホームページに載っていた元記事はこれです。
まずは、120個のLEDストリップから6個のLEDを切り出します。
これをSTM32F103 BLUEPILLでテストしましょう。
下記はWS2813のテストプログラムです。
/*
WS2813B LED テストプログラム(ビットバン方式)
MCU : STM32F103 (BluePill想定)
IDE : Arduino IDE (STM32duino)
書き込み : ST-LINK
LED : WS2813B × 6個
出力ピン : PA8
ライブラリ : Adafruit NeoPixel
※ WS2813B は WS2812B 互換のため、
NEO_KHZ800 を指定する
*/
#include <Adafruit_NeoPixel.h>
// ===== 設定 =====
#define LED_PIN PA8 // LEDデータ出力ピン
#define LED_COUNT 6 // 接続しているLEDの数
// NeoPixel オブジェクト生成
// NEO_GRB : 色データ順
// NEO_KHZ800 : 800kHz(WS2812/WS2813共通)
Adafruit_NeoPixel strip(
LED_COUNT,
LED_PIN,
NEO_GRB + NEO_KHZ800
);
void setup() {
// NeoPixel 初期化
strip.begin();
// 念のため全LED消灯
strip.clear();
strip.show();
}
void loop() {
// 赤 → 緑 → 青 を順番に表示
colorAll(255, 0, 0); // 赤
delay(500);
colorAll(0, 255, 0); // 緑
delay(500);
colorAll(0, 0, 255); // 青
delay(500);
}
/*
全LEDを同じ色で点灯させる関数
r, g, b : 0~255
*/
void colorAll(uint8_t r, uint8_t g, uint8_t b) {
for (int i = 0; i < LED_COUNT; i++) {
strip.setPixelColor(i, strip.Color(r, g, b));
}
strip.show(); // ここで実際にLEDへデータ送信
}
これで、6個のLEDにr=g=b=255のデータを流し込みましたから、6個が白に光ったら接続確認はOKです。
接続は下記のデータシートに示すように、先頭のLEDにUSB 5VとGND、それから信号線のDIに330Ωを介してSTM32F103 BLUEPILLのPA8を接続します。
データシート接続図
このとおりにブレッドボードで組んで、STLINKでスケッチをダウンロードすると
あっけなく動作しました。 USB経由の書き込みは何度かトライしましたが地雷があってうまくいきませんでした。
あっさり光りました!
次に光がダイナミックに動いて動作するデモプログラムを作りました。
この時はNEOPIXELの動作を理解してなかったので、GROK先生に相談しました。
https://x.com/i/grok/share/raiTG4ZqQ6bDDPPBPhTkunrzJ
ChatGPT先生にも、プログラムの添削とエフェクトの追加をお願いしました。
https://x.com/i/grok/share/raiTG4ZqQ6bDDPPBPhTkunrzJ
* - WS2813BのDIとBIは両方接続推奨 は間違いで、
実際は、DIを330Ωを介してPA8に接続し、BIはGNDに落とします。
エフェクトを追加した、最終のテストプログラムは下記です。
NeoPixel_xmas_demo2_25dec21c.ino
容量が大きいので、頭の部分だけ貼り付けますね。
/*********************************************
******
* NeoPixel クリスマスエフェクト サンプルプログラム (WS2813B 6個用)
*
* 対象ボード : STM32F103 (Blue Pill) + Arduino IDE
* 使用ライブラリ: Adafruit NeoPixel (STM32対応版 ANDnXORフォーク)
* LED種類 : WS2813B (6個直列接続)
* データピン : PA8 (動作確認済み!)
*
* 主な機能:
* - colorWipe : 順番に単色で塗りつぶし(赤→緑→青)
* - theaterChase : シアター風追いかけ点灯
* - rainbow : 全体でゆっくり虹色サイクル
* - candyCane : 赤白キャンディケイン風ストライプ(回転)
* - christmasTwinkle : ランダムきらきら点滅(白/金)
* - christmasAlternate : 赤緑交互点灯(クラシッククリスマス)
*
* 注意事項:
* - WS2813BのDIとBIは両方接続推奨
* - データ線に330-470Ω抵抗 + レベルシフタ推奨
* - 明るさ50でUSB電源でも安全
*
* 作成日: 2025/12/21
* 動作確認環境: Blue Pill + WS2813B 6個 (PA8)
***************************************************/
#include <Adafruit_NeoPixel.h>
#define NUM_LEDS 6
#define DATA_PIN PA8
#define LED_TYPE NEO_GRB + NEO_KHZ800
Adafruit_NeoPixel pixels(NUM_LEDS, DATA_PIN, LED_TYPE);
void setup() {
pixels.begin();
pixels.setBrightness(50); // 明るさ調整(クリスマスは少し明るめにしてもOK)
pixels.clear();
pixels.show();
}
void loop() {
// 既存のエフェクト
colorWipe(pixels.Color(255, 0, 0), 200); // 赤
colorWipe(pixels.Color(0, 255, 0), 200); // 緑
colorWipe(pixels.Color(0, 0, 255), 200); // 青
theaterChase(pixels.Color(127, 127, 127), 100); // 白追跡
rainbow(10);
}
https://x.com/powpher/status/2002751267123470633
X(旧Twitter)の投稿も参考まで
ラジオペンチさんの記事を参考に、
— トドお父さん@水曜日はヤクルトファン (@powpher) December 21, 2025
NEOPIXELをSTM32F103 BLUEPILLで動かしました!
まだたった6個です。
https://t.co/bNKt6sHb2g
それでは、次は前にも紹介したSTM32F103C8T6を搭載したBluePill基板の紹介です。
AliExpressで200円前後で買えるので、やすいですね。
自分はおもちゃ修理にSTM32を使うアイデアがあるので、勉強用に3枚買いました。
その場合は、開発環境はSTM32CubeIDEかKEILというものを使う必要があるのですが、
今回はArduinoベースなので、Arduino STM32Coreというものを使います。
これだと、STM32でArduinoのライブラリが使えるので、非常にラクですね。
ArduinoのボードマネージャでSTM32Coreというものを組み込むのですが、この辺の情報は
巷にあふれていますので、割愛します。ただし、Arduinoは最新のVerを使ってくださいね。
もうひとつ、BluePillを使うためには、Amazonで中華製のST-LINK/V2というプログラマを
買うことをお勧めします。 自分の場合は、500円くらいで十分使えました。
ST-LINKが必要なのは、中華製の廉価BluePillはプログラムが書き込まれてないまっさらの状態のためです。 例えばArduinoに接続する場合、BootLoader(USBのCDC)が書き込まれていれば、BOOT1のJumperを”1”に切り替えてUSB経由で書き込みができますが、まっさらではお手上げです。
そこでSTLINKで接続すれば、BootLoaderの書き込みをを行うことができるので、Arduinoから書き込み
ができるようになります。
ここでも、細かい話はネットの情報で確認下さい。
ST-LINKで接続すると細かい話はおいといて、プログラムの書き込みができるようになりました。
さて、ラジオペンチさんのシリアルテープLEDを使った110LEDクリスマスツリーのプログラムをArduino Nanoから、STM32F103C8T6 BluePillに移植したプログラムですが、こちらにおいています。
説明が長くなってきたので、移植したプログラムでNEOPIXELを6個→ 114個に拡張し、クリスマスツリーに巻き付けてNEOPIXELのデモをした話は次回にしますね~。
こうご期待 !
それでは、皆さんおやすみなさい。





