收藏官网首页
查看: 4291|回复: 1

[技术分享] 【常见问题】ESP8266应用

50

主题

67

帖子

460

积分

中级会员

Rank: 3Rank: 3

积分
460
发表于 2016-10-17 11:51:09 | 显示全部楼层 |阅读模式
注册成为机智云开发者,手机加虚拟设备快速开发
本帖最后由 feb 于 2016-10-17 11:54 编辑

为什么云端升级需要2个 “bin” 文件?“user1.bin” 和 “user2.bin” 有什么区别?
user1.bin user2.bin 是 2 个不同的 BIN 文件。生成 user1.binuser2.bin 时,必须使用相同的 Flash 和 boot 设置,以保证 OTA 升级成功。2个 BIN 文件是互补的,运行 user1.bin 的时候,升级是下载 user2.bin;运行 user2.bin 的时候,升级是下载 user1.bin。这样可以保证升级过程中,如果有掉线的情况发生,设备还是可以正常运行。


如何生成 “user1.bin” 和 “user2.bin” ?编译环境下,执行 gen_misc.sh 分别得到 user1.binuser2.bin步骤如下:
  • 使用正确的 Flash 和 boot 配置,编译生成 user1.bin
  • 执行 make clean,以便清除之前的残余信息。
  • 使用相同的 Flash 和 boot 配置,编译生成 user2.bin


云端升级失败有哪些原因?

云端升级的详细介绍参考文档《ESP8266 FOTA 云端升级指南》。

请先检查以下问题:

  • 确认使用了正确大小的 Flash。
  • 确认是否烧录了 blank.bin 做初始化。
  • 确认 user1.binuser2.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.0smartconfig v2.4app v0.3.4.x
sdk v1.3.0smartconfig v2.5app v0.3.4.x
sdk v1.3.0smartconfig v2.5.1app v0.3.4.x
sdk v1.4.0smartconfig v2.5.2app v0.3.4.x
sdk v1.5.0smartconfig v2.5.3app v0.3.4.x
sdk v1.5.4smartconfig v2.5.4app 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 的设备。通过如下命令

   


curl -q “https://api.weixin.qq.com/cgi-bin/token?

grant_type=client_credential&appid=wx0f74f861897f84b5&secret=your_We Chatname_32characters_please”

   

//注:目的是得到 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。































0

主题

1

帖子

40

积分

新手上路

Rank: 1

积分
40
发表于 2017-12-5 14:02:42 | 显示全部楼层
你好,看得不太明白,想请教一下 AT+CWSTARTDISCOVER=“gh_9e2cff3dfa51”,”1234”,1 中的gh_9e2cff3dfa51是怎么获得的,方便添加qq请教吗,我的qq  457318796
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

© 2011-2017 Gizwits ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表