Address strip WS2812B: различия между версиями

Нет описания правки
Строка 392: Строка 392:
   pubSubClient.setServer(MODBUS_SERVER, MODBUS_PORT);
   pubSubClient.setServer(MODBUS_SERVER, MODBUS_PORT);
   pubSubClient.setCallback(modbusCallback);
   pubSubClient.setCallback(modbusCallback);
  pubSubClient.publish("outTopic", "hello world");
  pubSubClient.subscribe("inTopic");
}
}


Строка 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, а также подписаться на топики
<syntaxhighlight lang="c++">
void setupModbus() {
  pubSubClient.setServer(MODBUS_SERVER, MODBUS_PORT);
  pubSubClient.setCallback(modbusCallback);
  pubSubClient.subscribe("/devices/ws2812b/controls/brightness");
  pubSubClient.subscribe("/devices/ws2812b/controls/hueLoop");
}
</syntaxhighlight>
 
теперь надо константу BRIGHTNESS переделать в переменную, а также ввести переменную hue_loop:
<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 == "/devices/ws2812b/controls/brightness") {
   if (strcmp(topic, "/devices/ws2812b/controls/brightness") == 0) {
     BRIGHTNESS = payloadStr.toInt();
     BRIGHTNESS = payloadStr.toInt();
    Serial.printf("brithness set to %d\n", BRIGHTNESS);
   }
   }
   if (topic == "/devices/ws2812b/controls/hueLoop") {
   if (strcmp(topic, "/devices/ws2812b/controls/hueLoop") == 0) {
     if(payloadChar == "true") {
     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);
    }
  }
}
}


123

правки