Преобразование уровня шим в текст и отправка в топик

Если речь про код который я опубликовал в теме и код, который сразу предложил @BOOM - то нет

А с кодом от @MMM тоже ничего?

только стандартное:

. Variables and constants in RAM (global, static), used 30184 / 80192 bytes (37%)
║ SEGMENT BYTES DESCRIPTION
╠══ DATA 1676 initialized variables
╠══ RODATA 2028 constants
╚══ BSS 26480 zeroed variables
. Instruction RAM (IRAM_ATTR, ICACHE_RAM_ATTR), used 61335 / 65536 bytes (93%)
║ SEGMENT BYTES DESCRIPTION
╠══ ICACHE 32768 reserved space for flash instruction cache
╚══ IRAM 28567 code in IRAM
. Code in flash (default, ICACHE_FLASH_ATTR), used 266292 / 1048576 bytes (25%)
║ SEGMENT BYTES DESCRIPTION
╚══ IROM 266292 code in flash

при ошибках он даже не даёт заливать

Речь не о ошибках, а о предупреждениях (warning)…

нет, никаких других сообщений/предупреждений не поступает

а мои варианты проверите ?

#include <ESP8266WiFi.h>
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
#include <time.h>
#include <PubSubClient.h>

//const char* ssid = "ххх"; // Имя точки доступа Wi-Fi
//const char* password = "ххх"; // Пароль от точки доступа

const char* ssid = "ххх"; // Имя 2-й точки доступа Wi-Fi
const char* password = "ххх"; // Пароль от 2-й точки доступа

const char* mqtt_server = "ххх"; // Имя сервера MQTT
const int mqtt_port = ххх; // Порт для подключения к серверу MQTT
const char* mqtt_clientId = "ххх"; // определяем ID
const char* mqtt_user = "ххх"; // Логин от сервера
const char* mqtt_pass = "ххх"; // Пароль от сервера

const char* mqttTopicDeviceStatus = "aqa/device/status"; // топик статуса устройства
const char* mqttTopicTime = "aqa/device/time"; // топик времени устройства
const char* mqttTopicBrightness = "aqa/light/channel"; // топик уровня яркости

const char* mqttDeviceStatusOn = "online"; // статус устройства
const char* mqttDeviceStatusOff = "offline"; // статус устройства
const int mqttDeviceStatusQos = 1;
const bool mqttDeviceStatusRetained = true;

const char* TZ_INFO = "MSK-6"; // Настройка часового пояса

struct LightSchedule {
int dawnStart = 360; // контрольная точка времени 6:00
int dawnEnd = 600; // контрольная точка времени 10:00
int duskStart = 960; // контрольная точка времени 16:00
int duskEnd = 1290; // контрольная точка времени 21:30
} schedule;

Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(); // подключение pca9685
WiFiClient espClient;
PubSubClient client(espClient);

unsigned long lastTimeMsg = 0;
unsigned long lastBrightMsg = 0;
int lastBrightness = -1;

void setup() {
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
Serial.begin(115200);
Wire.begin(4, 5);
pwm.begin();
pwm.setPWMFreq(1000);

WiFi.begin(ssid, password); // Подключение к WiFi
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi подключен");

configTime(TZ_INFO, "pool.ntp.org", "time.google.com"); // Настройка времени
client.setServer(mqtt_server, mqtt_port); // Настройка MQTT
}

void reconnect() {
while (!client.connected()) {
Serial.print("Попытка MQTT подключения...");
if (client.connect(mqtt_clientId, mqtt_user, mqtt_pass, mqttTopicDeviceStatus, mqttDeviceStatusQos, mqttDeviceStatusRetained, mqttDeviceStatusOff)) {
Serial.println("успешно");
client.publish(mqttTopicDeviceStatus, mqttDeviceStatusOn, mqttDeviceStatusRetained);
} else {
Serial.print("ошибка, rc=");
Serial.print(client.state());
Serial.println(" ждем 5 сек...");
delay(5000);
}
}
}

