我实际上正在学习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属性来实例化其他类。我该怎么办?
答案 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的早期版本。