云端升级的详细介绍参考文档《ESP8266 FOTA 云端升级指南》。
请先检查以下问题:
- 确认使用了正确大小的 Flash。
- 确认是否烧录了 blank.bin 做初始化。
- 确认 user1.bin 和 user2.bin 下载到了正确的地址。
- 确认生成 user1.bin 和 user2.bin 使用了相同的 Flash、boot 配置。
如何通过我自己的服务器进行云端升级?
如果通过客户自己的服务器升级,请确认服务器满足下面的要求。
- 发送 HEAD 指令到云端服务器,询问待升级的 BIN 文件长度,服务器回复的 HTTP 包头中要求带有 BIN 文件的长度信息。
- 根据步骤一查询到的长度,在 esp8266 模块的 Flash 待升级区域,擦除该指定长度(spi_flash_erase_sector),等待下载。
- 发送 GET 指令,从服务器下载 BIN 文件,写入到 Flash 的待升级区域。
如何使用我自己的云服务器进行云端升级?
客户可以使用自己的云服务器,但是要能支持 HTTP 请求,并可以支持设备控制功能。
云端的 API,请见:http://iot.espressif.cn/#/api-zh-cn/。
ESP8266 如何和云端服务器进行交互?
可以使用标准 HTTP 协议连接云服务器。比如,ESP8266 使用如下的 HTTP 请求。
GET /your-bin-file-path.bin HTTP/1.1
Host: yourdomain.com
Connection: keep-alive Cache-Control: max-age=0
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent:
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language:
en-US,en;q=0.8,ja;q=0.6,zh-CN;q=0.4,zh-TW;q=0.2 |
注意:HTTP 协议规定请求以“\r\n\r\n”为结束,所以在通讯过程中请不要使用这样的组合。
客户可以通过下面的方法来 debug 服务器:
telnet <sitename> <port_number> |
请事先确认 telnet 在您的 PC 上是可以使用的,或者使用其他的支持 telnet 的终端软件也可以达到同样的目的,比如 TeraTerm。
SmartConfig 配网配不上有哪些原因?
请做以下检查:
- APP 版本是否支持 SDK 版本或 SmartConfig 版本。
- 手机连接的路由器不能是单 5G 路由(双频路由器除外)。
- SmartConfig 过程中不要调用其他 API。
- 使用 AT 时,设备没有获得 IP 之前,不要调用 smartconfig_stop。
如以上排除,请调用 smartconfig_start 时打开 debug 模式。把连接失败和成功的 log 发给我们技术做支持分析。
SmartConfig 支持的 APP 对应的版本是什么?
调用 smartconfig_start() 接口,会有"SC version: vX.X.X"版本信息打印。这是 ESP-TOUCH 模块的版本号。下面是非 OS 对应的 SmartConfig 版本和 APP 版本。
sdk v1.2.0 | smartconfig v2.4 | app v0.3.4.x |
sdk v1.3.0 | smartconfig v2.5 | app v0.3.4.x |
sdk v1.3.0 | smartconfig v2.5.1 | app v0.3.4.x |
sdk v1.4.0 | smartconfig v2.5.2 | app v0.3.4.x |
sdk v1.5.0 | smartconfig v2.5.3 | app v0.3.4.x |
sdk v1.5.4 | smartconfig v2.5.4 | app v0.3.4.x
|
ESP8266 支持 HTTP 服务端吗?
支持。ESP8266 在 SoftAP 和 Station 模式下都可以作服务端。
- 在 SoftAP 模式下,ESP8266 的服务端 IP 地址是 192.168.4.1。
- 如果 Station 模式,服务端的 IP 地址为路由器分配给 ESP8266 的 IP。
- 如果是基于 SDK 二次开发,那么需使用 espconn 结构体和相关 API。
- 如果是使用 AT 指令,需使用 AT+CIPSERVER 开启服务端。
如何通过 AT 指令发 HTTP 包?
1. AT 指令配置 SoftAP +Station 模式: AT+CWMODE=3 // set softAP+station mode
2. AT 指令连接路由:AT+CWJAP="SSID","password" // ESP8266 station connect to router
3. 创建 TCP 连接,按照 HTTP 包的格式发送数据,如下图红框标注,请注意,HTTP 包中的换行符 [(0x0d 0x0a) or (CR LF)] 是必须的,不能省去。
4. 收到 HTTP 包的回复。
微信中的近场发现中使用的 Product ID 是从哪里来的?
需要建立一个 device ID,比如在客户的微信号下,建立了一个 ID=1234 的设备。通过如下命令
//注:目的是得到 access token。("your_WeChatname_32characters_please" 代表客户的微信 API 应用秘钥,申请获得,应该为 32 个字符。)
返回:
{"access_token":"L2_2V1E98Vk- jTXenXDZjDT0GaudUn_VGTRa7O98hdfT0lTZa2B7nj6YvXN01gssQa3ZraRgjALuCvxd -SamuPR885KJabaw1EYLA0kns-Yglr4ryolEhHb- QcnWMaNqSEDjACANZY","expires_in":7200} |
curl -d '{"device_num":"1","device_list":[{"id":"1234","mac":"18fe3497d500","connect_protocol":"4","auth_key":"00000000000000000000000000000000", "close_strategy":"1","conn_strategy":"1","crypt_method":"0","auth_ver":"0","manu_mac_pos":"-2","ser_mac_pos":"-2"}], "op_type":"0", "product_id": 5157}' "https://api.weixin.qq.com/device/authorize_device?access_token=L2_2V1E98Vk-jTXenXDZjDT0GaudUn_VGTRa7O98hdfT0lTZa2B7nj6YvXN01gssQa3ZraRgjALuCvxd-SamuPR885KJabaw1EYLA0kns-Yglr4ryolEhHb-QcnWMaNqSEDjACANZY" |
//注:建立一个 ID=1234 的设备。
这样,您只需要使用 AT 指令 AT+CWSTARTDISCOVER=“gh_9e2cff3dfa51”,”1234”,1 即可。(“gh_9e2cff3dfa51” 是您的微信公众号名字。)
ESP8266 如何添加自定义 AT 命令,关于自定义 AT 命令字段长度限制是多少?参数段长度限制是多少?
客户可以基于 ESP8266_NONOS_SDK\examples\at 示例代码,在 ESP8266 自带 AT 命令的基础上,添加客户自定义的 AT 命令。关于自定义 AT 命令,SDK 限制整条 AT 命令数据长度最大 128 字节(含结束符 “\r\n”),不单独限制命令段和参数段。
例如:AT+CMDTEST=param1,param2,param3,….paramN\r\n
则:strlen(“AT+CMDTEST=param1,param2,param3,....paramN\r\n”)<=128 Bytes
如果应用使用的是不支持 FOTA 的固件,要将 eagle.irom0.text.bin 下载到哪里?
对于 Non-OS SDK 和 RTOS SDK,固件 BIN 文件的位置取决于合适的链接脚本内容。如果应用中使用的是不支持 FOTA 的固件,则用户代码包含在 eagle.irom0.text.bin 中。该 BIN 文件在 Flash 中的位置是由 SDK/ld 中的链接脚本 eagle.app.v6.ld 决定的。
注意:在所有版本 ESP8266 SDK 中, eagle.irom0.text.bin 的默认位置并不都是一样的。用户可以确认在自己的 ESP8266 SDK 版本中,该 BIN 文件在 Flash 中的位置。如下图所示:
图中标蓝的数字表示 eagle.irom0.text.bin 在 Flash 中的地址。在上图的例子中,该地址为 0x10000。