void loop() {
if (!client.connected()) reconnect();
client.loop();

time_t now = time(nullptr);
struct tm* t = localtime(&now);

if (t->tm_year < 70) return; // Ждем синхронизации

int currentMin = t->tm_hour * 60 + t->tm_min;
int brightness = 0;

if (currentMin >= schedule.dawnStart && currentMin < schedule.dawnEnd) { // Логика рассвета/заката
brightness = map(currentMin, schedule.dawnStart, schedule.dawnEnd, 0, 4095);
}
else if (currentMin >= schedule.dawnEnd && currentMin < schedule.duskStart) {
brightness = 4095;
}
else if (currentMin >= schedule.duskStart && currentMin < schedule.duskEnd) {
brightness = map(currentMin, schedule.duskStart, schedule.duskEnd, 4095, 0);
}
else {
brightness = 0;
}

for (int ch = 0; ch < 16; ch++) { // Применяем ко всем 16 каналам
pwm.setPWM(ch, 0, brightness);
}

unsigned long now_ms = millis();

if (now_ms - lastTimeMsg > 60000) { // Отправка времени в топик (раз в 60 секунд)
lastTimeMsg = now_ms;
char timeString[9];
strftime(timeString, sizeof(timeString), "%H:%M:%S", t);
client.publish(mqttTopicTime, timeString);
}

if (now_ms - lastBrightMsg > 5000) { // Отправка яркости в топик (раз в 5 секунд при изменении)
lastBrightMsg = now_ms;
if (brightness != lastBrightness) {
int brightnessPercent = map(brightness, 0, 4095, 0, 100); // преобразование в проценты (0-100)

// Используем статический буфер для MQTT сообщения
char payload[10];
snprintf(payload, sizeof(payload), "%d", brightnessPercent);

// Отправляем с retained флагом (может помочь приложению)
bool published = client.publish(mqttTopicBrightness, payload, true);

if (published) {
Serial.printf("Успешно отправлено: Яркость = %d%% (%d PWM)\n", brightnessPercent, brightness);
} else {
Serial.println("Ошибка отправки яркости по MQTT!");
}

Serial.printf("Время: %02d:%02d | Яркость: %d%% (%d PWM)\n",
t->tm_hour, t->tm_min, brightnessPercent, brightness);
lastBrightness = brightness;
}
}
}

и

#include <ESP8266WiFi.h>
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
#include <time.h>
#include <PubSubClient.h>

//const char* ssid = "ххх"; // Имя точки доступа Wi-Fi
//const char* password = "ххх"; // Пароль от точки доступа

const char* ssid = "ххх"; // Имя 2-й точки доступа Wi-Fi
const char* password = "ххх"; // Пароль от 2-й точки доступа

const char* mqtt_server = "ххх"; // Имя сервера MQTT
const int mqtt_port = ххх; // Порт для подключения к серверу MQTT
const char* mqtt_clientId = "ххх"; // определяем ID
const char* mqtt_user = "ххх"; // Логин от сервера
const char* mqtt_pass = "ххх"; // Пароль от сервера

const char* mqttTopicDeviceStatus = "aqa/device/status"; // топик статуса устройства
const char* mqttTopicTime = "aqa/device/time"; // топик времени устройства
const char* mqttTopicBrightness = "aqa/light/channel"; // топик уровня яркости

const char* mqttDeviceStatusOn = "online"; // статус устройства
const char* mqttDeviceStatusOff = "offline"; // статус устройства
const int mqttDeviceStatusQos = 1;
const bool mqttDeviceStatusRetained = true;

const char* TZ_INFO = "MSK-6"; // Настройка часового пояса

struct LightSchedule {
int dawnStart = 360; // контрольная точка времени 6:00
int dawnEnd = 600; // контрольная точка времени 10:00
int duskStart = 960; // контрольная точка времени 16:00
int duskEnd = 1290; // контрольная точка времени 21:30
} schedule;

Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(); // подключение pca9685
WiFiClient espClient;
PubSubClient client(espClient);

