Arduino 基础知识
Arduino 编程语言基于 C/C++,专为 Arduino 及其兼容的微控制器平台设计。它通过一套简单易懂的函数库和核心结构,极大地简化了微控制器的编程,让初学者和专业人士都能轻松地操控硬件。
1. 运行第一个程序
接下来我们将运行一个经典的 "Hello World" 程序。通过将代码上传到 ESP32 开发板,使其通过串口向电脑发送 "Hello World!"。该示例可用于测试开发环境是否正常,并帮助熟悉 Arduino 编程。
在开始之前,请确保你已经按照 此教程 配置好了开发环境。
1.1 代码
打开 Arduino IDE,复制下面的代码。
void setup() {
// 在此处的代码会运行一次:
Serial.begin(9600); // 初始化串口通信,设置波特率为 9600
while (!Serial){
; // 等待串口连接建立
};
Serial.println("Hello World!"); // 通过串口发送字符串 "Hello World!" 并换行
}
void loop() {
// 在此处的代码会一直重复运行:
}
1.2 上传程序到开发板
-
打开开发板和端口选择器:
-
选择对应的开发板。以微雪 ESP32-S3-Zero 开发板为例,搜索 “esp32-s3-zero”,选择 Waveshare ESP32-S3-Zero。
提示如果所用开发板不在列表中,可选择通用的 “ESP32XX Dev Module”。
-
先检查当前端口情况,然后按住 ESP32 开发板的 BOOT 键不放,插入 USB 数据线连接电脑,插入后松开 BOOT 键。然后选择新出现的端口,这就是 ESP32 开发板的端口。
-
在 工具 选项 , 打开 USB CDC On Boot (可选)
信息部分 ESP32 开发板(如 ESP32-S3 系列)若未集成独立的 USB 转串口芯片(如 CH340、CP2102),则需通过芯片自带的原生 USB 接口进行固件下载或串口通信。对于这类开发板,需要在 Arduino IDE 中开启 USB CDC On Boot 功能。(更多信息)
以微雪 ESP32-S3-Zero 开发板为例,就需要启用此功能。
-
最后点击上传
1.3 查看代码效果
-
代码上传成功后,打开串口监视器。
-
确保波特率和代码中的 9600 是一致的。此时,串口监视器中将显示 ESP32 通过串口发送的消息“Hello World”。
-
按下开发板上的 RESET 按钮,ESP32 会重新启动,程序从上到下再次执行,串口监视器中会再次显示一句 “Hello World”。
2. Arduino 程序结构
每个 Arduino 程序都有两个核心函数: setup()
和 loop()
函数。理解这两个函数的区别是学习 Arduino 编程的基础。
-
setup()
函数:在开发板开机或复位后只执行一次,用于初始化设置。 常用于初始化串口通信、设置引脚模式和初始化传感器和模块等。 -
loop()
函数:setup()
执行完毕后,loop()
函数会无限循环执行,是程序的主体部分。
在前面的“Hello World”示例中,Serial.println("Hello World!");
写在了 setup()
函数里,所以只会执行一次。如果想让它重复打印,可以将其移动到 loop()
函数中:
void setup() {
Serial.begin(9600);
while (!Serial){
};
}
void loop() {
Serial.println("Hello World!");
delay(1000); // 暂停程序执行 1000 毫秒(1 秒)
}
这样 "Hello World!" 就会每秒打印一次。
3. 官方库与文档
Arduino 之所以方便,就在于它提供了一套简单易懂的函数库和核心结构。熟悉这些函数,对于学习 Arduino 很重要。
3.1 "Hello World" 程序中的函数
回顾 "Hello World" 程序,其中用到了以下几个核心的 Arduino API:
void setup() {
Serial.begin(9600);
while (!Serial){
};
}
void loop() {
Serial.println("Hello World!");
delay(1000); // 等待 1 秒
}
在"Hello World"程序中,我们使用了一些基础的 Arduino 函数来实现串口通信。这里对这些函数做一个快速概述,详细的用法和更多选项可以在 Arduino 官方文档中查阅。
-
Serial
:- 这是一个预定义的对象,代表了 Arduino 开发板的硬件串口或 USB 虚拟串口。通过这个对象,我们可以让 Arduino 与电脑或其他串口设备进行文本数据的收发。
- 在 ESP32-S3 上,它通常指的是通过 USB 连接创建的虚拟串口。
- 相关文档:Serial | Arduino Documentation
-
Serial.begin()
:- 用于初始化串口通信,并设置串行数据传输的波特率(每秒位数)。常用速率有 9600、115200 等。代码中设置的波特率必须与串口监视器(或接收端)设置的波特率一致,否则可能会导致接收到的数据显示为乱码。
- 相关文档:Serial.begin() | Arduino Documentation
-
while (!Serial)
:- 在某些板子(如 ESP32)上,等待串口连接就绪。确保连接稳定后程序继续,从而避免在串口监视器打开前就尝试发送数据导致信息丢失。
Serial
对象在 USB 串口连接实际建立之前,其布尔值评估为false
。一旦连接建立(例如,在电脑上打开串口监视器后),它就评估为true
。- 相关文档:if(Serial) | Arduino Documentation
-
Serial.println()
:- 发送数据(可以是字符串、变量、数字等)到串口,并自动换行。
- 还有一个类似的函数
Serial.print(data)
,它发送数据但不自动换行。 - 相关文档:Serial.println() | Arduino Documentation
-
delay()
- 暂停程序执行指定的毫秒数。用于控制程序流程的时间间隔,例如控制 LED 闪烁的频率。
- 相关文档:delay() | Arduino Documentation
3.2 如何查询官方文档
-
ESP32 Arduino Core 文档:
- 虽然许多核心 Arduino 函数在 ESP32 上同样适用,但 ESP32 芯片功能远比传统的 Arduino Uno 强大,因此它有许多特有的 API 和库(例如用于 Wi-Fi, Bluetooth, FreeRTOS 等)。
- Arduino Core for ESP32 文档:https://docs.espressif.com/projects/arduino-esp32/en/latest/index.html
- Espressif 官方文档 (ESP-IDF): https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/ (这是底层的 SDK 文档,Arduino Core 是基于此封装的)
-
Arduino 官方参考 (Arduino Reference):
-
这是学习 Arduino 编程的权威官方资源。它详细列出了 Arduino 语言的核心函数、数据类型、结构以及常用库的用法。
-
如何使用: 在网站上,可以直接搜索函数名(如 Serial.println),或者通过左侧的分类(Variables, Functions, Libraries 等)浏览。每个条目通常都包含函数描述、语法、参数说明、返回值以及示例代码。
进行 ESP32 开发时,文档的查询顺序至关重要:
-
首选 ESP32 Arduino Core 文档:当使用与硬件外设相关的功能(如 GPIO, I2C, SPI, Wi-Fi 等)时,应最先查阅此文档。它详细说明了 ESP32 对标准 Arduino API 的特定实现、参数扩展和增强功能。
-
其次是 Arduino 官方参考:用于查询通用的、跨平台的编程语言基础(如程序结构、变量类型、基础函数等)。
养成优先查阅 ESP32 专用文档的习惯,是高效学习和开发的关键。
4. 常见问题排查
1. 端口列表中没有出现新端口
- 检查 USB 数据线是否为数据线(而非仅充电线)
- 确认是否正确按下了 BOOT 键(如果需要)
- 尝试重新插拔 USB 数据线或更换 USB 端口
2. 代码上传失败
- 确认在 Arduino IDE 中选择的开发板型号是否正确
- 检查端口选择是否正确
- 重新尝试按 BOOT 键进入下载模式
- 关闭其他可能占用串口的程序
3. 串口监视器显示乱码
- 检查串口监视器的波特率设置是否与代码中
Serial.begin()
的值一致
4. 上传成功但串口监视器无输出
- 对于原生 USB 端口的开发板,检查是否开启了 USB CDC On Boot 功能
- 确认串口监视器连接的端口正确
- 尝试按下开发板上的 RESET 按钮重启程序