arduino - arduino 网络服务器太慢 - 可能使用队列?

标签 arduino i2c esp8266

我使用运行网络服务器的 ESP8266 为 Livolo 灯开关实现了一个基本的灯 Controller ,并为使用 RF433 发射器的 livolo 开关找到了一个库。

我对这样的代码没有任何问题..(如果需要我可以发布它)网络服务器监听请求然后调用函数发送 rf433 信号(大约需要 2 秒 - 作为livolo 协议(protocol)基本上是对同一件事进行 100 次爆破)。

问题是 web 服务器/整个 arduino/esp8266 在发送 RF 信号时“阻塞”——长达 2 秒。

如果我只是让网络服务器监听,并说只是向串行调试器写入一个字符串,它的闪电般的速度..可以响应地每秒击打它多极数次。

通常这没问题,但是发送我正在使用的 Web 请求的家庭自动化系统不会等待。所以如果它连续发送 10 个请求(关闭所有灯),我的小 Web 服务器基本上无法跟上,因为 esp8266 正忙于进行 RF 广播,它落后了,然后发送请求的系统收到套接字错误。不幸的是,我无法更改发送的系统。

我尝试将其实现为基本的 FIFO 队列,但本质上还是发生了同样的问题。我想知道在两个 arudino (esp8266) 之间使用像 i2c 这样的总线来实现是否更好?一个 Web 服务器可以接收请求并将它们放入队列,另一个可以懒惰地读取队列并进行 RF 发送...

我想知道是否有人对 a) 这是正确的方法吗? b) 我应该在硬件之间使用什么总线。c) 远程队列读取实现的任何示例?

非常感谢任何想法。如果需要,我可以在网络服务器等上共享代码,但它是非常基本的 arudino esp8266 网络服务器实现,而那不是我真正被困住的地方。我想我对代码示例更感兴趣这表明一个硬件读取在另一个硬件上实现的队列是否有意义?

最佳答案

ESPAsyncWebServer正是为此目的而构建的——它异步处理所有 Web 请求,而且速度非常快。我可以每秒查询我的本地单位(以及无数生产单位)10-20 次,几天都没有问题。例如,我在主循环中查询交流电源数据,并通过 Web 服务器公开存储的数据。数据查询可以通过 UART 花费任意长的时间(通常约为 500 毫秒),但是,Web 请求将始终在它们进入后立即得到处理

让主循环运行 RF 逻辑,并将数据存储为全局(或等效),让 Web 服务器简单地将存储的值发送到客户端

关于arduino - arduino 网络服务器太慢 - 可能使用队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40041848/

相关文章:

c++ - 字符字符串数组的初始化程序中的问题

c - 使用 Linux 通过 I2C 读写 EEPROM

c++ - errnos在哪里定义的? i2c 的示例 linux c/c++ 程序

button - 在arduino中创建一个定时三态按钮

timestamp - 如何在Arduino-ESP8266中获得时间戳?

c - Arduino : toggling LED of digital pin中digitalWrite的解释

c++ - 在 arduino 上的类中使用 LiquidCrystal_I2C

linux - 如何在openwrt上自动启动nodejs应用程序 - Arduino Yun -

java - 如何通过 I2c 读取更多字节

mysql - 使用 DNS 和 WiFi 将 Arduino 连接到远程 MySQL 数据库