WOKWI ESP32 WS2812 + MQTTgo.io
手動 近端on off / 遠端mqtt 控制 on off color
//1029新增控制燈號顏色
#include <WiFi.h>
#include <PubSubClient.h> //請先安裝PubSubClient程式庫
// ------ws2812b ------
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define PIN 2 //接腳
#define NUMPIXELS 16 //燈數量
#define ttb223_pin 12
bool ws2812b_mainled=false;
// ------ 以下修改成你自己的WiFi帳號密碼 ------
char* ssid = "Wokwi-GUEST"; //請修改為您連線的網路名稱
char* password = ""; //請修改為您連線的網路密碼
// ------ 以下修改成你MQTT設定 ------
char* MQTTServer = "mqttgo.io";//免註冊MQTT伺服器
int MQTTPort = 1883;//MQTT Port 除非加密,否則不用更改port
char* MQTTUser = "";//不須帳密
char* MQTTPassword = "";//不須帳密
//訂閱主題1:改變LED燈號(記得改Topic)
char* MQTTSubTopic1 = "hcvs/led/power";
char* MQTTSubTopic2 = "hcvs/led/color";
//建立MQTT與聯網物件
WiFiClient WifiClient;
PubSubClient MQTTClient(WifiClient);
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
#define DELAYVAL 500
int r=150,g=150,b=150;
void setup() {
Serial.begin(115200);
//開始WiFi連線
WifiConnecte();
//開始MQTT連線
MQTTConnecte();
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
clock_prescale_set(clock_div_1);
#endif
pixels.begin();
pinMode(ttb223_pin, INPUT);
}
void loop() {
//如果WiFi連線中斷,則重啟WiFi連線
if (WiFi.status() != WL_CONNECTED) { WifiConnecte(); }
//如果MQTT連線中斷,則重啟MQTT連線
if (!MQTTClient.connected()) { MQTTConnecte(); }
MQTTClient.loop();//更新訂閱狀態
delay(50);
if(digitalRead(ttb223_pin)){
ws2812b_mainled=!ws2812b_mainled;
Serial.print("當下狀態:");
Serial.println(ws2812b_mainled);
while(digitalRead(ttb223_pin)){
delay(50);
}
if(ws2812b_mainled){
Serial.print("開啟燈號");
//pixels.clear();
for (int i=0;i<NUMPIXELS;i++){
pixels.setPixelColor(i, pixels.Color(r, g, b));}
pixels.show();
}
else{
Serial.print("關閉燈號");
//pixels.clear();
for (int i=0;i<NUMPIXELS;i++){
pixels.setPixelColor(i, pixels.Color(0, 0, 0));}
pixels.show();
}
}
}
//開始WiFi連線
void WifiConnecte() {
//開始WiFi連線
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi連線成功");
Serial.print("IP Address:");
Serial.println(WiFi.localIP());
}
//開始MQTT連線
void MQTTConnecte() {
MQTTClient.setServer(MQTTServer, MQTTPort);
//以下開始處理訂閱主題
MQTTClient.setCallback(MQTTCallback); //收到訂閱資料時,要處理MQTTCALLBACK
while (!MQTTClient.connected()) {
//以亂數為ClietID
String MQTTClientid = "esp32-" + String(random(1000000, 9999999));//建立一個郵差,為了要不一樣,所以使用亂數
if (MQTTClient.connect(MQTTClientid.c_str(), MQTTUser, MQTTPassword)) {
//連結成功,顯示「已連線」。
Serial.println("MQTT已連線");
//訂閱SubTopic1主題
MQTTClient.subscribe(MQTTSubTopic1);
MQTTClient.subscribe(MQTTSubTopic2);
} else {
//若連線不成功,則顯示錯誤訊息,並重新連線
Serial.print("MQTT連線失敗,狀態碼=");
Serial.println(MQTTClient.state());
Serial.println("五秒後重新連線");
delay(5000);
}
}
}
//接收到訂閱時
void MQTTCallback(char* topic, byte* payload, unsigned int length) {
Serial.print(topic); Serial.print("訂閱通知:");
String payloadString;//將接收的payload轉成字串
//顯示訂閱內容
for (int i = 0; i < length; i++) {
payloadString = payloadString + (char)payload[i];
}
Serial.println(payloadString);
//比對主題是否為訂閱主題1,若相同則執行動作的部分,需要注意payloadString內容的資料是否與app內的訊息相同。
if (strcmp(topic, MQTTSubTopic1) == 0) {
Serial.println("改變燈號:" + payloadString);
if (payloadString == "on") {
Serial.print("開啟燈號");
ws2812b_mainled=true;
//pixels.clear();
for (int i=0;i<NUMPIXELS;i++){
pixels.setPixelColor(i, pixels.Color(r, g, b));}
pixels.show();
}
if (payloadString == "off") {
Serial.print("關閉燈號");
ws2812b_mainled=false;
//pixels.clear();
for (int i=0;i<NUMPIXELS;i++){
pixels.setPixelColor(i, pixels.Color(0, 0, 0));}
pixels.show();
}
}
if (strcmp(topic, MQTTSubTopic2) == 0) {
r = strtol(payloadString.substring(1, 3).c_str(), NULL, 16);
g = strtol(payloadString.substring(3, 5).c_str(), NULL, 16);
b = strtol(payloadString.substring(5, 7).c_str(), NULL, 16);
for (int i = 0; i < NUMPIXELS; i++) {
pixels.setPixelColor(i, pixels.Color(r, g, b));
}
pixels.show();
}
}
Hex網頁色碼表&顏色代碼選擇器。
產生器:漸變彩字»
#000000 | #2F0000 | #600030 | #460046 | #28004D | |||||
#272727 | #4D0000 | #820041 | #5E005E | #3A006F | |||||
#3C3C3C | #600000 | #9F0050 | #750075 | #4B0091 | |||||
#4F4F4F | #750000 | #BF0060 | #930093 | #5B00AE | |||||
#5B5B5B | #930000 | #D9006C | #AE00AE | #6F00D2 | |||||
#6C6C6C | #AE0000 | #F00078 | #D200D2 | #8600FF | |||||
#7B7B7B | #CE0000 | #FF0080 | #E800E8 | #921AFF | |||||
#8E8E8E | #EA0000 | #FF359A | #FF00FF | #9F35FF | |||||
#9D9D9D | #FF0000 | #FF60AF | #FF44FF | #B15BFF | |||||
#ADADAD | #FF2D2D | #FF79BC | #FF77FF | #BE77FF | |||||
#BEBEBE | #FF5151 | #FF95CA | #FF8EFF | #CA8EFF | |||||
#D0D0D0 | #FF7575 | #FFAAD5 | #FFA6FF | #D3A4FF | |||||
#E0E0E0 | #FF9797 | #FFC1E0 | #FFBFFF | #DCB5FF | |||||
#F0F0F0 | #FFB5B5 | #FFD9EC | #FFD0FF | #E6CAFF | |||||
#FCFCFC | #FFD2D2 | #FFECF5 | #FFE6FF | #F1E1FF | |||||
#FFFFFF | #FFECEC | #FFF7FB | #FFF7FF | #FAF4FF | |||||
#000079 | #003060 | #003E3E | #006030 | #006000 | |||||
#000093 | #003D79 | #005757 | #01814A | #007500 | |||||
#0000C6 | #004B97 | #007979 | #019858 | #009100 | |||||
#0000C6 | #005AB5 | #009393 | #01B468 | #00A600 | |||||
#0000E3 | #0066CC | #00AEAE | #02C874 | #00BB00 | |||||
#2828FF | #0072E3 | #00CACA | #02DF82 | #00DB00 | |||||
#4A4AFF | #0080FF | #00E3E3 | #02F78E | #00EC00 | |||||
#6A6AFF | #2894FF | #00FFFF | #1AFD9C | #28FF28 | |||||
#7D7DFF | #46A3FF | #4DFFFF | #4EFEB3 | #53FF53 | |||||
#9393FF | #66B3FF | #80FFFF | #7AFEC6 | #79FF79 | |||||
#AAAAFF | #84C1FF | #A6FFFF | #96FED1 | #93FF93 | |||||
#B9B9FF | #97CBFF | #BBFFFF | #ADFEDC | #A6FFA6 | |||||
#CECEFF | #ACD6FF | #CAFFFF | #C1FFE4 | #BBFFBB | |||||
#DDDDFF | #C4E1FF | #D9FFFF | #D7FFEE | #CEFFCE | |||||
#ECECFF | #D2E9FF | #ECFFFF | #E8FFF5 | #DFFFDF | |||||
#FBFBFF | #ECF5FF | #FDFFFF | #FBFFFD | #F0FFF0 | |||||
#467500 | #424200 | #5B4B00 | #844200 | #642100 | |||||
#548C00 | #5B5B00 | #796400 | #9F5000 | #842B00 | |||||
#64A600 | #737300 | #977C00 | #BB5E00 | #A23400 | |||||
#73BF00 | #8C8C00 | #AE8F00 | #D26900 | #BB3D00 | |||||
#82D900 | #A6A600 | #C6A300 | #EA7500 | #D94600 | |||||
#8CEA00 | #C4C400 | #D9B300 | #FF8000 | #F75000 | |||||
#9AFF02 | #E1E100 | #EAC100 | #FF9224 | #FF5809 | |||||
#A8FF24 | #F9F900 | #FFD306 | #FFA042 | #FF8040 | |||||
#B7FF4A | #FFFF37 | #FFDC35 | #FFAF60 | #FF8F59 | |||||
#C2FF68 | #FFFF6F | #FFE153 | #FFBB77 | #FF9D6F | |||||
#CCFF80 | #FFFF93 | #FFE66F | #FFC78E | #FFAD86 | |||||
#D3FF93 | #FFFFAA | #FFED97 | #FFD1A4 | #FFBD9D | |||||
#DEFFAC | #FFFFB9 | #FFF0AC | #FFDCB9 | #FFCBB3 | |||||
#E8FFC4 | #FFFFCE | #FFF4C1 | #FFE4CA | #FFDAC8 | |||||
#EFFFD7 | #FFFFDF | #FFF8D7 | #FFEEDD | #FFE6D9 | |||||
#F5FFE8 | #FFFFF4 | #FFFCEC | #FFFAF4 | #FFF3EE | |||||
#613030 | #616130 | #336666 | #484891 | #6C3365 | |||||
#743A3A | #707038 | #3D7878 | #5151A2 | #7E3D76 | |||||
#804040 | #808040 | #408080 | #5A5AAD | #8F4586 | |||||
#984B4B | #949449 | #4F9D9D | #7373B9 | #9F4D95 | |||||
#AD5A5A | #A5A552 | #5CADAD | #8080C0 | #AE57A4 | |||||
#B87070 | #AFAF61 | #6FB7B7 | #9999CC | #B766AD | |||||
#C48888 | #B9B973 | #81C0C0 | #A6A6D2 | #C07AB8 | |||||
#CF9E9E | #C2C287 | #95CACA | #B8B8DC | #CA8EC2 | |||||
#D9B3B3 | #CDCD9A | #A3D1D1 | #C7C7E2 | #D2A2CC | |||||
#E1C4C4 | #D6D6AD | #B3D9D9 | #D8D8EB | #DAB1D5 | |||||
#EBD6D6 | #DEDEBE | #C4E1E1 | #E6E6F2 | #E2C2DE | |||||
#F2E6E6 | #E8E8D0 | #D1E9E9 | #F3F3FA | #EBD3E8 |
沒有留言:
張貼留言