ESP32 DevKitC 编译烧写 AliOS Things

作者简介:

邵国际,计算机专业大四学生,擅长动手,热衷物联网。用技术表达自我,虽然是个玩过单片机的渣渣,但一直想做出好玩有趣的东西(软/硬件),并享受其中的乐趣。目前在深圳增长见识、学习嵌入式开发技术中。

AliOS Things 是一款由阿里巴巴开发的轻量级物联网操作系统。具备极致性能,极简开发、云端一体、丰富组件(包括实时操作系统内核,连接协议库、文件系统、libc接口、FOTA、Mesh、语音识别)、安全防护等关键能力,并支持终端设备连接到阿里云IoT云服务平台。可广泛应用在智能家居,智慧城市,工业等领域,降低物联网终端开发门槛,使万物互联更容易,终端设备上云更简单。

项目地址:alibaba/AliOS-Things: AliOS Things released by Alibaba is an open-source implementation of operating system (OS) for Internet of Things (IoT).

在嵌入式实时操作系统大家族中,常见的 µC/OS-III、FreeRTOS 等 RTOS 严格意义上只能算一个 kernel(仅包含 OS 基本服务),随着物联网时代到来,出现了像 AliOS Things、RT-Thread 这些「时髦」的操作系统,大佬们在实时内核的基础上增加了大量组件,囊括通信协议栈、低功耗管理、安全加密算法、FOTA(远程固件升级)等功能,可以说目的十分明确 —— 直奔物联网。

更多关于物联网操作系统的知识,可以参考何小庆老师的 PPT 物联网操作系统研究与思考.pdf


ESP32

物联网的大潮下,MCU 迎来一个新的发展机遇。继 ESP8266 之后,乐鑫在 2015 年底又推出了更强大的 ESP32 系列 WiFi 芯片,从参数描述可以看出:

ESP32 SoC 为双核 32 位 MCU,主频高达 240 MHz,计算性能可达 600 DMIPS,采用 40 nm 工艺,集成 520 KB SRAM,16 MByte flash。工作电压 2.2 V to 3.6 V。ESP32 专为移动设备、可穿戴电子产品和 IoT 应用而设计,拥有业内最高水平的低功耗芯片的所有特征,例如精细分辨时钟门控、省电模式和动态电压调整等。ESP32 SoC工作温度范围从-40°C 到 +125°C。此外,ESP32 还集成了先进的自校准电路,实现了动态自动调整,可以消除外部电路的缺陷以及适应外部条件的变化。

早在 2016 年乐鑫 ESP32 和阿里云物联网系统 YoC 已经有了合作。去年 10 月份的云栖大会上阿里提出了 AliOS Things,不久之后项目开源便支持了 ESP32,同时为开发者提供了许多开发工具。

ESP32 DevKitC 开发板

ESP32-DevKitC 是搭载了乐鑫最新的 ESP-WROOM-32 模组的 MINI 开发板,能够轻松地插接到面包板,板子包含了用户所需的最小系统,只需连上 USB 线,即可进行开发。此外还具有 USB-UART 转换器 ,复位和下载模式按钮,LDO 稳压器 和微型 USB 连接器 。每个 GPIO 都可供开发者使用。

开发板购买地址:ESP32-DevkitC (Core board开发板)发票不含快递费-淘宝网

那如何把 AliOS Things 编译烧写到 ESP32 DevKitC 呢?来不及解释了,赶紧上车!


所需工具

在 Windows 下进行基于 AliOS Things 开发 ESP32 应用需要准备

  • 安装有 Windows、Linux 或者 Mac 操作系统的 PC
  • 用于编译 ESP32 应用程序的工具链
  • AliOS Things SDK —— 包含 ESP32 的 API 和用于操作工具链的脚本
  • 编写 C 语言程序的文本编辑器,例如 VS Code
  • ESP32 开发板,例如 ESP32-DevKitC

