我正在使用ESP8266构建IoT设备。该设备最终将包含几个电动机,我想使用MQTT来控制这些电动机。我想使设备尽可能便宜,所以我要避免使用显示器和键盘之类的东西。

因此,当设备旋转时,应该先连接到本地WiFi,然后再连接到MQTT代理。但是,它如何知道要连接的本地SSID,以及用户名和密码又如何呢?由于设备没有显示器或键盘,因此无法输入这些内容。用户如何知道设备是否能够连接?为了进行故障排除,最好是该设备至少可以通过某种方式来指示可能是什么问题。该按钮将标记为“ config”或类似名称。按下按钮后,设备将开始作为具有预定义SSID的WiFi接入点运行。它将有一个Web服务器,因此用户可以用笔记本电脑或电话连接到此预定义的访问点,并输入本地网络设置(SSID,用户名和密码)以及MQTT代理的地址。 LED将用于指示操作模式,并用作错误指示。例如,当LED稳定发光时,所有的东西都连接好了,长闪烁表示它处于配置模式,短闪烁表示有错误或类似的情况。

我的问题是,解决方案我提出了解决此问题的标准方法?即对用户来说感觉像是熟悉的流程,还是有些其他方法会更好?经过一番搜索后,我发现例如这似乎是一个类似的用户流。仍然会想听听您对此有什么经验,并知道如何解决?

如果事实证明这是解决此问题的好方法,并且由于它是一种通用解决方案,那么最好不要过多地发明轮子。我在想可能会有一个图书馆可以完成所有这些工作。该库将配置为按钮的输入引脚和LED的输出引脚,然后其余所有工作。它可以基于PubSubClient库并基于ESP8266教程:连接到MQTT代理构建。那么,有没有这样做的图书馆或类似的图书馆?如果没有,我会刺痛并创建自己的刺刀,但想先听听那里有什么。

谢谢!

#1 楼

您所描述的实际上是解决将WiFi IoT设备集成到本地LAN的问题的一种非常普遍(最常见的方法)。例如,以我的经验为例,Amazon Echo Devices是通过这种方式设置的或各种智能开关/智能插头(例如Shelly设备)。

根据您的要求,您也可以不用LED和按钮。详细信息,它们将尝试连接到已配置的网络,如果未成功,则打开一个接入点进行配置。
这里是在AP模式下使用强制门户的第二种实现方式。

MQTT的实现PubSub部分以及将按钮和LED插入相应的草图中应该非常简单。 Wi-Fi保护设置(WPS)和设备设置协议。

评论


感谢您的答复!您第二个链接中的WifiManager库似乎正是我要的内容。我将尝试一下,看看我是否喜欢它。如果没有,我将使用第一个链接中的信息来构建自己的解决方案...

– Mikael Lindqvist
19年7月4日在5:59

哦...这是另外一个添加了MQTT的部分:github.com/dreed47/WifiMQTTManager

– Mikael Lindqvist
19年7月4日在6:04

#2 楼

还有luftdaten.info项目,这是一个带有自己的固件的开源粒子传感器。它们仅在没有config按钮的情况下与您建议的内容类似。他们通过在设备开机时默认启动Web服务器来做到这一点。达到某个阈值(我认为大约在3到10分钟之间)后,内部Web服务器将关闭-因此在下一次关机后再打开电源之前无法进行更多配置。

此解决方案可能也是如此在某些情况下是不安全的,但是您可能还是想知道。

编辑:

要使初始配置进入设备,请执行以下步骤:

引导设备时,它将尝试访问配置的WLAN(首次启动时没有配置的WLAN)。如果无法连接到预先配置的WLAN,它将设置一个静态IP并跨越自己的无线网络,而无需输入密码,在该无线网络中,用户可以通过该静态IP地址连接并进行初始配置。

评论


仅启动Web服务器并不能解决如何将wifi网络的SSID /密码传递到设备以使其实际在网络上的问题。

– hardillb
20-2-13在14:45

@hardillb是的,更多信息请看luftdaten.info。引导设备时,它会尝试访问配置的WLAN(首次启动时没有配置的WLAN)。如果无法连接到预先配置的WLAN,它将设置一个静态IP并跨越其自身的无线网络,而无需输入密码,在该无线网络中,用户可以通过该静态IP地址连接并进行初始配置。

–詹斯·科尔(Jens Kohl)
20年5月5日14:00