天天看点

使用ESP32、ESP8266入坑Alios-Things

阿里云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]修改对应工程名和芯片类型
    使用ESP32、ESP8266入坑Alios-Things
    linkkitapp指工程名,esp8266即是芯片类型。这里你可以将linkkitapp改为helloworld。
  • 注意:编译开始时,编译脚本会自动check你的环境变量中是否有相应的编译工具链,esp32:xtensa-esp32-elf;esp8266:xtensa-lx106-elf,但不会check工具链的版本。如果找到,将使用原来的工具链,否则自动下载工具链到./build/compiler文件夹下。如果你电脑上有比较老版本的交叉编译器,可能会导致编译失败,需要手动将环境变量中的交叉编译器暂时剔除,并让编译器自动下载最新版本。
    使用ESP32、ESP8266入坑Alios-Things

3.实现固件烧录

两种方式:

  1. 点击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中修改对应的串口设置。或者为你的用户增加串口使用权限。

使用ESP32、ESP8266入坑Alios-Things

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]
           

继续阅读