我的 esp32 M5 StickC plus 的 Wifi 不工作

Wifi from my esp32 M5 StickC plus does not work

我正在尝试使用我的 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 变量重新声明为这样的数组并使用 copy 对其进行初始化字符串文字。 (您也可以对 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) 但是,恕我直言,这是一种不太理想的方法——该参数将出于某种原因被定义为非常量,即使这个原因并不明显!