LV01-01-AliOSThings-05-esp8266

本文主要是esp8266开发板简介与esp8266工程创建、编译和烧写运行的相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。

点击查看使用工具及版本
Windows版本 windows11
Ubuntu版本 Ubuntu22.04的64位版本
VMware® Workstation 16 Pro 16.2.3 build-19376536
终端软件 MobaXterm(Professional Edition v23.0 Build 5042 (license))
点击查看本文参考资料
分类 网址 说明
官方网站 阿里云 阿里云官网主页
阿里生活物联平台 生活物联网平台(飞燕平台)主页
AliGenie 天猫精灵开放平台AliGenie主页
阿里物联网平台 阿里物联网平台主页
Bluetooth 技术网站 蓝牙协议规范什么的可以来这里找
Telink Telink | Chips for a Smarter IoT (telink-semi.com)
Telink中文官网
开发手册 AliOS Things开发指南 AliOS Things开发指南,这里是最新版本,可以直接从官网找到
AliOS Things开发指南 AliOS Things应用开发指南,这里应该是3.3版本的完整开发文档
AliOS Things开发指南(3.0) AliOS Things应用开发指南,这里应该是3.0版本的完整开发文档
生活物联网平台开发文档 生活物联网平台(飞燕平台)开发文档
《设备端开发指南》
Wi-Fi IoT品类定义与功能开发 天猫精灵IoT开放平台——Wi-Fi IoT品类定义与功能开发
硬件平台 mk3080 WiFi开发板 WiFi开发板使用指南-阿里云开发者社区
esp8266开发板 一个教程:ESP8266-NodeMCU开发板详解-太极创客 (taichi-maker.com)
TLSR8258 Datasheet Datasheet for Telink BLE + IEEE802.15.4 MultiStandard Wireless SoC TLSR8258
参考资料 AliOS Things 3.0 应用开发指南 这个只是一篇参考文章,里面是一些环境搭建相关的,可以参考
IP知识百科 - 华为 (huawei.com) IP的一些相关知识点
点击查看相关文件下载
分类 网址 说明
蓝牙规范相关文档 Core Specification 5.2 核心规格 5.2,该规范定义了创建可互操作的Bluetooth 设备所需的技术。
《Core_v5.2.pdf》
Mesh Model(v1.1) 本Bluetooth 规范定义了模型(以及它们所需的状态和消息),这些模型用于在mesh 网络中的节点上执行基本功能,超出了Bluetooth Mesh 配置文件 规范中定义的基础模型。
本规范包括定义跨设备类型标准功能的通用模型,以及支持关键mesh 场景的模型,如照明控制、传感器、时间和场景。
《MshMDL_v1.1.pdf》
Mesh Profile(v1.0.1) 该Bluetooth 规范定义了基本要求,以实现可互操作的mesh 网络解决方案,用于Bluetooth 低能量无线技术。
《MshPRFv1.0.1.pdf》
Mesh Device Properties 本规范包含Bluetooth Mesh 配置文件 和Bluetooth Mesh 模型规范所要求的设备属性的定义。
但是跟之前的有些区别,我主要看的之前的版本:《MMeshDeviceProperties_v1.2.pdf》
GATT Specification Supplement GATT Specification Supplement | Bluetooth® Technology Website。
好像可以在线看:《GATT Specification Supplement》
Assigned Numbers GATT的一些类型定义可以在这里找。
AliOS Things alios-things/AliOS-Things Gitee上的AliOSThings SDK源码仓库
alibaba/AliOS-Things GitHub上的AliOSThings SDK源码仓库
天猫精灵蓝牙Mesh协议栈 alibaba-archive/genie-bt-mesh-stack GitHub上的天猫精灵蓝牙Mesh协议栈源码仓库。
之前是在alibaba/genie-bt-mesh-stack这个仓库。
写笔记的时候最新提交为faf523618a6a2560090fc423222b9db80984bb7a
蓝牙Mesh设备开发指南 阿里云生活服务平台开发手册——蓝牙设备开发一节中的内容

我这里没有esp8266开发板,所以仅仅是根据课程做个笔记,并没有进行实操,但是其实它是跟mk3080很类似的。

一、esp8266开发板介绍

