ここで少し横道にそれて、ArduinoでフルカラーテープLEDを扱ったらどんな具合か試してみた。秋月で Seeed Studio XIAO ESP32C3 とI2Cレベル変換モジュールを買ってテープLEDに繋げた。このESP32C3は160MHzのクロックで動く32ビットプロセッサなのでPICに比べて十分に高性能である。回路は誰が考えても同じようなものだろう。ESP32C3からの出力は3.3VレベルなのでI2Cレベル変換モジュールで5Vレベルに変換してLEDに与える。後で実際に試してみたら3.3Vレベルでも動いた。
回路は簡単なのでブレッドボード上に組み立てた。
Copilotに相談して作ったテストスケッチは次の通り。#include <FastLED.h>
#define LED_PIN 10 // LEDのDINに接続したGPIOピン番号
#define NUM_LEDS 120 // LEDの総数
#define BRIGHTNESS 64 // 明るさ(0〜255)最初は電力消費を抑えるため低めに設定
CRGB leds[NUM_LEDS];
void setup() {
Serial.begin(115200);
// put your setup code here, to run once:
// SK6812のRGBモデルは通常「GRB」の順序でデータを受け取ります
// もし色が赤と緑で反転する場合は、GRBをRGBに変更してください
FastLED.addLeds<SK6812, LED_PIN, GRB>(leds, NUM_LEDS);
// 全体の明るさを制限
FastLED.setBrightness(BRIGHTNESS);
// 起動時に一度すべて消灯
FastLED.clear();
FastLED.show();
Serial.println("*** Program Start");
}
void loop() {
// put your main code here, to run repeatedly:
// パターン1: 1つずつ順番に点灯(流れる光)
for(int i = 0; i < NUM_LEDS; i++) {
leds[i] = CRGB::Blue; // 青色に設定
FastLED.show();
delay(20);
leds[i] = CRGB::Black; // 次に進む前に消灯
}
// パターン2: 全体をゆっくりレインボーに変化させる
for (int j = 0; j < 255; j++) {
fill_rainbow(leds, NUM_LEDS, j, 5);
FastLED.show();
delay(10);
}
}
#include <WiFi.h>
#include <WebServer.h>
#include <FastLED.h>
#include <ESPmDNS.h>
#define LED_PIN 10
#define NUM_LEDS 120
CRGB leds[NUM_LEDS];
// ★APモードのWi-Fi設定(好きな名前に変更できます)
const char *ssid = "ESP32-APmDNS";
const char *password = "12345"; // 8文字以上
const char *dnsname = "esp32";
WebServer server(80);
// スマホから「赤」ボタンが押されたときの処理
void handleRed() {
fill_solid(leds, NUM_LEDS, CRGB::Red);
FastLED.show();
server.send(200, "text/plain", "Color changed to Red");
}
// スマホから「消灯」ボタンが押されたときの処理
void handleOff() {
FastLED.clear();
FastLED.show();
server.send(200, "text/plain", "LED Off");
}
// 操作用の簡易ホームページを表示する処理
void handleRoot() {
String html = "<html><body>";
html += "<h1>ESP32 LED Controller2</h1>";
html += "<p><button onclick=\"location.href='/red'\"
style='font-size:20px; padding:10px;'>RED</button></p>";
html += "<p><button onclick=\"location.href='/off'\"
style='font-size:20px; padding:10px;'>OFF</button></p>";
html += "</body></html>";
server.send(200, "text/html", html);
}
void setup() {
Serial.begin(115200);
FastLED.addLeds<SK6812, LED_PIN, GRB>(leds, NUM_LEDS);
FastLED.clear();
FastLED.show();
Serial.println("*** Starting HTTP server.");
// ★APモードの開始
WiFi.softAP(ssid, password);
Serial.println("HTTP server started");
Serial.println("*** Starting mDNS.");
if (!MDNS.begin(dnsname)) {
Serial.println("Error setting up mDNS responder!");
while(1) { delay(1000); }
}
Serial.println("mDNS responder started. Hostname: esp32.local");
// アクセス先URLの設定
Serial.println("*** Allocating access dir.");
server.on("/", handleRoot);
server.on("/red", handleRed);
server.on("/off", handleOff);
server.begin();
// 5. mDNSに「HTTPサービス(ポート80)」を提供していることを登録(オプション)
MDNS.addService("http", "tcp", 80);
Serial.println("ESP32 Serial RGB-LED Driver & APmDNS Ready!");
}
void loop() {
server.handleClient(); // スマホからのアクセスを常に監視
}
このスケッチでは、携帯でWiFiを”ESP32-APnDNS”というアクセスポイントに接続(パスワードは12345)した後ブラウザを立ち上げ "esp32.local" というホストにアクセスすると、テープLEDを赤点灯にするか消灯するかのメニュー(ボタン)が表示される。 ボタンを押すとテープLEDが反応する。
(続く)


0 件のコメント:
コメントを投稿