【问题标题】:Wifi from my esp32 M5 StickC plus does not work我的 esp32 M5 StickC plus 的 Wifi 不工作
【发布时间】:2021-06-13 09:55:17
【问题描述】:

我正在尝试使用我的 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.

我错过了什么?

【问题讨论】:

    标签: c++ arduino esp32 platformio


    【解决方案1】:

    采用两个参数(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&lt;char*&gt;(WIFI_SSID),但是,恕我直言,这是一种不太理想的方法——该参数将被定义为非常量是有原因的,即使这个原因并不明显!

    【讨论】:

    • 感谢您的回复!代码编译但我仍然收到此错误:[E][esp32-hal-cpu.c:93] addApbChangeCallback(): duplicate func=400EAB58 arg=3FFBF018 in the serial terminal。代码不会比 wifi.begin 执行得更远
    • @HealthyDev 我认为您应该将该问题作为一个新的单独问题发布。它可能相关,但我看不到明显链接。
    猜你喜欢
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    • 2022-07-11
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    • 2016-08-28
    相关资源
    最近更新 更多