Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino arudino web服务器太慢-可能使用队列?_Arduino_I2c_Esp8266 - Fatal编程技术网

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

Arduino arudino web服务器太慢-可能使用队列?,arduino,i2c,esp8266,Arduino,I2c,Esp8266,我使用运行web服务器的ESP8266和我为使用RF433发射机的Livolo交换机找到的库为Livolo交换机实现了一个基本的灯光控制器 我对代码本身没有任何问题。。(如果需要,我可以发布它)web服务器侦听请求,然后调用函数发送rf433信号(大约需要2秒钟——因为livolo协议基本上是100次发送相同的内容) 问题是web服务器/整个arduino/esp8266在发送射频信号时“阻塞”,持续时间长达2秒 如果我只是让web服务器监听,然后说只是向串行调试器写出一个字符串,那么它的速度会

我使用运行web服务器的ESP8266和我为使用RF433发射机的Livolo交换机找到的库为Livolo交换机实现了一个基本的灯光控制器

我对代码本身没有任何问题。。(如果需要,我可以发布它)web服务器侦听请求,然后调用函数发送rf433信号(大约需要2秒钟——因为livolo协议基本上是100次发送相同的内容)

问题是web服务器/整个arduino/esp8266在发送射频信号时“阻塞”,持续时间长达2秒

如果我只是让web服务器监听,然后说只是向串行调试器写出一个字符串,那么它的速度会非常快。。一秒钟能击中它多极多次

正常情况下,这是可以的,但发送我正在处理的web请求的家庭自动化系统不会等待。。因此,如果它连续发送10个请求(关闭所有灯),我的小web服务器基本上跟不上,因为esp8266正在忙着做射频广播,它落后了,然后发送请求的系统出现了插座错误。。我无法更改发送消息的系统

我尝试实现基本的FIFO队列,但本质上相同的问题也发生了。我想知道是否最好实现两个arudino(esp8266),中间有i2c这样的总线?一个web服务器可以接收请求并将其放入队列,另一个可以惰性地读取队列并执行RF发送

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

非常感谢你的任何想法。。如果需要的话,我可以在web服务器上共享代码等,但它是相当基本的arudino esp8266 web服务器实现,这并不是我真正需要解决的问题。。我想我更感兴趣的是一个代码示例,它显示了一个硬件读取另一个硬件上实现的队列,如果这有意义的话?

我可以想出两种解决方案 1) 打断 允许Arduino在不停止程序的情况下运行阻塞代码。我建议你检查一下。然而,我担心arduino可能没有足够的处理能力和内存来处理管理服务器和执行命令

2) 两台设备(带中断!) 通过i2c总线连接两个Arduinos。第一个将侦听传入的web请求,然后与第二个通信以执行给定的命令(通过i2c总线)。 第二种方法是使用中断来监听传入的命令。中断会将每个命令添加到队列中,程序的主循环将执行最新的命令。

正是为此目的而构建的-它异步处理所有web请求,速度非常快。我可以每秒查询我的本地单位(以及无数生产单位)10-20次,连续几天没有问题。例如,我在主循环中查询交流电源数据,并通过web服务器公开存储的数据。通过UART对数据的查询可能需要多长时间(通常约500毫秒),但是,web请求一进来就会得到服务


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

您可能可以使用gpio转接板以不占用esp的方式处理RF发送,但第二个esp(尤其是01)将更便宜,并且工作得很好:a“双核“设计。谢谢你的建议。”。。是的,我开始在i2c上减少2个芯片。这听起来正是我想要的。。我会查出来的,谢谢!谢谢,我开始使用i2c、一个主设备和另一个从设备来检查2个esp8266,然后才知道esp8266不可能是从设备。。所以使用Arduino nano作为从设备,然后在两个设备之间传输数据。。我想我会尝试下面建议的ESPAsyncWebServer,如果可以的话,问题就在一个芯片上解决了。。如果没有,则看起来像是2个带i2c的芯片,或者等待Esp32解决所有这些问题:)