Arduino¶
Arduino 是全球最流行的开源电子原型平台,以其==简单易用==的硬件和软件,让初学者和专业开发者都能快速实现创意。它是嵌入式开发的最佳入门选择。
一、Arduino 是什么?¶
Arduino 是一个基于==易用硬件和软件==的开源电子平台。它包含:
- 硬件:基于 AVR / ARM / ESP 等微控制器的开发板
- 软件:Arduino IDE(集成开发环境)+ Arduino 语言(基于 C/C++)
- 生态:海量开源库、扩展板(Shield)、社区教程
graph TB
A[Arduino 平台] --> B[硬件]
A --> C[软件]
A --> D[生态]
B --> B1[开发板<br>UNO / Mega / Nano]
B --> B2[扩展板 Shield<br>电机 / WiFi / 显示]
C --> C1[Arduino IDE]
C --> C2[Arduino 语言<br>基于 C/C++]
D --> D1[开源库 10000+]
D --> D2[社区教程]
D --> D3[PlatformIO 支持]
为什么选择 Arduino?
- 入门门槛低:不需要深入了解寄存器,几行代码就能控制硬件
- 跨平台:同一套 API 可运行在 AVR、ARM、ESP32 等不同芯片上
- 生态丰富:几乎所有常见传感器和模块都有现成的库
二、常见开发板对比¶
| 开发板 | 主控芯片 | 工作电压 | 数字 IO | 模拟输入 | Flash | SRAM | 时钟 | 特点 |
|---|---|---|---|---|---|---|---|---|
| UNO R3 | ATmega328P | 5V | 14 | 6 | 32KB | 2KB | 16MHz | 最经典,新手首选 |
| UNO R4 WiFi | RA4M1 (ARM) | 5V | 14 | 6 | 256KB | 32KB | 48MHz | 内置 WiFi + BLE |
| Mega 2560 | ATmega2560 | 5V | 54 | 16 | 256KB | 8KB | 16MHz | 引脚多,适合大型项目 |
| Nano | ATmega328P | 5V | 14 | 8 | 32KB | 2KB | 16MHz | 小巧,适合嵌入产品 |
| Nano 33 BLE | nRF52840 | 3.3V | 14 | 8 | 1MB | 256KB | 64MHz | BLE + 9轴 IMU |
| Leonardo | ATmega32U4 | 5V | 20 | 12 | 32KB | 2.5KB | 16MHz | 内置 USB HID |
| Due | SAM3X8E (ARM) | 3.3V | 54 | 12 | 512KB | 96KB | 84MHz | 32位 ARM,高性能 |
电压注意
- 5V 板子(UNO、Mega、Nano):IO 口输出 5V,可直接驱动大多数模块
- 3.3V 板子(Due、Nano 33):IO 口输出 3.3V,连接 5V 模块需要==电平转换==
- 混用电压可能烧毁芯片!
三、Arduino UNO R3 核心架构¶
以最经典的 UNO R3 为例:
graph TB
subgraph "ATmega328P"
CPU[AVR CPU<br>8 位 RISC<br>16MHz]
FLASH[Flash 32KB<br>程序存储]
SRAM[SRAM 2KB<br>运行内存]
EEPROM[EEPROM 1KB<br>掉电保存]
GPIO_M[GPIO 模块]
TIMER_M[3 个定时器<br>Timer0/1/2]
ADC_M[ADC 10 位<br>6 通道]
UART_M[UART 串口]
SPI_M[SPI 主/从]
I2C_M[I2C TWI]
end
CPU --> FLASH
CPU --> SRAM
CPU --> EEPROM
CPU --> GPIO_M
CPU --> TIMER_M
CPU --> ADC_M
CPU --> UART_M
CPU --> SPI_M
CPU --> I2C_M
GPIO_M --> PIN[数字引脚 D0-D13<br>模拟引脚 A0-A5]
UART_M --> USB[USB-B 接口<br>CH340/ATmega16U2]
存储器区别
| 存储器 | 大小 | 用途 | 掉电保持 |
|---|---|---|---|
| Flash | 32KB | 存储程序代码(Sketch) | ✅ |
| SRAM | 2KB | 运行时变量 | ❌ |
| EEPROM | 1KB | 用户数据(设置、校准值) | ✅ |
四、开发环境搭建¶
- 访问 arduino.cc 下载 Arduino IDE 2.x
- 安装后打开,进入 File → Preferences
- 连接开发板,选择 Tools → Board → Arduino UNO
- 选择 Tools → Port → COMx(Windows)或
/dev/ttyUSBx(Linux) - 点击 Upload(→ 箭头)上传程序
五、编程模型¶
Arduino 程序(称为 Sketch)由两个核心函数组成:
void setup() {
// 初始化代码,上电后只执行一次
// 配置引脚模式、初始化串口、初始化库等
}
void loop() {
// 主循环,setup() 之后不断重复执行
// 读取传感器、控制输出、处理逻辑等
}
graph LR
A[上电/复位] --> B[setup]
B --> C[loop]
C --> C
实际执行原理
Arduino 框架在底层的 main() 函数中这样调用:
第一个程序:闪烁 LED¶
void setup() {
pinMode(LED_BUILTIN, OUTPUT); // 设置内置 LED 引脚为输出模式
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // 点亮 LED
delay(1000); // 等待 1 秒
digitalWrite(LED_BUILTIN, LOW); // 熄灭 LED
delay(1000); // 等待 1 秒
}
LED_BUILTIN
LED_BUILTIN 是 Arduino 预定义的宏,指向板载 LED 的引脚号。UNO 上是 D13。
六、Arduino 语言速查¶
Arduino 语言本质是 C/C++,额外提供了一套简洁的 API:
数字 IO¶
| 函数 | 功能 | 示例 |
|---|---|---|
pinMode(pin, mode) |
设置引脚模式 | pinMode(13, OUTPUT) |
digitalWrite(pin, val) |
数字输出 | digitalWrite(13, HIGH) |
digitalRead(pin) |
数字输入 | int val = digitalRead(2) |
模拟 IO¶
| 函数 | 功能 | 示例 |
|---|---|---|
analogRead(pin) |
模拟输入(0~1023) | int val = analogRead(A0) |
analogWrite(pin, val) |
PWM 输出(0~255) | analogWrite(9, 128) |
analogReference(type) |
设置参考电压 | analogReference(INTERNAL) |
时间函数¶
| 函数 | 功能 | 示例 |
|---|---|---|
delay(ms) |
毫秒延时 | delay(1000) |
delayMicroseconds(us) |
微秒延时 | delayMicroseconds(100) |
millis() |
系统运行毫秒数 | unsigned long t = millis() |
micros() |
系统运行微秒数 | unsigned long t = micros() |
串口通信¶
| 函数 | 功能 | 示例 |
|---|---|---|
Serial.begin(baud) |
初始化串口 | Serial.begin(115200) |
Serial.print(data) |
发送数据 | Serial.print("Hello") |
Serial.println(data) |
发送数据 + 换行 | Serial.println(val) |
Serial.available() |
可读字节数 | if (Serial.available()) |
Serial.read() |
读取一字节 | char c = Serial.read() |
七、内容导航¶
| 章节 | 核心内容 | 学习要点 |
|---|---|---|
| GPIO | 数字输入输出、模拟输入、PWM 输出 | 引脚模式、上下拉电阻、ADC 原理、PWM 频率 |
| 通信协议 | Serial、SPI、I2C、软件串口 | 各协议原理与接线、常用函数、多设备通信 |
| 中断与定时器 | 外部中断、定时器中断、看门狗 | 中断优先级、去抖、定时器配置、WDT |
| 常用传感器与执行器 | DHT11、超声波、舵机、OLED、步进电机 | 传感器驱动编写、库的使用、接线图 |
| 库管理与进阶 | 库安装与管理、自定义库、EEPROM、低功耗 | 库结构、EEPROM 读写、Sleep 模式 |
Arduino 和 STM32 怎么选?
- 快速原型验证、教学入门、小型项目 → 选 Arduino
- 产品级开发、高性能需求、复杂外设控制 → 选 STM32
- 需要 WiFi/BLE → 选 ESP32(可用 Arduino 框架编程)
- 实际上,Arduino 框架也可以运行在 STM32 和 ESP32 上,三者并不矛盾!