sega6548
New member
Всем привет, имею вот такой код,в котором получаю значения 0 - 1024 по mqtt данные приходят и пытаясь их подсунуть в шим лед ленты выдает ошибка о конвертации, подскажите как правильно конвертировать значения из топика в значения шим, скетч не ругался только на int stled = strPayload.toInt(); но тогда возникает другая проблема, при получении топика выше 1000 и последующем получении топика ниже 1000, например 900 эта строчка как бы оставляет лишний знак, тоесть пришло например 1021 все отлично, лента почти погасла, потом пришло например 805 а на шим конвертируется 8051 тоесть добавляется последний знак четырех значного топика, и все до перезагрузки, вот код
Код:
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
const char *ssid = "Rostelecom_Inactivated"; //название сети
const char *password = "*******"; //пароль сети
const char *mqtt_server = "192.168.1.2"; //адрес mqtt брокера
WiFiClient espClient; //инициализация вифи
PubSubClient client(espClient); //инициализация mqtt клиента
#define REDPIN 15
#define BUFFER_SIZE 100
#define FADESPEED 2
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);
String strPayload = String((char*)payload);
if (strTopic == "ESP03/led")
{
int stled = strPayload.toInt(); // оставляет последний знак от 4-х значного топика
analogWrite(REDPIN, stled);
Serial.print(stled);
}
}
void setup() {
pinMode(REDPIN, OUTPUT);
Serial.begin(115200);
}
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(); // то запускаем цикл получения топиков)))
}
}
}