如何在ESP8266模块中创建自己的自定义AT命令?

问题描述:

首先我会告诉你我在做什么:如何在ESP8266模块中创建自己的自定义AT命令?

我的项目包括一个设备,它将充当其他设备可以连接的AP服务器(接入点和服务器),并通过UDP共享某些状态消息到AP服务器。但是,附近的设备数量会非常多,可能会超过100个,并且它们都会尝试同时连接到AP服务器。

作为AP服务器,我使用的是ESP8266。由于我们知道ESP8266模块在连接客户端设备时有限制(最多4〜5个客户端可以一次连接),我的第一个问题是如何将多个客户端连接到AP服务器,共享一些消息,然后断开连接允许其他客户。

对于这个问题,我想如果我可以使用deAuth()断开AP本身的客户端,一旦消息被共享,我可以允许其他客户端连接。但是没有AT命令强制客户端通过deAuth或通过任何其他模式进行断开连接。这带来了我的主要问题,如何在ESP模块中创建自定义AT命令?

感谢

编辑 要解释的情况下多一点,该ESP装置将被放置在店内。进入SHOP的用户将通过他们的移动应用程序自动连接到ESP模块并共享一些数据。因为随机数量的用户可能会来到商店,并且如果我没有断开他们与ESP的连接,其他用户将无法共享信息。

+1

看到这个http://www.verelec.nl/?page_id=557 – Sma

那么,你的根本问题是,你想连接100个设备到你的ESP8266,它一次只能处理4个(来源:http://espressif.com/sites/default/files/documentation/2c-esp8266_non_os_sdk_api_reference_en.pdf,第151页)。解决问题的两种方法:改变策略,例如只有每一个客户端连接到您的AP,其中有另一个100的所有结果,或让它们一个接一个地连接。请注意,连接,发送数据和断开连接每台设备大约需要5秒钟(乐观),因此您的100台设备将花费8:20分钟时间发送1条数据。

对于解决方案: 您实际上可以创建自己的AT命令。 AT固件似乎是“开源的”,您可以在命令列表中找到自己的命令,如下所述:http://www.verelec.nl/?page_id=557。但是,如果您只需要某些功能,而不是AT固件必须提供的所有功能,那么直接编程ESP8266可能是最好的选择,例如,通过使用Espressif非OS或RTOS或esp-open-rtos SDK。从那里你有完全的控制,你可以打开AP,UDP服务器,并实现解除认证。

然而,没有内置的功能来断开客户端。但是,存在对您的客户端进行WiFi De-Auth攻击的可能性。有多个项目展示了对任意网络的解除认证攻击 - 只要确保只对自己的网络运行攻击,其他一切都是非法的。项目链接:https://github.com/spacehuhn/esp8266_deauther,https://github.com/RandDruid/esp8266-deauth。他们都使用wifi_pkt_freedom()函数发送任意WiFi数据包到空中。但我真的没有看到它的目的 - 如果客户端在发送数据后自动断开连接,为什么AP将客户端断开?

另一个想法是以某种方式协调客户的连接顺序。这可以通过例如使用全局时钟时间(从例如RTC获取)。你可以例如假设设备#1到#4只能在当前小时的分钟0和5,分钟5和10之间的设备#5到#8等之间发送一种不同的方法是实施某种类似ALOHA的协议;这是一个(通用)机制,多方可以访问资源(例如无线电频道),但只有其中一方只能在某个时间使用它。你可以在http://ecomputernotes.com/computernetworkingnotes/communication-networks/what-is-aloha找到解释。

我希望这给你一些想法。

+0

ESP deAuth只在我看来一个可行的解决方案,因为这样我可以控制客户端连接。我也在想,如果ESP可以根据RSSI值选择ESP将允许连接的用户,那么我也可以根据他们的距离来限制用户。接近的用户应该能够首先分享信息,而不是远端的用户。 – aksonlyaks

+0

关于deauth的AT命令,ESP模块将连接到将要处理来自客户端的所有信息的控制器。这就是为什么要寻找AT命令实现Deauth的原因,以便控制器可以决定何时断开连接以及断开连接。 – aksonlyaks