关键概念
Arduino
一套开源的电子原型平台,包含开发板(硬件)、Arduino IDE(软件)和一门基于 C/C++ 的简化编程语言。它把复杂的单片机开发封装成"接线 + 几行代码",让艺术家、学生、创客也能快速做出交互式电子作品。2005 年诞生于意大利伊夫雷亚。
开源硬件 (Open-Source Hardware)
电路原理图、PCB 布线、引脚定义全部公开,任何人都可以复制、修改、生产。正因如此市面上出现了大量兼容板(价格更低),它们和官方板运行完全相同的代码。开源也意味着庞大的社区、海量教程和现成的库。
单片机 / 微控制器 (MCU)
把 CPU、内存(RAM)、程序存储(Flash)、输入输出接口集成在一颗芯片上的"微型电脑"。它没有操作系统、开机即运行你烧录的程序,适合控制类任务。Arduino Uno 的大脑就是 Atmel(现 Microchip) 的 ATmega328P 单片机。
ATmega328P
Uno/Nano 使用的 8 位 AVR 单片机。核心参数:主频 16MHz、32KB Flash(存程序)、2KB SRAM(存变量)、1KB EEPROM(掉电保存数据)、14 个数字引脚、6 个模拟输入。资源虽小,却足以驱动传感器、显示屏和电机。
GPIO(通用输入输出引脚)
General Purpose Input/Output。开发板边缘那一排排金属针脚,每一个都可以被软件配置为"输入"(读取按键、传感器)或"输出"(点亮 LED、驱动蜂鸣器)。数字引脚只有高/低两种电平,模拟引脚可读取连续电压。
Sketch(草图)
Arduino 对"程序"的称呼,源自其艺术设计的出身。一个 Sketch 至少包含两个函数:setup() 上电只运行一次,用于初始化;loop() 在 setup 之后无限循环执行,是程序的主体。文件扩展名是 .ino。
电平 (HIGH / LOW)
数字世界只有两个状态。对 5V 板,HIGH ≈ 5V、LOW ≈ 0V;对 3.3V 板(如 ESP32),HIGH ≈ 3.3V。软件里用宏 HIGH(值为 1) 和 LOW(值为 0) 表示。混用 5V 与 3.3V 器件时要特别注意电平匹配,否则可能烧坏芯片。
Bootloader(引导程序)
出厂预烧在单片机 Flash 中的一小段程序。上电时它先运行,检查是否有新程序要通过 USB 串口上传——有就接收并写入,没有就跳转到你的 Sketch。正因为有 Bootloader,Arduino 才能只靠一根 USB 线烧录,无需额外的编程器。
Arduino 生态全景
初学者最容易迷失在"我该买哪块板、用什么软件、代码怎么进芯片"里。下图把整个链路串起来:
从想法到实物:Arduino 工作链路
═══════════════════════════════════════════════════════════
┌───────────────┐ 写代码 ┌────────────────┐
│ 你的电脑 │ ─────────→ │ Arduino IDE │
│ (Win/Mac) │ │ 编辑 .ino 文件 │
└───────────────┘ └───────┬────────┘
│ 编译成机器码 (.hex)
│ 经 USB 串口上传
▼
┌────────────────────────────────────────────────────┐
│ Arduino 开发板 (Uno) │
│ ┌──────────┐ ┌──────────────┐ ┌─────────────┐ │
│ │ USB 接口 │──→│ Bootloader │──→│ ATmega328P │ │
│ │ │ │ 接收并写 Flash│ │ 运行 Sketch │ │
│ └──────────┘ └──────────────┘ └──────┬──────┘ │
└───────────────────────────────────────────┼─────────┘
│ 控制引脚
┌───────────────────────┼──────────────┐
▼ ▼ ▼
┌────────────┐ ┌────────────┐ ┌──────────┐
│ LED / 蜂鸣器│ │ 传感器 │ │ 电机/舵机│
│ (输出) │ │ (输入) │ │ (输出) │
└────────────┘ └────────────┘ └──────────┘
为什么初学者首选 Arduino?
相比直接玩 STM32、树莓派,Arduino 屏蔽了寄存器、时钟树、交叉编译等复杂概念。一句 digitalWrite(13, HIGH) 就能点灯,一个 Servo 库就能转舵机。你把精力放在"想做什么"而不是"芯片怎么配置"上——等有了兴趣和基础,再深入底层完全来得及。
主流开发板怎么选
Arduino 家族板卡众多,加上兼容板五花八门。零基础只需记住这四类:
| 开发板 | 芯片 / 主频 | Flash / RAM | 电平 | 特点 | 适合 |
| Uno R3 | ATmega328P / 16MHz | 32KB / 2KB | 5V | 最经典、教程最多、接口宽松好接线 | 入门首选 |
| Nano | ATmega328P / 16MHz | 32KB / 2KB | 5V | Uno 的迷你版,可焊在面包板上 | 成品/小体积 |
| Mega 2560 | ATmega2560 / 16MHz | 256KB / 8KB | 5V | 54 个数字口、多路串口 | 引脚不够用时 |
| ESP32 | Xtensa 双核 / 240MHz | 4MB / 520KB | 3.3V | 自带 WiFi + 蓝牙,性能强,可跑 Arduino | 物联网项目 |
买哪块?
纯学习、跟本教程走:Uno R3(约 20-40 元兼容板)。想做联网项目:加一块 ESP32。本教程第 1-10 章以 Uno 为主,第 11-12 章切换到 ESP32 讲联网。建议直接买一套"Arduino 入门套件",含面包板、杜邦线、LED、电阻、传感器等,省得一件件凑。
Uno 引脚布局与供电
拿到板子先认清它的接口,接线才不会出错:
Arduino Uno R3 引脚速览(俯视)
数字引脚 D0 ~ D13 (可输入/输出)
┌──────────────────────────────────────────┐
│ D13 D12 ~D11 ~D10 ~D9 D8 D7 ~D6 ~D5 ... │ ~ 号 = 支持 PWM
│ │
│ [ USB ] [ DC 电源 ] │ 供电: USB 5V 或 DC 7-12V
│ │
│ IOREF RST 3V3 5V GND GND Vin A0 A1 A2 A3 A4 A5 │
└──────────────────────────────────────────┘
电源引脚区 模拟输入 A0~A5
关键引脚说明:
5V ── 输出稳定 5V,给传感器/模块供电(勿超 ~500mA)
3V3 ── 输出 3.3V,给 3.3V 器件供电
GND ── 地(0V 参考点),所有回路必须共地!
Vin ── 外部电源输入(也可从此取未稳压电压)
D0/D1── 兼作串口 RX/TX,调试时尽量别占用
~引脚── D3 D5 D6 D9 D10 D11 支持 analogWrite (PWM)
A0~A5── 模拟输入,也可当普通数字口(A0=14...A5=19)
供电与电流的铁律
Uno 的单个 IO 引脚最大只能输出/吸入约 20mA(绝对上限 40mA),全部引脚总和不超过 200mA。因此绝不能用引脚直接驱动电机、大功率 LED 灯带——必须经过三极管/MOSFET/驱动模块,并用外部电源供电。点普通 LED 时也务必串一个限流电阻(220Ω~1kΩ)。
第一个程序:Blink(闪烁 LED)
Uno 板载有一颗连接在 D13 的 LED(丝印标 L),不接任何外设就能测试。这是所有创客的"Hello World"。
/*
* Blink — 让板载 LED 每秒闪烁一次
* D13 引脚已连接一颗板载 LED,无需外部接线
*/
// LED_BUILTIN 是内置宏,在 Uno 上等于 13
const int ledPin = LED_BUILTIN;
// setup() 上电后只执行一次,用于初始化
void setup() {
pinMode(ledPin, OUTPUT); // 把 13 号引脚设为输出模式
}
// loop() 会被无限重复调用,是程序主体
void loop() {
digitalWrite(ledPin, HIGH); // 引脚输出高电平 → LED 亮
delay(1000); // 等待 1000 毫秒 = 1 秒
digitalWrite(ledPin, LOW); // 引脚输出低电平 → LED 灭
delay(1000); // 再等 1 秒,然后 loop 从头再来
}
代码逐行读懂
const int ledPin = 13; 用一个有名字的常量代替裸数字 13,日后改引脚只需改一处。pinMode(pin, OUTPUT) 告诉单片机这个引脚将输出电压。digitalWrite(pin, HIGH/LOW) 真正设置电平。delay(ms) 让程序"卡"在这里等待指定毫秒——注意 delay 期间 CPU 什么都做不了,第 9 章会讲更优雅的非阻塞写法。
setup() 与 loop() 的执行流程
Sketch 生命周期
上电 / 复位
│
▼
┌─────────────┐
│ setup() │ 只跑一次
│ 初始化引脚 │ 设波特率、启动库…
└──────┬──────┘
│
▼
┌─────────────┐ ◄──────────┐
│ loop() │ │
│ 主逻辑 │ │ 自动循环
│ 读传感器 │ │ (跑完立刻重来)
│ 控制输出 │ ────────────┘
└─────────────┘
只要不断电,loop() 就永远转下去 —— 这就是嵌入式的"永动"本质。
上传步骤(下一章详解)
此处先建立整体印象,第 2 章会手把手带你装 IDE:
① 用 USB 数据线连接 Uno 和电脑
② 打开 Arduino IDE,粘贴上面的 Blink 代码
③ 工具 → 开发板 → 选 "Arduino Uno"
④ 工具 → 端口 → 选出现的 COMx / /dev/cu.usbmodem…
⑤ 点击"→"上传按钮,等待 "上传完成"
⑥ 板载 L 灯开始每秒闪一次 —— 成功!
上传失败?先查这三点
① 用的是数据线不是纯充电线(很多线只有电源,无数据);② 端口选对了没;③ 开发板型号选对了没(兼容 Nano 有旧/新 Bootloader 之分,选错处理器会报错)。90% 的新手卡点都在这里。
本章小结
Arduino 是一套开源电子原型平台,用简化的 C/C++ 让零基础也能快速做交互硬件。它的核心是单片机(Uno 用 ATmega328P,8 位、16MHz、32KB Flash/2KB RAM),靠出厂预烧的 Bootloader 实现"一根 USB 线即可烧录"。选板原则:学习用 Uno R3,物联网加 ESP32,引脚不够上 Mega 2560,注意 ESP32 是 3.3V 电平。开发板边缘是 GPIO:数字引脚只有 HIGH/LOW 两态,带 ~ 号的支持 PWM,A0-A5 是模拟输入,电源区有 5V/3V3/GND/Vin,所有回路必须共地。IO 引脚单口最大约 20mA,驱动电机/灯带必须外部供电+驱动电路,点 LED 要串限流电阻。每个 Sketch 由 setup()(上电执行一次,做初始化)和 loop()(无限循环,主逻辑)构成。第一个程序 Blink 三步搞定:pinMode 设方向、digitalWrite 设电平、delay 延时。