Address strip WS2812B: различия между версиями
Строка 392: | Строка 392: | ||
pubSubClient.setServer(MODBUS_SERVER, MODBUS_PORT); | pubSubClient.setServer(MODBUS_SERVER, MODBUS_PORT); | ||
pubSubClient.setCallback(modbusCallback); | pubSubClient.setCallback(modbusCallback); | ||
} | } | ||
Строка 406: | Строка 404: | ||
if (pubSubClient.connect(clientId.c_str())) { | if (pubSubClient.connect(clientId.c_str())) { | ||
Serial.println("connected"); | Serial.println("connected"); | ||
pubSubClient.publish("outTopic", "hello world"); | |||
pubSubClient.subscribe("inTopic"); | |||
} else { | } else { | ||
Serial.print("failed, rc="); | Serial.print("failed, rc="); | ||
Строка 477: | Строка 477: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
теперь надо константу BRIGHTNESS переделать в переменную, ввести переменную hue_loop, а также подписаться на топики | |||
теперь надо константу BRIGHTNESS переделать в переменную, | |||
<syntaxhighlight lang="c++"> | <syntaxhighlight lang="c++"> | ||
#define BRIGHTNESS 50 | #define BRIGHTNESS 50 | ||
Строка 495: | Строка 485: | ||
void modbusCallback(char* topic, byte* payload, unsigned int length) { | void modbusCallback(char* topic, byte* payload, unsigned int length) { | ||
char payloadChar[sizeof(payload)]; | char payloadChar[sizeof(payload)]; | ||
Serial.print("Message arrived ["); | Serial.print("Message arrived ["); | ||
Serial.print(topic); | Serial.print(topic); | ||
Строка 506: | Строка 495: | ||
String payloadStr = String(payloadChar); | String payloadStr = String(payloadChar); | ||
payloadStr.trim(); | |||
if (topic | if (strcmp(topic, "/devices/ws2812b/controls/brightness") == 0) { | ||
BRIGHTNESS = payloadStr.toInt(); | BRIGHTNESS = payloadStr.toInt(); | ||
Serial.printf("brithness set to %d\n", BRIGHTNESS); | |||
} | } | ||
if (topic | if (strcmp(topic, "/devices/ws2812b/controls/hueLoop") == 0) { | ||
if( | if(payloadStr.toInt() == 1) { | ||
hueLoop = true; | hueLoop = true; | ||
} else { | } else { | ||
Строка 522: | Строка 513: | ||
if(!hueLoop) { | if(!hueLoop) { | ||
return; | return; | ||
} | } | ||
... | ... | ||
} | |||
void modbusReconnect() { | |||
// Loop until we're reconnected | |||
while (!pubSubClient.connected()) { | |||
Serial.print("Attempting MQTT connection..."); | |||
// Create a random client ID | |||
String clientId = "ESP32Client-"; | |||
clientId += String(random(0xffff), HEX); | |||
// Attempt to connect | |||
if (pubSubClient.connect(clientId.c_str())) { | |||
Serial.println("connected"); | |||
pubSubClient.subscribe("/devices/ws2812b/controls/brightness"); | |||
pubSubClient.subscribe("/devices/ws2812b/controls/hueLoop"); | |||
} else { | |||
Serial.print("failed, rc="); | |||
Serial.print(pubSubClient.state()); | |||
Serial.println(" try again in 5 seconds"); | |||
// Wait 5 seconds before retrying | |||
delay(5000); | |||
} | |||
} | |||
} | } | ||