@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.
  • Вопрос задан
  • 128 просмотров
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
В коде какой-то ошибки не вижу. Скорее всего вы уже пытаетесь эту структуру засунуть в EEPROM и из-за этого что-то не работает.

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

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

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

Войти через центр авторизации
Похожие вопросы