乐鑫技术交流
直播中

bigbangboom

8年用户 1310经验值
擅长:电源/新能源
私信 关注
[问答]

有没有办法将espalexa和elegantOTA开始命令与网络服务器开始结合起来​​?

我正在运行最新的 Arduino IDE,所有板和库都已完全更新。我正在为 esp12E 板编程。
是否可以同时运行网络服务器、espalexa 和 elegantOTA?我正在尝试这样做,但是当我尝试访问 OTA 更新页面时,esp 崩溃并重新启动。标准网络服务器工作正常。alexa 控制也是如此。使事情复杂化的是,我还运行了一个 softAP,因此用户可以设置初始 wifi 凭据。这是我的代码片段。
在全球范围内
代码:全选//lots of other stuff.  The relevant pieces are listed here

#include
#include
#include
#include
#include
#include
#include  //https://github.com/ayushsharma82/ElegantOTA

//callback functions for alexa
void deviceOneChanged(uint8_t brightness);
void deviceTwoChanged(uint8_t brightness);
Espalexa espalexa;

//pointers for alexa devices
EspalexaDevice* d1;
EspalexaDevice* d2;

ESP8266WiFiMulti wifiMulti;
ESP8266WebServer server(80);
DNSServer dnsServer;


在无效设置()
代码:全选//lots of other stuff going on, but here is the relevant pieces.

//setup softAP
  WiFi.softAP(ap_SSID, ap_Password);
  dnsServer.start(53, "Settings.com", WiFi.softAPIP());

//setup wifi
  WiFi.disconnect(true);
  wifiMulti.addAP(SSID1, PW1);
  wifiMulti.addAP(SSID2, PW2);

//Setup Alexa
  d1 = new EspalexaDevice(A_Click_Device, deviceOneChanged);
  d2 = new EspalexaDevice(B_Click_Device, deviceTwoChanged);
  espalexa.addDevice(d1);
  espalexa.addDevice(d2);


  server.on("/", handleRoot);
  server.onNotFound([]() {
    if (!espalexa.handleAlexaApiCall(server.uri(), server.arg(0))) {
      server.send(404, "text/plain", "Not found");
    }
  });


//start servers
    ElegantOTA.begin(&server);
    espalexa.begin(&server);


在无效循环()
代码:全选//again.  lots of other code, but here are the relevant snipets.

    dnsServer.processNextRequest();
    server.handleClient();
    espalexa.loop();


我认为问题在于我正在尝试使用 (&server) 启动 espalexa.begin 和 ElegantOTA.begin。但我真的不确定。OTA 应该在 elegantOTA.begin(&server) 之后有一个 server.begin(),但 espalexa 说要消除它并用 espalexa.begin(&server) 替换它。有没有办法将 espalexa 和 elegantOTA 开始命令与网络服务器开始结合起来​​?

               


                        

回帖(1)

贾飞小

2024-1-4 14:28:25
对于同时运行网络服务器、Espalexa和ElegantOTA,建议您在代码中实现错误处理和调试输出来查找导致esp崩溃的错误。以下是几种可能的解决方案:

1. 逐一添加板和库:从头开始重新构建您的代码,逐一添加每个板和库,并在添加一个新功能后进行测试。这样可以确定哪些库或板之间可能存在冲突,并尝试解决这些冲突。

2. 将代码分解成模块:将代码分解成可重用模块,每个模块都处理不同的任务。这样可以更容易地跟踪和管理代码,并减少错误的可能性。

3. 添加调试输出:添加适当的调试输出来帮助您识别崩溃的原因。您可以使用Serial.print()和Serial.println()函数将输出发送到串口监视器。一旦您确定了问题所在,您可以采取相应措施来解决问题。

4. 使用watchdog定时器:当esp发生错误时,它可能会陷入死循环或无限循环。因此,使用watchdog定时器可以在错误发生时重新启动esp,从而避免它陷入死循环。您可以使用ESP.wdtEnable()和ESP.wdtDisable()函数启用和禁用watchdog定时器。

将espalexa和elegantOTA开始命令与网络服务器开始结合起来​​是可行的,但您需要确保代码正确,并进行适当的测试和调试。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分