1. 开发板简介

esp8266 指的是一个wifi SOC 芯片。下面的开发板,学名叫nodeMcu:

image-20200707141942899

NodeMCU是一个开源的IoT物联网硬件开发板,由于它支持WIFI功能且使用方法十分类似Arduino开发板。NodeMCU尺寸与Arduino Nano类似。它并不是Arduino团队开发的,但是我们也可以使用Arduino IDE 对它进行开发。作为万物互联的IoT基础,首先物联网控制板的成本不能过高。高昂的物联网控制元件不利于项目成本控制也不利于广大创客爱好者学习和使用它。在这一点上,NodeMCU比树莓派以及Arduino家族的IoT平台等更具优势。

2. ESP8266和NodeMCU?

在一些的网站或资料中,有时是用ESP8266有时是用NodeMCU。那么ESP8266和NodeMCU之间具体是什么关系呢?

ESP8266是一块芯片,如下图所示:

img

而NodeMCU是以ESP8266为核心的开发板,如下图:

img

这里有一个官网,但是开发板跟上边的图不太一样,作为参考吧:NodeMcu – 像Arduino一样简单的开源可编程固件,还有Wifi哦!

3. 产品特性与参数

NodeMcu是一款运行于乐鑫ESP8266芯片之中的可编程固件。它以lua语言为基础,同时提供了封装esp8266硬件操作的高级API,可以让开发者以类似于arduino的方式与底层硬件打交道,使软件开发人员轻松操作设备。同时NodeMcu还提供了时间驱动型的网络API,Nodejs风格的编程方式更是让互联网开发人员如鱼得水。

目前NodeMcu推出的第一代开发板名字是NodeMcu Dev Kit。ESP8266封装模块ESP12进行扩展,包括了∶

  • (1)D1~D10:均可复用为GPIO,PWM,I2C,1-Wire

  • (2)AO:1路ADC

  • (3)USB供电

  • (4)USB转串口调试接口

可用RAM为20Kbyte:目前采用512K Flash,用户可用存储空间150Kbyte。同时使用NodeMcu Flash Programmer自动烧写固件。低成本的ESP8266硬件、高度抽象NodeMcuAPI将助推众多开发者们的创造性想法,让我们的原型开发快速推进。网上挺多类型开发板的,就十来块,一般都会赠送详细的资料的。就例如下边就是我随便找的一款:

image-20231107223723982

各个引脚对应情况如下:

image-20200707142021427

4. 开发板接口

4.1 引脚概述

我们以下面这款开发板,简单了解一下exp8266开发板吧:

nodemcu引脚名称

NodeMCU开发板的引脚名指的是开发板上印刷的文字。通常这些引脚名都是一个字符接一个数字的组合,如:D0、D1、A0… 我们会用“开发板引脚”或直接使用“引脚”来表示它们。简而言之,只要您看到GPIO这几个字母,就说明是芯片引脚,而没有GPIO这几个字母,那肯定是指开发板引脚。

ESP8266芯片的GPIO与开发板的引脚是连在一起的。但是GPIO与开发板引脚又是如何相互连接的呢?如下图所示:

ESP8266-NodeMCU引脚功能

特殊引脚情况说明:

(1)GPIO2引脚 在NodeMCU开发板启动时是不能连接低电平的。

(2)GPIO15引脚在开发板运行中一直保持低电平状态。因此请不要使用GPIO15引脚来读取开关状态或进行I2C通讯。

(3)GPIO0引脚在开发板运行中需要一直保持高电平状态。否则ESP8266将进入程序上传工作模式也就无法正常工作了。我们无需对GPIO0引脚进行额外操作,因为NodeMCU的内置电路可以确保GPIO0引脚在工作时连接高电平而在上传程序时连接低电平。

4.2 上拉电阻/下拉电阻

GPIO 0-15引脚都配有内置上拉电阻。这一点与Arduino十分类似。GPIO16 引脚配有内置下拉电阻。

4.3 模拟输入

ESP8266 只有一个模拟输入引脚(该引脚通过模拟-数字转换将引脚上的模拟电压数值转化为数字量)。此引脚可以读取的模拟电压值为 0 – 1.0V。请注意:ESP8266 芯片模拟输入引脚连接在1.0V以上电压可能损坏ESP8266芯片。

