将 Arduino 草图重构为 C++ 类

Refactoring an Arduino sketch into a C++ class

本文关键字:C++ 重构 Arduino      更新时间:2023-10-16

我正在尝试将这个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:
};

并在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++初学者。因此,我想知道解决此问题的最佳方法是什么。

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

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

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

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

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

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