跳到主要内容

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 上传程序到开发板

  • 打开开发板和端口选择器:

    EnableCDC1

  • 选择对应的开发板。以微雪 ESP32-S3-Zero 开发板为例,搜索 “esp32-s3-zero”,选择 Waveshare ESP32-S3-Zero。

    提示

    如果所用开发板不在列表中,可选择通用的 “ESP32XX Dev Module”。

    EnableCDC2

  • 先检查当前端口情况,然后按住 ESP32 开发板的 BOOT 键不放,插入 USB 数据线连接电脑,插入后松开 BOOT 键。然后选择新出现的端口,这就是 ESP32 开发板的端口。

    COM

  • 在 工具 选项 , 打开 USB CDC On Boot (可选)

    信息

    部分 ESP32 开发板(如 ESP32-S3 系列)若未集成独立的 USB 转串口芯片(如 CH340、CP2102),则需通过芯片自带的原生 USB 接口进行固件下载或串口通信。对于这类开发板,需要在 Arduino IDE 中开启 USB CDC On Boot 功能。(更多信息

    以微雪 ESP32-S3-Zero 开发板为例,就需要启用此功能。

    EnableCDC3

  • 最后点击上传

    UploadCode

1.3 查看代码效果

  • 代码上传成功后,打开串口监视器。

    Open-Serial-Monitor

  • 确保波特率和代码中的 9600 是一致的。此时,串口监视器中将显示 ESP32 通过串口发送的消息“Hello World”。

    Serial-Monitor

  • 按下开发板上的 RESET 按钮,ESP32 会重新启动,程序从上到下再次执行,串口监视器中会再次显示一句 “Hello World”。

    Reset

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 官方文档中查阅。

  1. Serial:

    • 这是一个预定义的对象,代表了 Arduino 开发板的硬件串口或 USB 虚拟串口。通过这个对象,我们可以让 Arduino 与电脑或其他串口设备进行文本数据的收发。
    • 在 ESP32-S3 上,它通常指的是通过 USB 连接创建的虚拟串口。
    • 相关文档:Serial | Arduino Documentation
  2. Serial.begin():

    • 用于初始化串口通信,并设置串行数据传输的波特率(每秒位数)。常用速率有 9600、115200 等。代码中设置的波特率必须与串口监视器(或接收端)设置的波特率一致,否则可能会导致接收到的数据显示为乱码。
    • 相关文档:Serial.begin() | Arduino Documentation
  3. while (!Serial):

    • 在某些板子(如 ESP32)上,等待串口连接就绪。确保连接稳定后程序继续,从而避免在串口监视器打开前就尝试发送数据导致信息丢失。
    • Serial 对象在 USB 串口连接实际建立之前,其布尔值评估为 false。一旦连接建立(例如,在电脑上打开串口监视器后),它就评估为 true
    • 相关文档:if(Serial) | Arduino Documentation
  4. Serial.println():

    • 发送数据(可以是字符串、变量、数字等)到串口,并自动换行。
    • 还有一个类似的函数 Serial.print(data),它发送数据但不自动换行。
    • 相关文档:Serial.println() | Arduino Documentation
  5. delay()

    • 暂停程序执行指定的毫秒数。用于控制程序流程的时间间隔,例如控制 LED 闪烁的频率。
    • 相关文档:delay() | Arduino Documentation

3.2 如何查询官方文档

  1. ESP32 Arduino Core 文档:

  2. Arduino 官方参考 (Arduino Reference):

    • 网址: https://www.arduino.cc/reference/en/

    • 这是学习 Arduino 编程的权威官方资源。它详细列出了 Arduino 语言的核心函数、数据类型、结构以及常用库的用法。

    • 如何使用: 在网站上,可以直接搜索函数名(如 Serial.println),或者通过左侧的分类(Variables, Functions, Libraries 等)浏览。每个条目通常都包含函数描述、语法、参数说明、返回值以及示例代码。

文档查询策略

进行 ESP32 开发时,文档的查询顺序至关重要:

  1. 首选 ESP32 Arduino Core 文档:当使用与硬件外设相关的功能(如 GPIO, I2C, SPI, Wi-Fi 等)时,应最先查阅此文档。它详细说明了 ESP32 对标准 Arduino API 的特定实现、参数扩展和增强功能

  2. 其次是 Arduino 官方参考:用于查询通用的、跨平台的编程语言基础(如程序结构、变量类型、基础函数等)。

养成优先查阅 ESP32 专用文档的习惯,是高效学习和开发的关键。

4. 常见问题排查

遇到问题?试试这些解决方案

1. 端口列表中没有出现新端口

  • 检查 USB 数据线是否为数据线(而非仅充电线)
  • 确认是否正确按下了 BOOT 键(如果需要)
  • 尝试重新插拔 USB 数据线或更换 USB 端口

2. 代码上传失败

  • 确认在 Arduino IDE 中选择的开发板型号是否正确
  • 检查端口选择是否正确
  • 重新尝试按 BOOT 键进入下载模式
  • 关闭其他可能占用串口的程序

3. 串口监视器显示乱码

  • 检查串口监视器的波特率设置是否与代码中 Serial.begin() 的值一致

4. 上传成功但串口监视器无输出

  • 对于原生 USB 端口的开发板,检查是否开启了 USB CDC On Boot 功能
  • 确认串口监视器连接的端口正确
  • 尝试按下开发板上的 RESET 按钮重启程序