阿里云iot有多个开发平台:
- LinkDevelop
- 生活开放平台
- 管理控制台
等等,分别面向不同需求的嵌入式开发者,LinkDevelop平台相对更偏底层,而生活开放平台更产品化一些,管理控制台就更像一个大杂烩了。
开发准备
1. 拉取代码
git clone拉取
https://github.com/alibaba/AliOS-Things
开源代码。
这个git仓库下具有master、developer、release等多个分支,其间一些example文件夹差异非常大,如果你参照一些例程的时候发现手上的代码不一致,请用
git branch
查看自己处于哪个分支下。
2.搭建编译环境
-
参照阿里云iot嵌入式开发准备官方文档 搭建编译下载环境。
这里我使用的是ubuntu16.10操作系统,以及visual studio code(以下简称vscode)和alios-studio插件。
- 点击左下角[email protected]修改对应工程名和芯片类型 linkkitapp指工程名,esp8266即是芯片类型。这里你可以将linkkitapp改为helloworld。
- 注意:编译开始时,编译脚本会自动check你的环境变量中是否有相应的编译工具链,esp32:xtensa-esp32-elf;esp8266:xtensa-lx106-elf,但不会check工具链的版本。如果找到,将使用原来的工具链,否则自动下载工具链到./build/compiler文件夹下。如果你电脑上有比较老版本的交叉编译器,可能会导致编译失败,需要手动将环境变量中的交叉编译器暂时剔除,并让编译器自动下载最新版本。
3.实现固件烧录
两种方式:
-
点击vscode的alios-studio插件中的闪电图标可以upload(烧录)固件。值得注意的是,默认的esp32和esp8266烧录都是4MB大小的固件,如果你的8266是1MB或者2MB的flash,那么需要到./build/site_scons/upload/esp8266.json中修改下载配置。
以下为1MB的8266配置参数,2MB的flash分区可以参考乐鑫官方手册。
{
"cmd": [
"esptool.py",
"--chip",
"esp8266",
"--port",
"@[email protected]",
"--baud",
"921600",
"write_flash",
"--flash_size",
"detect",
"0x0",
"@[email protected]/platform/mcu/esp8266/bsp/boot_v1.7_921600.bin",
"0xfc000",
"@[email protected]/platform/mcu/esp8266/bsp/esp_init_data_default.bin",
"0xfe000",
"@[email protected]/platform/mcu/esp8266/bsp/blank.bin",
"0x1000",
"@[email protected]/out/@[email protected]/binary/@[email protected]"
]
}
2.自行使用芯片对应烧录工具烧录,需要自行调整下载参数。效果一样。
对于esp系列芯片,ubuntu下可以使用esptool命令行,如:
esptool.py --chip esp32 --port $(ls /dev/ttyUSB*) --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 40m --flash_size detect 0x1000 /home/wangym/ali/AliOS-Things/platform/mcu/esp32/bsp/bootloader.bin 0x8000 /home/wangym/ali/AliOS-Things/platform/mcu/esp32/bsp/custom_partitions.bin 0x10000 /home/wangym/ali/AliOS-Things/out/[email protected]/binary/[email protected]
windows下可以使用官方工具ESPFlashDownloadTool。
4.查看设备串口日志
点击vscode中小插头图标可以连接设备查看打印日志,如果连失败,可能需要到setting中修改对应的串口设置。或者为你的用户增加串口使用权限。
settings.json决定了编译下载规则,launch.json决定了debug规则(有些芯片不具有上位机debug功能)。如果遇到相应问题,可能需要修改这里面的参数。
在alios默认生成的固件中:
esp32的log波特率:115200.
esp8266的log波特率:921600.
5.Alios中如何设置芯片的编译选项?
用过esp8266原生sdk的人应该知道,官方sdk中编译脚本可以设置编译出来的固件是QIO/DOUT,设置SPI_SPEED这些选项。在alios中如何修改呢?
通过编译固件的日志,我们可以看到,编译操作主要是在platform/mcu/esp8266这个文件夹中完成的。
编译日志:
aos-cube version: 0.2.61
Check if required tools for esp8266 exist
Making config file for first time
processing components: helloworld esp8266 platform/mcu/esp8266 osal init auto_component
app_version:app-1.0.0-20181222.0932
kernel_version:AOS-R-2.0.0
all components: helloworld esp8266 platform/mcu/esp8266 osal init auto_component yloop cli middleware.common rhino.fs.kv libc network.lwip alicrypto hal middleware/uagent/uota/src/recovery digest_algorithm rhino platform/arch/xtensa/lx106 middleware.alink.cloud osal.espos log rhino.vfs middleware.uagent.uota.src.recovery.nbpatch middleware.uagent.uota.src.recovery.xz-embedded kernel.rhino.vfs.device
app_version:app-1.0.0-20181222.0932
kernel_version:AOS-R-2.0.0
Build AOS Now
TOOLCHAIN_PATH=/home/wangym/ali/AliOS-Things/build/compiler/gcc-xtensa-lx106/Linux64/bin/
Compiling board_esp8266
Compiling helloworld
Compiling esp8266
tools文件夹下有个gen_appbin.py的脚本,从名字可以看出来,bin文件由它生成。文件中,我们看到了一些编译选项,顺藤摸瓜,可以看到
platform/mcu/esp8266/bsp/ESP8266_RTOS_SDK/Makefile
调用了这个python脚本。ok,显然编译选项在这个Makefile下可以设置,如果你有兴趣,不妨尝试修改。
gen_appbin.py第113行:
def gen_appbin():
global chk_sum
global crc_sum
global blocks
if len(sys.argv) != 6:
print 'Usage: gen_appbin.py eagle.app.out boot_mode flash_mode flash_clk_div flash_size_map'
sys.exit(0)
elf_file = sys.argv[1]
boot_mode = sys.argv[2]
flash_mode = sys.argv[3]
flash_clk_div = sys.argv[4]
flash_size_map = sys.argv[5]