【问题标题】:Refactoring an Arduino sketch into a C++ class将 Arduino 草图重构为 C++ 类
【发布时间】:2018-06-18 08:12:13
【问题描述】:

我正在尝试将 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++ 初学者,我不知道如何解决这个问题。因此,我想知道解决此问题的最佳方法是什么。

【问题讨论】:

  • 另问:forum.arduino.cc/index.php?topic=553734 如果您打算这样做,请考虑周到添加指向您交叉发布的其他地方的链接。这将使我们避免因重复工作而浪费时间,并帮助有相同问题并找到您的帖子的其他人发现所有相关信息。
  • 所有相关信息都必须在帖子内,而不是在链接后面。

标签: c++ arduino esp32


【解决方案1】:

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

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

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

  2. Disconnect 事件被触发,但没有人处理它

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

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

【讨论】:

  • 感谢您的回复。在我的代码中,当 wifi 断开连接时,我已经调用了 WiFi.begin(APP_WIFI_STA_SSID, APP_WIFI_STA_PASS)。另外,您能否通过在构造函数中注册事件处理程序来进一步解释您的意思?您的意思是在构造函数中添加WiFi.onEvent(WiFiEvent); 吗?我刚试了,好像也不行。
  • 我的意思是描述你已经做过的事实。我将改写为过去时。
  • 非常感谢!回到我的董事会后,我会尽快尝试您的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-22
  • 1970-01-01
  • 1970-01-01
  • 2013-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多