我正在尝试用我的M5StickCPlus连接我的无线网络。我使用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():在执行过程中复制func=400EAB44 arg=3FFBF008。
我错过了什么?
发布于 2021-06-13 01:23:09
接受两个参数( SSID和密码)的WiFi.begin()函数重载要求第一个参数是一个非const char*指针(即指向潜在可修改的char数组的指针,即使该函数实际上没有对其进行更改)。
解决这个问题的一个简单方法(类似于文档中给出的示例)是将您的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()重载,如在这个GitHub回购中,是:
int begin(char* ssid, const char *passphrase);从const指针到非const指针的隐式转换在C++中是不允许的;您可以在当前定义中使用const_cast<char*>(WIFI_SSID),但是,IMHO,这是一种不太理想的方法--这个参数被定义为非const是有原因的,即使这个原因并不明显!
https://stackoverflow.com/questions/67953956
复制相似问题