开发步骤

  1. 安装 Visual Studio Code
  2. 安装 alios-studio 扩展
  3. 获取 AliOS Things SDK(Github 项目源码)
  4. 下载 ESP32 工具链
  5. 配置 SDK path,新建 helloworld 工程
  6. 编译、构建项目
  7. 烧写 bin 固件

Step 1:安装 VS Code、alios-studio 扩展

项目 Wiki 已经有详细软件安装说明文档,按照步骤把 VS Code 和 alios-studio 扩展装好即可:AliOS Things Studio · alibaba/AliOS-Things Wiki


Step 2:获取 AliOS Things SDK 和 ESP32 工具链

下载 aos 源代码

SDK 即项目仓库源码,从 Github 上 Download Zip 或 Clone 到本地,拷贝到 D:\AliOS-Things-master 目录下(目录自定)。

下载 ESP32 工具链

乐鑫 ESP-IDF 文档中详细描述了如何搭建 ESP32 开发环境,我们需要工具链 Windows all-in-one toolchain 用于编译源代码。

直接下载官方提供的 zip 包即可:https://dl.espressif.com/dl/esp32_win32_msys2_environment_and_toolchain-20171123.zip

同样解压到 D:\msys32 目录下,SDK 和 Toolchain 用于后续配置 VS Code 开发环境。


Step 3:配置 SDK path 与 Toolchain path

打开装好 aos-studio 扩展的 VS Code,点击右下角边状态栏上的 Create Project 新建工程按钮,首次使用会弹出配置 SDK Path 的窗口,把刚才下载的 SDK 目录 D:\AliOS-Things-master 和 ToolChain 目录 D:\msys32\opt\xtensa-esp32-elf\bin 复制到两个 path 文本框中, SDK Version 会自动识别。

修改 alios-studio Toolchain 判断规则(项目完善后可跳过此步)

此步骤非必须,由于我目前使用的 v1.1.2 版本的 SDK 尚未完善,多少会存在一些小 bug。比如对所添加 Toolchain path 的合法性判断,目前只校验了 arm Toolchain,所以对 ESP32 的 xtensa 工具链会误报非法路径。

阿里工程师在 issue [AliOS-studio][ESP32] tool chain path. · Issue #55 · alibaba/AliOS-Things 里给出了临时解决方法 —— 把 C:\Users\用户名\.vscode\extensions\alios.alios-studio-0.6.6\src\yang-sdk\main.js 文件中以下判断语句注释掉:

if (options.toolChain && !fsPlus.existsSync(path.join(dir, `arm-none-eabi-gcc${process.platform === 'win32' ? '.exe' : ''}`))) {
    return {error: 1, msg: 'path is not a tool chain directory!'};}

修改完毕后重启 VS Code,按 Ctrl+Shift+P 快捷键调出命令模式,输入 alios-studio: set SDK 继续配置,可正常添加 Toolchain path。


Step 4:新建 helloworld 工程

继续点击新建工程按钮,这回我们终于看到了待选工程模板,勾选 helloworld 工程,滚到下面填写工程保存目录(不能带中文),目标板卡选 esp32devkitc,最后点 Submit 按钮确认提交。

新建工程需要把 sdk 赋值到工程文件夹,比较耗时,请耐心等待。完成后 VS Code 会新打开一个文件夹视图窗口,表示一个 alios-studio 工程。在左侧的目录中打开 helloword.c 文件,其中application_start 函数是应用程序的入口。helloworld 程序的运行现象是在串口以 5 s 的间隔打印调试字符串。

新建工程视频演示:AliOS Things Tutorial: 1 Hello World 应用


Step 5:编译、构建项目

点击窗口下方状态栏上的 Build 按钮开始编译、构建项目,期间会输出相应信息。如果 SDK 和工具链路径配置 ok 的话项目是可以成功编译的。经过 67.57 s 的漫长等待,终于 Build 完了……

编译生成的文件在工程的 out 目录下,out\helloworld@esp32devkitc\binary\helloworld@esp32devkitc.bin 是要烧到板子上的固件。