以上所描述的是针对ESP8266芯片的引脚。而对于NodeMCU开发板引脚,情况就不同了。NodeMCU开发板配有降压电路。我们可以用NodeMCU开发板的模拟输入引脚读取0-3.3V的模拟电压信号。这个主要还是要看开发板的电路了。

4.4 通讯

4.4.1 串行端口

ESP8266有2个硬件串行端口(UART)。串行端口0(UART0)使用GPIO1和GPIO3引脚。其中GPIO1引脚是TX0,GPIO3是RX0。串行端口1(UART1)使用GPIO2和GPIO8引脚。其中GPIO2引脚是TX1,GPIO8是RX1。请注意,由于GPIO8被用于连接闪存芯片,串行端口1只能使用GPIO2来向外发送串行数据。

4.4.2 I2C

ESP8266只有软件模拟的I²C端口,没有硬件I2C端口。也就是说我们可以使用任意的两个GPIO引脚通过软件模拟来实现I2C通讯。ESP8266的数据表(datasheet)中,GPIO2标注为SDA,GPIO14标注为SCL。

4.4.3 SPI

ESP8266的SPI端口情况如下:

1
2
3
4
GPIO14——CLK
GPIO12——MISO
GPIO13——MOSI
GPIO15——CS(SS)

二、创建esp8266工程

1. 创建工程

1
aos create project -b esp8266 -t helloworld_demo helloworld_esp8266
image-20231111123922894

2. 编译工程

2.1 编译命令

1
aos make

编译成功会有如下信息提示:

image-20231111124539348

2.2 编译信息简析

初次编译最开始会有如下信息打印:

image-20231111124700464

最开始的时候会检查编译工具链,如上图,发现esp8266工程的交叉编译工具链为gcc-xtensa-lx106,但是我们的系统没有安装,所以就会开始自动安装。之后才会进行整个工程的编译。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
hk@vm:~/6AliOS/helloworld_esp8266$ aos make
aos-cube version: 0.5.11
Check if required tools for esp8266 exist
Toolchain gcc-xtensa-lx106 missing, start download ...
https://gitee.com/alios-things/gcc-xtensa-lx106-linux.git -> /home/hk/AliOS-Things-SDK/build/compiler/gcc-xtensa-lx106/Linux64
正克隆到 'gcc-xtensa-lx106'...
remote: Enumerating objects: 1110, done.
remote: Counting objects: 100% (1110/1110), done.
remote: Compressing objects: 100% (712/712), done.
remote: Total 1110 (delta 371), reused 1106 (delta 371), pack-reused 0
接收对象中: 100% (1110/1110), 25.64 MiB | 4.57 MiB/s, 完成.
处理 delta 中: 100% (371/371), 完成.
检查连接... 完成。
Download toolchain gcc-xtensa-lx106 succeed
Parsing all components ...

Build Configuration:
====================
App: helloworld_esp8266
Board: esp8266
====================

