• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ESP8266 led диммер через MQTT

Near

New member
Всем привет!
Принимайте новичка. ))
Я еще только учусь как работатьc esp, но уже удалось подключить rgb ленту и сделать для нее эффекты. Теперь возникла необходимость подключить диммеры к светодиодным лентам на кухни и связать в homebtidge.
На одном сайте нашел инструкцию и код для ардуино. Код был сырой и чтобы скомпилился я его немного подправил но все равно лента не работает (я так понимаю не приходит сигнал от брокера)
Вот код

Код:
#include <ESP8266WiFi.h>
#include <PubSubClient.h>

const char *ssid =  "*****";  //название сети
const char *password =  "*****";            //пароль сети
const char *mqtt_server = "192.168.1.***";       //адрес mqtt брокера (RaspberryPi)

WiFiClient espClient;           //инициализация WIFI
PubSubClient client(espClient); //инициализация mqtt клиента

#define LEDPIN 12 // D6 на wemos.

 // функция получения топиков от брокера
void callback(char* topic, byte* payload, unsigned int length)
{
  Serial.println();
  Serial.print(topic);   // выводим в сериал порт название топика
  Serial.print(" => ");
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
  } // выводим в сериал порт значение полученных данных

  String strTopic = String(topic); //получаем название топика
 
  if (strTopic == "ESP03/led") //проверяем из нужного ли топика пришли данные
  {
    payload[length] = 0; //чистим от мусора, длинна строки
    String strPayload = String((char*)payload);  //считываем значение топика //конвертируем для шим
    int stled = map(strPayload.toInt(), 0, 100, 0, 1023); //приводим значение 0-100 в значение 0-1023
    digitalWrite(LEDPIN, stled); //устанавливаем уровень шим сигнала
    Serial.print(" => ");
    Serial.print(stled);  // для отладки
  }
}

void setup() {
  pinMode(LEDPIN, OUTPUT); //устанвливаем ка выход
  Serial.begin(115200);
  //digitalWrite(LEDPIN, HIGH);
}

void loop() {

  if (WiFi.status() != WL_CONNECTED) //если нет подключения к вифи
  {
    WiFi.begin(ssid, password); //конектимся
    if (WiFi.waitForConnectResult() != WL_CONNECTED)
      return; //если не получилось то повторяем
  }
  if (WiFi.status() == WL_CONNECTED) //если подключились
  {
    if (!client.connected()) //если нет mqtt
    { // то подключаемся к mqtt
      client.setServer(mqtt_server, 1883);
      client.setCallback(callback);
      client.connect("ESP03led");        //id клиента(должно быть уникальным в сети)
      client.subscribe("ESP03/led");     //подписываемся на топик
    }
    if (client.connected()) {   // если подключились
      client.loop();            // то запускаем цикл получения топиков)))
    }
  }
}
Подскажите пожалуйста, что я делаю не так?

PS подключение ленты через IRF520. Если ставить значение принудительно лента работает.
 
Сверху Снизу