Step 6:烧写 bin 固件

固件烧录是相对独立的过程,原理适用于所有 bin 文件。烧写 ESP32 固件可以通过图形界面的 ESPFlashDownloadTool 软件或者 Python 命令行工具 esptool,两者都十分好上手,下面分别说明烧录方法。

bin 文件烧录地址

在烧写前需要准备 3 个 bin 文件,分别是引导程序(bootloader.bin)、分区表(custom_partitions.bin)和用户程序(helloworld@esp32devkitc.bin)。

引导程序和分区表的 bin 文件在 SDK 目录 D:\AliOS-Things-master\platform\mcu\esp32\bsp 下,用户程序 bin 由 alios-studio 编译得到。3 个 bin 文件烧录地址如下:

bin 文件

烧录地址

bootloader.bin

0x1000

custom_partitions.bin

0x8000

helloworld@esp32devkitc.bin

0x10000

系统启动时会从 0x1000 地址处开始执行,引导程序读取分区表确定内存分布及启动规则,然后执行用户程序代码。因此全部 bin 都要烧到正确的地址程序才能正常执行,这一点需要特别注意。

PS:bootloader.bin 和 custom_partitions.bin 首次必须烧写,之后仅烧用户 bin 即可。

使用 ESPFlashDownloadTool 工具烧录

ESPFlashDownloadTool 工具可在 Tools - 乐鑫 Flash 下载工具下载,打开软件后选择 ESP32 DownloadTool,设置不同固件及对应地址、晶振频率、SPI 模式、Flash大小,波特率(决定烧写速度),如下图所示:

将 ESP32 DevKitC 开发板用 Micro-USB 线与电脑连接,安装串口驱动,在烧写软件中选择对应 COM 号,点击 Start 按钮开始下载。

提示:大部分电脑在点击 Start 后会自动复位 ESP32 DevKitC 进入下载模式,如果出现一直等待的情况,请尝试按住 Boot 键不放再下载,或者按住 BooT 键的的同时按一下 EN 键再松开。

使用 esptool 工具烧录

esptool 是采用 Python 语言编写的开源工具(源代码:espressif/esptool: ESP8266 and ESP32 serial bootloader utility),提供方便易用的命令行方式进行操作,常用操作命令:

单个 bin 写 flash 命令:

格式:esptool.py --port 串口号 write_flash 地址 文件名.bin

示例:esptool.py --port COM4 write_flash 0x1000 my_app-0x01000.bin

多个 bin 写 flash 命令:

格式:esptool.py --port 串口号 write_flash 地址1 文件名1.bin 地址2 文件名2.bin

示例:esptool.py --port COM4 write_flash 0x00000 my_app.elf-0x00000.bin 0x40000 my_app.elf-0x40000.bin

esptool.py 在 D:\AliOS-Things-master\platform\mcu\esp32\esptool_py\esptool 目录下,可通过「计算机 - 属性 - 高级系统设置 - 环境变量」添加到系统环境变量 Path 中(分号隔开后粘贴路径),以便在命令行中直接使用。

在 CMD 中敲入以下命令,将 bootloader.bin、custom_partitions.bin 和 helloworld@esp32devkitc.bin 三个文件下载到 Flash 对应地址。

esptool.py --port COM30 --baud 921600 write_flash 0x1000 D:\AliOS-Things-master\platform\mcu\esp32\bsp\bootloader.bin 0x8000 D:\AliOS-Things-master\platform\mcu\esp32\bsp\custom_partitions.bin 0x10000 E:\CodeBase\ESP32\AliOS-Things\hello\out\helloworld@esp32devkitc\binary\helloworld@esp32devkitc.bin

脚本实现

每次输命令太麻烦?将以下代码保存为批处理脚本 upload.bat ,并拷贝到工程目录 hello 下,最后在 VS Code 内置的终端中执行脚本实现一键烧录:

for /f "delims=" %%t in ('dir /A:-D /S /B out\*@esp32devkitc.bin') do set binPath=%%t

