首页 > 解决方案 > 将 Arduino 草图重构为 C++ 类

问题描述

我正在尝试将此 Arduino 草图转换为 C++ 类。头文件,"WifiManager.h"定义为

class WifiManager
{
  public:
    // TODO: Use a singleton pattern https://stackoverflow.com/a/1008289
    WifiManager();
    void run();
    bool isConnected();
    char *getIpAddress();
    virtual ~WifiManager();

  private:

};

并在 a 中实现WifiManager.cpp,其完整代码实现可在此处访问。简而言之,该.cpp文件实现了.h的 API,还处理了 WIFI 回调函数。至于测试,我假设如果我按如下方式运行程序,回调函数将被自动调用:

#include <Arduino.h>
#include "WifiManager.h"
WifiManager *wifi;
void setup()
{
    Serial.begin(115200);
    wifi = new WifiManager();
}

void loop()
{
    delay(1000);
}

但是,这不起作用。似乎所有与 WIFI 相关的回调根本不运行。但是,作为 C++ 初学者,我不知道如何解决这个问题。因此,我想知道解决此问题的最佳方法是什么。

标签: c++arduinoesp32

解决方案


我想你需要打电话WiFi.begin。您在 中调用了它onWhenWifiOnDisconnects(),但即使触发了断开连接事件,您也仅在调用 . 之后在构造函数中注册了事件处理程序WiFi.disconnect(true)

因此,为了澄清这一点,您的代码现在做了什么:

  1. 在你调用的构造函数中WiFi.disconnect(true)

  2. 断开连接事件被触发,但没有人处理它

  3. 您注册了事件处理程序,然后什么也没有发生

您应该调用WiFi.begin构造函数或显式调用的单独成员函数,而不是(仅)在onWhenWifiOnDisconnects().


推荐阅读