unsigned long lastTimeMsg = 0;
unsigned long lastBrightMsg = 0;
int lastBrightness = -1;

void setup() {
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
Serial.begin(115200);
Wire.begin(4, 5);
pwm.begin();
pwm.setPWMFreq(1000);

WiFi.begin(ssid, password); // Подключение к WiFi
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi подключен");

configTime(TZ_INFO, "pool.ntp.org", "time.google.com"); // Настройка времени
client.setServer(mqtt_server, mqtt_port); // Настройка MQTT
}

void reconnect() {
while (!client.connected()) {
Serial.print("Попытка MQTT подключения...");
if (client.connect(mqtt_clientId, mqtt_user, mqtt_pass, mqttTopicDeviceStatus, mqttDeviceStatusQos, mqttDeviceStatusRetained, mqttDeviceStatusOff)) {
Serial.println("успешно");
client.publish(mqttTopicDeviceStatus, mqttDeviceStatusOn, mqttDeviceStatusRetained);
} else {
Serial.print("ошибка, rc=");
Serial.print(client.state());
Serial.println(" ждем 5 сек...");
delay(5000);
}
}
}

void loop() {
if (!client.connected()) reconnect();
client.loop();

time_t now = time(nullptr);
struct tm* t = localtime(&now);

if (t->tm_year < 70) return; // Ждем синхронизации

int currentMin = t->tm_hour * 60 + t->tm_min;
int brightness = 0;

if (currentMin >= schedule.dawnStart && currentMin < schedule.dawnEnd) { // Логика рассвета/заката
brightness = map(currentMin, schedule.dawnStart, schedule.dawnEnd, 0, 4095);
}
else if (currentMin >= schedule.dawnEnd && currentMin < schedule.duskStart) {
brightness = 4095;
}
else if (currentMin >= schedule.duskStart && currentMin < schedule.duskEnd) {
brightness = map(currentMin, schedule.duskStart, schedule.duskEnd, 4095, 0);
}
else {
brightness = 0;
}

for (int ch = 0; ch < 16; ch++) { // Применяем ко всем 16 каналам
pwm.setPWM(ch, 0, brightness);
}

unsigned long now_ms = millis();

if (now_ms - lastTimeMsg > 60000) { // Отправка времени в топик (раз в 60 секунд)
lastTimeMsg = now_ms;
char timeString[9];
strftime(timeString, sizeof(timeString), "%H:%M:%S", t);
client.publish(mqttTopicTime, timeString);
}

if (now_ms - lastBrightMsg > 5000) { // Отправка яркости в топик (раз в 5 секунд при изменении)
lastBrightMsg = now_ms;
if (brightness != lastBrightness) {
int brightnessPercent = map(brightness, 0, 4095, 0, 100); // преобразование в проценты (0-100)

// Используем статическую String для MQTT сообщения
static String payload;
payload = String(brightnessPercent);

// Отправляем с retained флагом
bool published = client.publish(mqttTopicBrightness, payload.c_str(), true);

if (published) {
Serial.printf("Успешно отправлено: Яркость = %d%% (%d PWM)\n", brightnessPercent, brightness);
} else {
Serial.println("Ошибка отправки яркости по MQTT!");
}

Serial.printf("Время: %02d:%02d | Яркость: %d%% (%d PWM)\n",
t->tm_hour, t->tm_min, brightnessPercent, brightness);
lastBrightness = brightness;
}
}
}

я могу, тыщььь за 30-ть

3 лайка

я нищий, нет бабла))) заказов тоже нет, ну разве что за еду, но если сработает, я думаю мы найдем причину!

Конечно могу. Вы ж мне помогли год назад:

Цену видели )))

P.S. оба работают.

Я не жадный.

спс, честно говоря не помню вас, богатым будите!)))

а тему припоминая, там этот код кто то лучше меня написал, и я его еще себе подрезал)))