ダイソーの¥550 フルカラーテープLED と Raspberry Pi Pico WでPCのPythonから通信(UDP)で自由に色を変えられるようにしてみました‼
何かと同期して光らせられますね‼
ダイソー フルカラーテープLEDについて
ダイソーの¥550 フルカラーテープLEDはIRリモコンで色を変えられるようになっています。
IRリモコンも工作に使えそうですね!
これで¥550は破格です!
テープの端にコネクタが付いていて、コードを切断せずに工作ができます。
黒コードのコネクタが+なので注意です。
Raspberry Pi Pico Wとの接続
下写真のように接続しました。
左側のトランジスタは2SK2232というNチャンネルFETです。秋月で100円で販売しています。秋月で30円で販売している2SK4017でも良いと思います。
今回はPicoとFETを直結していますが、1KΩぐらいの抵抗を挟んだ方が良いです。
Raspberry Pi Pico Wのプログラム1
まずは動作の確認のために点滅するプログラムを作ってみます。
開発環境はArduino(EarlePhilhower版)を使用しています。
#define R_PIN 18
#define G_PIN 19
#define B_PIN 20
void setup() {
pinMode(R_PIN, OUTPUT);
pinMode(G_PIN, OUTPUT);
pinMode(B_PIN, OUTPUT);
pinMode(LED_BUILTIN, OUTPUT); // 内蔵LED (動作確認用)
digitalWrite(R_PIN, LOW); // 消灯
digitalWrite(G_PIN, LOW);
digitalWrite(B_PIN, LOW);
}
void loop() {
digitalWrite(R_PIN, HIGH);
digitalWrite(G_PIN, HIGH);
digitalWrite(B_PIN, HIGH);
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(R_PIN, LOW);
digitalWrite(G_PIN, LOW);
digitalWrite(B_PIN, LOW);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
Raspberry Pi Pico Wのプログラム2
次は明るさを滑らかに変化させてみます。
#define R_PIN 18
#define G_PIN 19
#define B_PIN 20
void setup() {
pinMode(R_PIN, OUTPUT);
pinMode(G_PIN, OUTPUT);
pinMode(B_PIN, OUTPUT);
pinMode(LED_BUILTIN, OUTPUT); // 内蔵LED (動作確認用)
digitalWrite(R_PIN, LOW); // 消灯
digitalWrite(G_PIN, LOW);
digitalWrite(B_PIN, LOW);
}
int v = 0; // 明るさ
int d = 1; // 1:明るくする -1:暗くする
void loop() {
v += d;
if (v >= 30 || v <= 0) { // 30以上は明るさは変わらないみたい
d = -d; // 明るくする <-> 暗くする の切り替え
}
analogWrite(R_PIN, v);
delay(20);
}
PCのPythonから色を制御
最後にPCのPythonプログラムから通信(UDP)で色を制御してみます。
■Raspberry Pi Pico W側
#include
#include
const char *SSID = "xxxxxxxx"; // 環境に合わせる
const char *SSID_PASS = "xxxxxx"; // 環境に合わせる
// IPを指定する場合 ※指定しない場合はWiFi.config()の行をコメントアウトする
const IPAddress LOCAL_IP(192, 168, 0, 2); // 環境に合わせる
const IPAddress SUBNET(255, 255, 255, 0); // 環境に合わせる
const IPAddress GATEWAY(192, 168, 0, 1); // 不要な場合はLOCAL_IPと同じにする
const IPAddress DNS(192, 168, 0, 1); // 不要な場合はLOCAL_IPと同じにする
const unsigned int LOCAL_PORT = 24790; // 受信ポート
#define BUF_SIZE 1400 // 1400バイト以上は分割して送信すること
WiFiUDP udp;
#define R_PIN 18
#define G_PIN 19
#define B_PIN 20
void setup() {
Serial.begin(115200);
pinMode(R_PIN, OUTPUT);
pinMode(G_PIN, OUTPUT);
pinMode(B_PIN, OUTPUT);
pinMode(LED_BUILTIN, OUTPUT); // 内蔵LED (動作確認用)
digitalWrite(R_PIN, LOW); // 消灯
digitalWrite(G_PIN, LOW);
digitalWrite(B_PIN, LOW);
// IPを指定する (DHCPで割り当てられる場合は不要)
WiFi.config(LOCAL_IP, DNS, GATEWAY, SUBNET);
WiFi.begin(SSID, SSID_PASS);
while (WiFi.status() != WL_CONNECTED) {
Serial.print('.');
delay(500);
}
Serial.print("Connected! local IP: ");
Serial.println(WiFi.localIP());
udp.begin(LOCAL_PORT);
}
uint16_t count = 0;
void loop() {
// UDP受信
int packetSize = udp.parsePacket();
if (packetSize > 0) {
uint8_t recvBuffer[BUF_SIZE];
int recvSize = udp.read(recvBuffer, BUF_SIZE);
if (recvSize >= 3) {
analogWrite(R_PIN, recvBuffer[0]);
analogWrite(G_PIN, recvBuffer[1]);
analogWrite(B_PIN, recvBuffer[2]);
}
count++;
}
digitalWrite(LED_BUILTIN, count % 2);
}
■PC側(Python)
今回はランダムに色をゆっくり変えるようにしてみました。
UDP送信用のクラス(UDPSend.py)と本体プログラム(daiso_led_tape_ctrl.py)を同じフォルダにおいてください。
〇UDP送信用のクラス UDPSend.py
import socket
# 送信用
class UDPSend:
# dest_ip : 送信先IP
# dest_port : 送信先PORT
def __init__(self, dest_ip, dest_port):
self.dest_ip = dest_ip
self.dest_port = dest_port
self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# ar_data : bytearray型
# 1400バイト以上になる場合は分割すること
def send(self, ar_data):
send_data = bytes(ar_data)
#print(get_array_str(send_data))
self.sock.sendto(send_data, (self.dest_ip, self.dest_port))
def close(self):
self.sock.close()
〇本体プログラム daiso_led_tape_ctrl.py
import UDPSend
import time
import random
IP = '192.168.0.2'
PORT = 24790
udp_send = UDPSend.UDPSend(IP, PORT) # UDP送信
r = 0
g = 0
b = 0
N = 30 # 分割数
while True:
next_r = random.randint(0, 30)
next_g = random.randint(0, 30)
next_b = random.randint(0, 30)
d_r = float(next_r - r) / N
d_g = float(next_g - g) / N
d_b = float(next_b - b) / N
for i in range(N):
r += d_r
g += d_g
b += d_b
send_data = bytearray([int(r), int(g), int(b)])
udp_send.send(send_data)
time.sleep(0.02)
r = next_r
g = next_g
b = next_b
動かすと▼のようにランダムに光ります。
ダイソーの¥550 フルカラーテープLED と Raspberry Pi Pico Wで
PCのPythonから通信(UDP)で自由に色を変えられるようにした‼何かと同期して光らせられる!
動画はランダムに色をゆっくり変えるようにしたもの#DAISO #ラズパイピコ #ラズピコ #Arduino #電子工作 pic.twitter.com/XZLBjzZJ4r— PONTA@電子工作⚡️ロボット制作⚡️プログラミング (@Elec_Robot) January 8, 2025
本体プログラムを変更すれば何かに同期して光らせることも可能ですね!
たとえば、音楽に合わせて光らせる、タイマーで光らせる、PC起動時に光らせる、など。
今回使用したダイソーのフルカラーテープLEDはIRリモコンもついていて破格ですが、Picoなどマイコンで制御する場合はFETが必要なので少し面倒ですね。
マイコンでフルカラーテープLEDを制御するだけなら、Amazonで1000円/mぐらいで販売しているWS2812が載ってるテープLEDの方が簡単かもしれません。
■Raspberry Pi Picoの関連記事
【Raspberry Pi Pico W】ダイソーの¥550 フルカラーテープLED で工作
【Raspberry Pi Pico W】WiFi UDP通信 サンプルプログラム
Raspberry Pi Pico+Arduinoでサーボをたくさん動かしたい
会話ができる「ぴよロボ」作りました! (Raspberry Pi + Pico + ChatGPT)
Raspberry Pi Pico W でPCとBluetooth(シリアル)接続する
Raspberry Pi Pico/Pico WをArduino開発環境で使うためのメモ
超音波距離センサー + Raspberry Pi Picoで潜水艦ソナー風
コップの水がこぼれない台 MPU6050 + Raspberry Pi Pico(Arduino)
MPU6050 + Raspberry Pi Pico(Arduino) -> PCで3Dのキューブを回転表示