将Arduino草图重构为C ++类

时间:2018-06-18 08:12:14

标签: c++ arduino esp32

我正在尝试将this Arduino sketch转换为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:

};

并在WifiManager.cpp中实施,其完整代码实现为accessible here。简而言之,.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 ++初学者。因此,我想知道解决这个问题的最佳方法是什么。

1 个答案:

答案 0 :(得分:1)

我认为您需要致电WiFi.begin。您在onWhenWifiOnDisconnects()中调用了它,但即使触发了disconnect事件,您也只能在调用WiFi.disconnect(true)之后在构造函数中注册事件处理程序。

为了清楚这一点,你的代码现在做了什么:

  1. 在构造函数中,您调用WiFi.disconnect(true)

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

  3. 您注册了事件处理程序,然后没有任何反应

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