如何解决我的 esp32 M5 StickC plus 的 Wifi 无法使用
我正在尝试使用 M5StickCPlus 连接到我的 wifi。我使用platformIO框架。我收到此错误:错误:编译时从 'const char*' 到 'char*' 的无效转换。
代码如下:
#include "M5StickCPlus.h"
#include <WiFi.h>
const char* WIFI_SSID = "router";
const char* WIFI_PASS = "pass";
void setup() {
M5.begin(true,true,true);
Serial.printf("Connecting to %s ",WIFI_SSID);
WiFi.begin(WIFI_SSID,WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("CONNECTED");
}
我还尝试使用 #define 声明 SSID 和密码。但是,我遇到了另一个错误:addApbChangeCallback(): duplicate func=400EAB44 arg=3FFBF008 during execution.
我错过了什么?
解决方法
采用两个参数(一个 SSID 和一个密码)的 WiFi.begin()
函数重载要求第一个参数是一个 非常量 char*
指针(即指向一个可能可修改的 char
数组,即使函数实际上并没有改变它)。
解决此问题的一个简单方法(类似于 example given in the documentation)是将您的 WIFI_SSID
变量重新声明为这样的数组,并使用字符串文字的副本对其进行初始化。 (您也可以对 WIFI_PASS
参数执行相同操作,但这不是必需,因为 begin()
的第二个参数是 const char*
。):
char WIFI_SSID[] = "router"; // Change to a non-const char array
const char* WIFI_PASS = "pass"; // You can leave this one as-is
注意:该 begin()
重载的声明,如 this GitHub repo,是:
int begin(char* ssid,const char *passphrase);
在 C++ 中不允许从 const
指针隐式转换为非常量指针;您可以在当前定义中使用 const_cast<char*>(WIFI_SSID)
但是,恕我直言,这是一种不太理想的方法 - 出于某种原因,该参数将被定义为非常量,即使该原因是不明显!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。