ESP32 |如何将字符串分配给char指针?

时间:2020-02-03 00:45:23

标签: c++ pointers esp32

我实际上正在学习ESP32,其功能和API。

这个程序的主要目的是:测试我已经开发的一些知识和技术,并首次尝试使用IoT应用程序。

因此,我有一个名为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]

在Internet上的示例中,人们通常使用库Wifi.h和PubSubClient.h对MQTT连接进行编码,并将指针作为参数传递给类方法:

#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/

我已经尝试使用char数组和字符串(Arduino声明)。

我想使用类的struct属性来实例化其他类。我该怎么办?

1 个答案:

答案 0 :(得分:1)

您所做的一切都正确,但是由于IDE 1.8.11中Arduino Builder中的a bug,所以使用了错误的库。它使用旧的Arduino WiFi库代替ESP32 WiFi库。在该库中,WiFi.begin中的参数的类型为char*。从const char*char*的转换仅被报告为警告,这不是问题。但是在esp板包装中,这是一个错误。

解决方案是安装Arduino IDE 1.8.10或1.8.9的早期版本。