• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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. Если ставить значение принудительно лента работает.
 
Сверху Снизу