DeviceHive v 0.3固件中的ESP8266的无线配置



大家好消息!一个新版本 DeviceHive固件ESP8266已被释放。我们已经实现了用于连接设备的最流行接口的支持:GPIO,ADC,PWM,UART,I2C,SPI,1-wire。现在,您可以轻松地将具有这些接口的设备连接到我们的云服务。最重要的是,已经出现了无线配置固件的功能(请参见下面的屏幕截图)。今天我们将讨论这个。



三重RESET,或“开始吧!”


使用无线连接创建IoT设备时,您经常会遇到一个不愉快的问题:为最终用户设置设备并不像看起来那样容易。此类设备通常不配备屏幕和键盘,因此如果没有合适的电缆和专用软件,则无法进行初始设置(例如Wi-Fi网络数据)的设置。我们试图在新的固件版本中解决此问题。

现在,一切都变得非常易于配置:
•设备重新启动三次(间隔不超过3秒),然后重新启动成为Wi-Fi接入点;
•连接到这一点并通过浏览器输入所有必要的设置;
•应用设置后,设备将使用新设置自动重新启动。

这样,两个问题都可以立即解决-您将不需要电缆或专用软件。除了浏览器之外...但是您有浏览器吗? RESET按钮通常直接位于设备的机身上,按3次应该非常简单。

此外,在现代移动操作系统中,您甚至不必打开浏览器,因为它们大多数都支持强制门户认证。在Apple设备上,数据输入页面会自动打开。Android将通过单击显示通知,您将在此页面上找到自己。

在下面的视频中,您可以看到新固件和Android设备的所有功能。



自己做


让我们看看这种设置系统的基本工作原理,因为它可以用任何其他具有Wi-Fi的无线设备实现。

首先,我们建立了通常的Wi-Fi网络。在其中,我们创建了一个DHCP服务器,该服务器将IP地址分配给连接的设备。但是作为DNS服务器,它传递“狡猾” DNS的IP地址。诀窍是,我们可以用来配置设备的HTTP服务器的IP地址将始终返回到任何DNS查询“ A”记录。对于ESP8266,DHCP,DNS和HTTP服务器直接在芯片上工作。在一个非常基本的版本中,这就足够了-在浏览器中打开任何页面,我们将看到一个包含设置的页面。但是,为了美观起见,您可以强制支持门户身份验证的设备显示有关输入数据的通知。

门户身份验证通常用于在旅馆,旅馆和其他Wi-Fi热点中输入数据和/或显示使用协议。我们使用这种技术来显示我们的页面。

当连接到Wi-Fi网络时,Android会尝试转到client3.google.com/generate_204
苹果设备正在尝试连接至captive.apple.com

在此发送请求后,您将收到以下形式的回复:

$ curl http://clients3.google.com/generate_204 -i
HTTP/1.1 204 No Content
Content-Length: 0
Date: Mon, 07 Sep 2015 14:58:21 GMT
Server: GFE/2.0


$ curl http://captive.apple.com -i
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 68
Date: Mon, 07 Sep 2015 15:00:32 GMT
Connection: keep-alive

<HTML><HEAD><TITLE>Success</TITLE></HEAD><BODY>Success</BODY></HTML>


也就是说,作为对HTTP请求的响应,它们返回状态为2xx的响应。由于这些请求,设备确定它们是否已连接到Internet。要实施门户网站认证,有必要发送一个响应,响应这些请求(或仅响应我们感兴趣的所有请求),并发送代码302临时移动的响应,并在标头中指明我们的地址的位置字段,即答案应近似如下:

HTTP/1.1 302 Moved Temporarily
Content-Length: 0
Location: http://example.com


收到此答案后,设备将了解有必要在指定地址显示设置页面-Apple设备将自行在屏幕上打开此页面,而Android将显示通知。在不支持门户网站认证的操作系统中,只需在浏览器的地址栏中输入以“ http://”开头的任何地址,浏览器就会打开设置页面。同时,您不会误导用户,因为带有设置的页面的地址将显示在地址栏中。在ESP8266的固件中,我们使用地址devicehive.config

我们希望所有这些对您有用。祝您创建自己的物联网解决方案好运!

作者:高级嵌入式开发人员Nikolai Khabarov

Source: https://habr.com/ru/post/zh-CN383881/


All Articles