繁体   English   中英

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

[英]ESP32 | How to assign a string to a char pointer?

我实际上是在学习 ESP32、它的功能和 API。

我对这个程序的目标基本上是:测试我已经开发的一些知识和技术,并首次尝试物联网应用程序。

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

在互联网上的示例中,人们通常使用库 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/

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

我想使用我的类的结构属性来实例化其他类。 我怎么能那样做?

你做的一切权利,但由于一个bug在Arduino的建设者IDE 1.8.11使用了错误的库。 它没有使用 ESP32 WiFi 库,而是使用旧的 Arduino WiFi 库。 在这个库中, WiFi.begin的参数具有char*类型。 const char*char*的转换仅作为警告报告,这不是问题。 但是在 esp 板包中这是一个错误。

解决方法是安装之前版本的 Arduino IDE 1.8.10 或 1.8.9。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM