ESP32 | Как назначить строку для указателя на символ? - PullRequest
0 голосов
/ 03 февраля 2020

Я на самом деле изучаю ESP32, его функции и API.

Моя цель с этой программой в основном: проверить некоторые знания и методы, которые я уже разработал, и попробовать, впервые, IoT application.

Итак, у меня есть класс myMQTT, он имеет два свойства структур (NETWORK и MQTT):

class myMQTT{
  public:

  struct NETWORK
  {
    char *SSID, *PASSWORD, *IP;
  } NETWORK;

  struct MQTT
  {
    char *SEVER, *TOPIC, *USER, *PASSWORD;
    int PORT;
  } MQTT;

  myMQTT(){}

  void CONNECT(){

   }

};

Как видите, структуры дают мне указатели, которые я ' Я хотел бы указать на строки, например:

void MQTTConnect(){

  myMQTT CONNECTION;

  CONNECTION.NETWORK.SSID = "SSID";  
  CONNECTION.NETWORK.PASSWORD = "1234";

  CONNECTION.MQTT.SEVER = "MQTT_SEVER";
  CONNECTION.MQTT.PORT = 1234;

  CONNECTION.MQTT.USER = "ESP32 | USER";
  CONNECTION.MQTT.PASSWORD = "ESP32 | PASS";
  CONNECTION.MQTT.TOPIC = "TEST";

  CONNECTION.CONNECT();

}

Но компилятор выдает мне следующее предупреждение:

ISO C ++ запрещает преобразование строковой константы в 'char *' [- Wwrite-strings]

В примерах для inte rnet люди обычно кодируют MQTT-соединение, используя библиотеки Wifi.h и PubSubClient.h, передавая указатели в качестве аргументов методам классов:

#include <WiFi.h>
#include <PubSubClient.h>

// Replace the next variables with your SSID/Password combination
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

// Add your MQTT Broker IP address, example:
//const char* mqtt_server = "192.168.1.144";
const char* mqtt_server = "YOUR_MQTT_BROKER_IP_ADDRESS";

WiFiClient espClient;
PubSubClient client(espClient);

//CODE...

WiFi.begin(ssid, password);
client.setServer(mqtt_server, 1883);

//CODE...

Ссылка: https://randomnerdtutorials.com/esp32-mqtt-publish-subscribe-arduino-ide/

Я уже пытался использовать массивы символов и строки (декларация Arduino).

Я бы нравится использовать свойства struct моего класса для создания экземпляров других классов. Как я мог это сделать?

1 Ответ

0 голосов
/ 03 февраля 2020

Вы все делаете правильно, но из-за ошибки в Arduino Builder в IDE 1.8.11 используется неверная библиотека. Вместо библиотеки ESP32 WiFi используется старая библиотека Arduino WiFi. В этой библиотеке параметры в WiFi.begin имеют тип char*. Это не было проблемой, в то время как преобразование из const char* в char* было сообщено только как предупреждение. Но в пакетах espboards это ошибка.

Решение - установить предыдущую версию Arduino IDE 1.8.10 или 1.8.9.

...