@PatriotSY

Почему не работает с char[]?

struct MqttConfig {
    char host[50] = "192.168.1.94";
    unsigned short port = 1883;
    char user[10] = "mqtt";
    char password[20] = "password";
    char client[20] = "LightController";
};

MqttConfig mqttConfig;
WiFiClient espClient;
PubSubClient mqttClient(espClient);
mqttClient.setServer(mqttConfig.host, configmqttConfig.port);


Но mqtt библиотека не подключается (да, там дальше вызов mqttClient.connect, это для компактности). Методом тыка, понял, что дело в mqttConfig.host, если его заменить (и остальные user/password) на явные: mqttClient.setServer("192.168.1.94", 1883); то все работает.

Почему так происходит и как быть? Если выводить Serial.println(mqttConfig.host); то там тот же хост, что и указан. В общем, я в тупике. Структура мне нужна чтобы хранить настройки в EEPROM.
  • Вопрос задан
  • 152 просмотра
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
В коде какой-то ошибки не вижу. Скорее всего вы уже пытаетесь эту структуру засунуть в EEPROM и из-за этого что-то не работает.

Это же c++, судя по тегам? Сделайте тогда все поля структуры static const и не заводите ее экземпляр. Обращайтесь к константам так: MqttConfig::host. Константы обычно задают так, а не значениями по умолчанию полей структуры.

А скорее всего, ошибка вообще не тут. Вы что-то напутали где-то. Может, в коде опечатка и порт не тот в структуре указан. Или что-то еще. Соберите работающую программу, выведите аккуратно все параметры. И так же выведите все параметры в неработающей программе со структурой. И выведите все коды ошибок всех функций, что бы точно знать, какая из них ломается.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы