版本: V1.0
本SDK是基于乐鑫ESP8266 SDK v3.1,封装了对接天猫精灵开放平台相关功能, 如天猫精灵闪连,精灵云鉴权和语音控制,以及OTA功能等等,以协助模组和设备厂快速开发相关产品并对接到天猫精灵平台,模组和设备厂只需适配相应硬件。
一. 获取乐鑫原厂SDK
github连接:https://github.com/espressif/ESP8266_RTOS_SDK
使用的tag: v3.1
具体命令:
git clone https://github.com/espressif/ESP8266_RTOS_SDK
cd ESP8266_RTOS_SDK
git checkout v3.1
git branch
注意:请确认是在v3.1的tag。
二. 合并Wi-Fi SDK
1. 包格式
Note:本SDK预编译的库名为 libaiot_out.a, 其它修改到的原厂库部分也可自行编译
2. 合并SDK
2.1. 将vendor_sdk.patch应用到SDK中
命令:
cd ESP8266_RTOS_SDK
patch -p1 < esp8266_v31_pkg/vendor_sdk.patch
2.2. 将aiot_header.tar.bz2 解压到 SDK inlcude目录下
命令:
cd ESP8266_RTOS_SDK
tar -xvf esp8266_v31_pkg/aiot_header.tar.bz2 -C ./components
2.3. 将示例aiot_demo.tar.bz2 解压到 SDK examples目录下
命令:
cd ESP8266_RTOS_SDK
tar -xvf esp8266_v31_pkg/aiot_demo.tar.bz2 -C ./examples
3. 编译
- 编译器下载地址:
- 编译器部署:
根据解压编译器的位置将编译环境导入到PATH环境变量
export PATH=/opt/xtensa-lx106-elf/bin:$PATH
- 进入到 examples/aiot_demo 下执行 sh gen_misc.sh
- 生成的image位于 SDK examples/aiot_demo/build目录:
镜像:aiot_demo.bin
分区表:partitions_2MB.bin
bootloader: bootloader/bootloader.bin
三. 根据品类申请三元组并写入
三元组是在生产时烧入设备中安全区域(如efuse),不应该以明文存于Flash中。
本示例是演示测试时如何将测试三元组写入代码中调试功能。
1. 申请三元组
在天猫精灵开放平台上根据产品品类申请
https://open-iot.tmall.com
2. 替换代码中三元组
2.1. 打开编译宏定义
在awifi_sdk_interfaces.h中设置如下宏定义为1
#define DEBUG_WRITE_NEW_THREE_ELEMENT_INFO 1
2.2. 修改代码中固化的三元组信息
其中vid信息(图中2159 / 3059),修改为 1000。
2.3. 在esp_user_task确认调用 global_set_mac_addr()
2.4. 编译代码后烧录启动,板子三元组就烧录成申请到的三元组
四. 镜像烧写
1. 镜像分区
0x0000 bootloader.bin
0x8000 partitions_2MB.bin
0x10000 aiot_demo.bin
2. 镜像烧写方式
镜像烧写方式分两种:
- windows用上位机烧写
- linux用python脚本命令行烧写
2.1. 上位机UI烧写方式
推荐使用原厂提供的命令行烧写方式。
2.2. linux命令行烧写方式
编译完成后,乐鑫原厂的编译日志会提示烧写命令
执行 make flash或者下面的命令(该命令会在编译log里面,如有疑问可以咨询乐鑫原厂)
五. 编译OTA固件与升级
1. OTA image结构
ESP8266平台OTA image的结构如下:
2. OTA 升级全部节点流程
3. 如何编译生成用于OTA的ota_all.bin
当前使用阿里提供的relase包里面aiot_demo程序中的gen_misc.sh编译,默认会自动生成ota_all.bin。
背后的原理是:gen_misc.sh中变量 ota_gen_bin_mode:
- ota_gen_bin_mode=1 生成user1
- ota_gen_bin_mode=2 生成user2
- ota_gen_bin_mode=3 生成user1、user2和ota_all.bin
4. 上传镜像到IoTServer的方法
目前上传到IoTServer接口测试中,权限未开放,暂时由阿里的接口人代为上传。需要提供如下5个信息:
(1)三元组的ProductID
(2)测试使用的天猫精灵绑定的淘宝用户名
(3)升级设备的mac地址
(4)OTA升级的特殊版本号
5. 设置编译版本号
在系统初始化流程中调用aick_set_dev_version函数进行设置,可通过aick_get_dev_version获取设置后的值。
bool aick_set_dev_version(char ver);
const char aick_get_dev_version(void);
例子:
//ota upgrade version set
ret = aick_set_dev_version(DEV_VERSION);
if (false == ret) {
printf(“set dev version failed\n”);
}
printf(“awifi dev version:%s\n”, aick_get_dev_version());
注意事项:
版本号的长度限制为32字节。超出后会被截断。
六. 配网重置
当前配网重置功能的实现方式是:
需要擦除flash,原厂提供的方式是:
python /home/aliiot/workspace/wifi/build/SDK_ESP8266_V31/components/esptool_py/esptool/esptool.py —port /dev/ttyUSB0 —baud 115200
如有疑问可以咨询乐鑫原厂。
七. 其它
请预先安装好乐鑫编译环境,如有问题请参考乐鑫github安装https://github.com/espressif/ESP8266_RTOS_SDK/tree/v3.1