esptool.py --port COM30 --baud 921600 write_flash 0x1000 D:\AliOS-Things-master\platform\mcu\esp32\bsp\bootloader.bin 0x8000 D:\AliOS-Things-master\platform\mcu\esp32\bsp\custom_partitions.bin 0x10000 %binPath%

固件 bootloader.bincustom_partitions.bin 从 SDK 目录获取,用户 bin 通过子目录下搜索 “@esp32devkitc.bin” 文件后缀得到。


运行结果

点击 VS Code 下方的 Connect Device 按钮(选好 COM 号,波特率 115200),通过 alios-studio 自带串口工具连接开发板(或使用其他串口工具),如果收到 ESP32 每隔 5 s 发过来的调试信息,说明 helloworld 运行成功!

提示:如果板子不断重启打印错误信息,请检查固件及烧写地址的正确性。

原文发布于微信公众号 - 人人都是极客(rrgeek)

原文发表时间:2018-01-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏喔家ArchiSelf

IoT固/软件更新及开源选项

物联网的迅速发展涌现了数十亿与互联网连接的无线嵌入式设备。 从医疗设备到坦克传感器, 智能恒温器, 智能路灯, 水监视器等等, 物联网比以往任何时候都应用广泛。

21220
来自专栏FreeBuf

iPhone的Wi-Fi芯片漏洞利用POC公布,赶紧更新系统吧

本周,谷歌 Project Zero 项目的研究员 Gal Beniamini 公布了 iPhone Wi-Fi 固件的漏洞利用 POC。这个漏洞(CVE-20...

25580
来自专栏企鹅号快讯

bt、磁力怎么下载?老司机飙车终极思路……

百度云解析失败,迅雷也是如此?无法下载BT!5大高分下载神器,你用过几个? ——wit小学生 最近好多小伙伴们向小学生吐槽,下载的BT不是没进度就是提示敏感资源...

9.3K100
来自专栏FreeBuf

你说安全就安全?对红芯浏览器的一次安全测试

近日,红芯浏览器“套壳”一事被网络舆论炒的沸沸扬扬。红芯浏览器被官方标榜为“安全、稳定、可控的企业浏览器”,其中“自主可控”一项已经被舆论所质疑,但是被官方放在...

9320
来自专栏Seebug漏洞平台

Huawei HG532 系列路由器远程命令执行漏洞分析

English version: https://paper.seebug.org/508/

402150
来自专栏即时通讯技术

应用保活终极总结(二):Android6.0及以上的保活实践(进程防杀篇)

在Android 4.4及以后的系统中,应用能否常驻内存,一直以来都是相当头疼的事情,尤其移动端IM、消息推送这类应用,为了保证“全时在线”的概念,真是费尽了心...

85820
来自专栏黑白安全

45种撸进后台的方法

2、到Google,搜索一些关键字,edit.asp? 韩国肉鸡为多,多数为MSSQL数据库! 

2K70
来自专栏网络安全防护

墨者安全分享:CC攻击的变异品种--慢速攻击

对网络安全有过一定了解的人肯定都听过DDOS攻击和CC攻击,DDOS主要针对IP攻击,CC攻击主要是用来攻击网页的,两者都是通过控制大量僵尸网络肉鸡流量对目标发...

21030
来自专栏云鼎实验室的专栏

【黑客解析】黑客是如何实现数据库勒索的 ?

前言 每一次重要通用漏洞的爆发总是会带来一片腥风血雨,任何微小的漏洞,基于43亿IPv4地址这个大基数,总是可以被放大! 从MongoDB开始到MySQL,黑客...

2.6K70
来自专栏腾讯技术工程官方号的专栏

你不知道的Android SDK安全测试

image.png 作者介绍:anglia,2014年加入腾讯TEG,一直致力于信鸽和MTA两款产品的移动终端 引言 作为Android手机用户中的一枚残粉...

32450

扫码关注云+社区

领取腾讯云代金券