arudino web服务器太慢 - 可能使用队列?

时间:2016-10-14 11:16:51

标签: arduino i2c esp8266

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

我没有任何代码问题..(并且我可以发布它,如果需要)Web​​服务器侦听请求然后调用函数发送rf433信号(大约需要2秒 - 作为livolo协议基本上是爆炸100次)。

问题是网络服务器/整个arduino / esp8266'阻止'它正在发送射频信号 - 最多2秒钟。

如果我只是让网络服务器正在监听,并且只是向串口调试器写出一个字符串,那么它的闪电速度很快就可以在一秒钟内多次击中它。

通常情况下这是可以的,但发送我正在使用的网络请求的家庭自动化系统不会等待...所以如果它发送连续发出10个请求(关闭所有指示灯),我的小网络服务器基本上无法跟上esp8266忙于做RF广播,它落后,然后系统发送requets明星得到套接字错误..我不能改变发送不幸的系统。

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

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

任何想法非常感谢..我可以共享代码重新Web服务器等,如果需要,但它非常基本的arudino esp8266 Web服务器实现,这不是我真的卡住了...我想我更感兴趣的代码示例如果有意义的话,它会显示一个硬件读取在另一个上实现的队列?

2 个答案:

答案 0 :(得分:2)

ESPAsyncWebServer正是为此目的而构建的 - 它以异步方式非常快速地处理所有Web请求。我可以每天10-20次查询我的本地单位(以及无数的生产单位),无需日期和日期。我例如在主循环中查询AC电源数据,并通过Web服务器公开存储的数据。对数据的查询可以根据需要通过UART(通常~500ms),但是,Web请求将始终在它们进入时提供

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

答案 1 :(得分:1)

我可以想到两个解决方案

1)Interupts

Interupts允许Arduino在不停止程序的情况下运行阻止代码。建议检查出来。但我担心arduino可能没有足够的处理能力和内存来处理服务器和执行命令

2)两个设备(有中断!)

通过i2c总线连接两个Arduinos。第一个将侦听传入的Web请求,然后与第二个进行通信以执行给定的命令(通过i2c总线)。 第二个将使用interupts来监听传入的命令。中断将每个命令添加到队列中,程序的主循环将执行最新的命令。