Making config file for first time
# 检查 工程所需所有组件
processing components: helloworld_esp8266 esp8266 app_adapter
*** All Components: helloworld_esp8266 esp8266 app_adapter osal_aos mcu_esp8266 kernel_init network rhino yloop newlib_stub lwip netmgr arch_xtensa_lx106 ulog lib_rbtree vfs kv
Build AOS Now
# 查找编译工具链路径
TOOLCHAIN_PATH=
# 根据工程中不同组件,生成组件.o
Compiling helloworld_esp8266
Compiling board_esp8266
Compiling app_adapter
Compiling osal_aos
Compiling mcu_esp8266
/home/hk/AliOS-Things-SDK/platform/mcu/esp8266/hal/uart.c: In function 'hal_uart_send':
/home/hk/AliOS-Things-SDK/platform/mcu/esp8266/hal/uart.c:24:9: warning: implicit declaration of function 'uart0_write_char' [-Wimplicit-function-declaration]
uart0_write_char(pdata[i]);
^
/home/hk/AliOS-Things-SDK/platform/mcu/esp8266/hal/misc.c: In function 'hal_reboot':
/home/hk/AliOS-Things-SDK/platform/mcu/esp8266/hal/misc.c:32:5: warning: implicit declaration of function 'rom_i2c_writeReg' [-Wimplicit-function-declaration]
rom_i2c_writeReg(0x67, 4, 1, 8);
^
/home/hk/AliOS-Things-SDK/platform/mcu/esp8266/hal/misc.c: In function 'hal_reboot_bank':
/home/hk/AliOS-Things-SDK/platform/mcu/esp8266/hal/misc.c:44:5: warning: implicit declaration of function 'ota_msleep' [-Wimplicit-function-declaration]
ota_msleep(300);
^
/home/hk/AliOS-Things-SDK/platform/mcu/esp8266/hal/misc.c:48:9: warning: implicit declaration of function 'system_upgrade_process' [-Wimplicit-function-declaration]
system_upgrade_process();
^
/home/hk/AliOS-Things-SDK/platform/mcu/esp8266/hal/misc.c:49:9: warning: implicit declaration of function 'system_restart_in_nmi' [-Wimplicit-function-declaration]
system_restart_in_nmi();
^
Compiling kernel_init
Compiling rhino
/home/hk/AliOS-Things-SDK/platform/mcu/esp8266/hal/wifi_port.c: In function 'register_wlan_mgnt_monitor_cb':
/home/hk/AliOS-Things-SDK/platform/mcu/esp8266/hal/wifi_port.c:733:9: warning: implicit declaration of function 'wifi_set_sta_rx_probe_req' [-Wimplicit-function-declaration]
wifi_set_sta_rx_probe_req(esp_mgmt_filter);
^
/home/hk/AliOS-Things-SDK/platform/mcu/esp8266/hal/wifi_port.c: At top level:
/home/hk/AliOS-Things-SDK/platform/mcu/esp8266/hal/wifi_port.c:801:5: warning: initialization from incompatible pointer type [enabled by default]
.get_wireless_info = get_wireless_info,
^
/home/hk/AliOS-Things-SDK/platform/mcu/esp8266/hal/wifi_port.c:801:5: warning: (near initialization for 'aos_wifi_esp8266.get_wireless_info') [enabled by default]
Compiling yloop
Compiling newlib_stub
Compiling netmgr
Compiling arch_xtensa_lx106
Compiling ulog
Compiling lib_rbtree
Compiling vfs
Compiling kv
Making /home/hk/6AliOS/helloworld_esp8266/out/helloworld_esp8266@esp8266/ld/eagle.app.v6.new.1024.app1.ld
# 根据工程中不同组件,生成组件.a 静态库
Making /home/hk/6AliOS/helloworld_esp8266/out/helloworld_esp8266@esp8266/libraries/helloworld_esp8266.a
Making /home/hk/6AliOS/helloworld_esp8266/out/helloworld_esp8266@esp8266/libraries/board_esp8266.a
Making /home/hk/6AliOS/helloworld_esp8266/out/helloworld_esp8266@esp8266/libraries/osal_aos.a
Making /home/hk/6AliOS/helloworld_esp8266/out/helloworld_esp8266@esp8266/libraries/app_adapter.a
Making /home/hk/6AliOS/helloworld_esp8266/out/helloworld_esp8266@esp8266/libraries/mcu_esp8266.a
Making /home/hk/6AliOS/helloworld_esp8266/out/helloworld_esp8266@esp8266/libraries/kernel_init.a
Making /home/hk/6AliOS/helloworld_esp8266/out/helloworld_esp8266@esp8266/libraries/rhino.a
Making /home/hk/6AliOS/helloworld_esp8266/out/helloworld_esp8266@esp8266/libraries/yloop.a
Making /home/hk/6AliOS/helloworld_esp8266/out/helloworld_esp8266@esp8266/libraries/newlib_stub.a
Making /home/hk/6AliOS/helloworld_esp8266/out/helloworld_esp8266@esp8266/libraries/netmgr.a
Making /home/hk/6AliOS/helloworld_esp8266/out/helloworld_esp8266@esp8266/libraries/arch_xtensa_lx106.a
Making /home/hk/6AliOS/helloworld_esp8266/out/helloworld_esp8266@esp8266/libraries/ulog.a
Making /home/hk/6AliOS/helloworld_esp8266/out/helloworld_esp8266@esp8266/libraries/lib_rbtree.a
Making /home/hk/6AliOS/helloworld_esp8266/out/helloworld_esp8266@esp8266/libraries/vfs.a
Making /home/hk/6AliOS/helloworld_esp8266/out/helloworld_esp8266@esp8266/libraries/kv.a

