首先,我将向您介绍我正在做的事情:
我的项目包括一个设备,它将充当其他设备可以连接的AP服务器(接入点和服务器),并通过UDP将一些状态消息共享给AP服务器。但是,附近的设备数量会很高,可能会超过100个,并且所有设备都会尝试同时连接到AP服务器。
作为AP服务器,我使用的是ESP8266。因为,我们知道ESP8266模块在连接客户端设备方面有局限性(一次最多连接4~5个客户端),我的第一个问题是如何将多个客户端连接到AP服务器,共享一些消息然后断开连接连接以允许其他客户。
对于这个问题,我想如果我可以在共享消息后使用deAuth()断开客户端与AP本身的连接,那么我可以允许其他客户端连接。但是没有AT命令强制客户端通过deAuth或任何其他模式断开连接。这带来了我的主要问题,如何在ESP模块中创建自定义AT命令?
由于
修改 为了更详细地解释这个场景,ESP设备将被放置在SHOP中。进入SHOP的用户将通过他们的移动应用程序自动连接到ESP模块并共享一些数据。因为,随机数量的用户可能会来到商店,如果我没有将他们与ESP断开连接,则其他用户无法共享信息。
答案 0 :(得分:2)
嗯,你的根本问题是你要将100个设备连接到你的ESP8266,它一次只能处理4个(来源:http://espressif.com/sites/default/files/documentation/2c-esp8266_non_os_sdk_api_reference_en.pdf,第151页)。解决问题的两种方法:改变策略,例如只有每1个客户端连接到您的AP,其中包含其他100个客户端的所有结果,或者让它们逐个连接。请注意,连接,发送数据和断开连接每台设备大约需要5秒钟(乐观地),因此您的100台设备需要8:20分钟才能发送1条数据。
解决方案: 您实际上可以创建自己的AT命令。看起来AT固件是“开源的”,您可以在命令列表中使用自己的命令,如下所述:http://www.verelec.nl/?page_id=557。但是,如果您只需要某些功能而不是AT固件提供的所有功能,那么如果您直接对ESP8266进行编程,则可能是最好的,例如:使用Espressif非操作系统或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到#8在分钟5和10之间发送,等等。另一种方法是实现某种类似ALOHA的协议;这是一种(通用)机制,当其中只有一方只能在时间使用时,多方可以访问资源(例如无线电信道)。您可以在http://ecomputernotes.com/computernetworkingnotes/communication-networks/what-is-aloha找到相关说明。
我希望这会给你一些想法。