# 生成bin文件和其他可执行文件
Making helloworld_esp8266@esp8266.elf

Making helloworld_esp8266@esp8266.hex
Making helloworld_esp8266@esp8266.bin

AOS MEMORY MAP
|=================================================================|
| MODULE | ROM | RAM |
|=================================================================|
| app_adapter | 76 | 12 |
| arch_xtensa_lx106 | 2662 | 2784 |
| board_esp8266 | 1326 | 44 |
| helloworld_esp8266 | 98 | 0 |
| kernel_init | 112 | 0 |
| kv | 2224 | 24 |
| libcirom | 27509 | 1200 |
| libcrypto | 14512 | 0 |
| libgcc | 2167 | 0 |
| libhal | 37 | 0 |
| liblwip | 30717 | 1596 |
| libmain | 30412 | 708 |
| libnet80211 | 42675 | 3213 |
| libphy | 48158 | 461 |
| libpp | 43992 | 18013 |
| libwpa | 17240 | 626 |
| mcu_esp8266 | 8162 | 559 |
| netmgr | 94 | 8 |
| newlib_stub | 363 | 0 |
| osal_aos | 670 | 0 |
| rhino | 11733 | 3288 |
| ulog | 573 | 7 |
| vfs | 1440 | 1113 |
| yloop | 2000 | 32 |
| *fill* | 2072 | 124 |
|=================================================================|
| TOTAL (bytes) | 291024 | 33812 |
|=================================================================|
Generate standard flash images /home/hk/6AliOS/helloworld_esp8266/out/helloworld_esp8266@esp8266/binary/helloworld_esp8266@esp8266.elf
bin crc: 1aea8349
Generate Raw OTA image: /home/hk/6AliOS/helloworld_esp8266/out/helloworld_esp8266@esp8266/binary/helloworld_esp8266@esp8266_ota.bin ...
Generate Compressed OTA image: /home/hk/6AliOS/helloworld_esp8266/out/helloworld_esp8266@esp8266/binary/helloworld_esp8266@esp8266_ota.bin.xz ...
293396
db30897183ee121f3d671142f811b420
195860
e34c3d7bddf89523beab64e81ef38398
# 完成编译
Build complete: helloworld_esp8266@esp8266

注意: esp8266 没有编译bootloader文件,mk3080却进行了编译并得到了成果物(不过我们似乎并不需要重新烧写bootloader)。为什么?这是因为esp8266厂家的bootloader不开源,他们提供boot.bin文件,我们直接拿来烧写就可以了,mk3080的是开源的,我们可以自己编译。

3. 烧写到开发板

3.1 烧写哪一个文件?

image-20231111125611643

还是烧写这个bin文件,只是对于esp8266来说,我们还需要两外一个文件,它在 AliOS-Things-SDK/platform/mcu/esp8266/bsp 目录下:

image-20231111125829624

这个是bootloader程序的bin文件,烧写的时候要用,名字中的921600表示波特率,意思就是这个boot程序会初始化串口,串口的波特率为921600,烧写的时候波特率记得对应。

3.2 烧写工具

我们使用的是flash_download_tools。我们可以去乐鑫的官网下:工具|乐鑫科技 (espressif.com.cn)

image-20231111131359316

下载解压后我们会得到以下文件:

image-20231111131431356

我们打开后界面如下:

image-20231111131943194

会首先弹出框①,然后我们选择这个DownloadTool之后就会弹出框②,这个框②就是下载界面。

3.3 烧写文件

我们得到上边的两个bin文件后,在烧写工具做如下配置:

image-20231111132703736

波特率为bootloader初始化串口的波特率,然后我我们点击啊START等下载完成就好了

3.4 串口查看打印信息

烧写完成后,我们还是使用MobaXterm连接对应的串口,然后复位开发板,就看到以下打印信息说明我们烧写成功:

image-20200707181046030