Chapter 02 · Arduino 入门

Arduino IDE 与 Sketch

安装并熟悉 IDE,学会用开发板管理器和库管理器扩展功能,理解从源码到芯片的编译上传全过程。

课程进度17%

关键概念

Arduino IDE
官方集成开发环境,集编辑器、编译器(avr-gcc)、上传工具(avrdude)、串口监视器于一体。目前主推 IDE 2.x(基于 Electron,含代码补全和实时调试),老项目也常见 1.8.x。从 arduino.cc/en/software 免费下载。
Sketch(草图/工程)
Arduino 的程序单元,主文件后缀 .ino。每个 Sketch 必须放在同名文件夹里(例如 Blink/Blink.ino)。IDE 会把文件夹内所有 .ino 拼接后再编译。默认保存在"文档/Arduino"目录下。
开发板管理器 (Boards Manager)
用来安装不同芯片的"支持包"。IDE 默认只带 AVR(Uno/Nano/Mega)。要用 ESP32/ESP8266,需先在"首选项"填入附加开发板网址,再到开发板管理器搜索安装对应内核。装完才能在开发板列表里选到它。
库管理器 (Library Manager)
Arduino 的"应用商店"。库是别人封装好的代码包(如驱动 DHT11、OLED 的库),一键安装即可 #include 使用,免去自己造轮子。搜索名字→安装→在代码顶部包含头文件。也可手动导入 .zip 库。
串口 / COM 端口
电脑通过 USB 虚拟出的串行通信通道,用于上传程序和收发调试信息。Windows 显示为 COM3 之类,macOS/Linux 显示为 /dev/cu.usbmodemXXXX/dev/ttyUSB0。插上板子才会出现,需在工具菜单里选中它。
编译 (Compile / Verify)
把人类可读的 C++ 代码翻译成单片机能执行的机器码(.hex)。IDE 里点"✓"验证按钮即触发。编译还会检查语法错误——报红时先看最下方黑色窗口的第一条错误,行号会告诉你出错位置。
上传 (Upload)
把编译好的 .hex 通过串口发送给板上的 Bootloader,写入 Flash。点"→"按钮触发,它会先自动编译一次。上传瞬间板上 RX/TX 灯会快闪。上传成功后程序立即从头运行。
串口监视器 & 绘图器
IDE 自带两个调试利器。监视器(Serial Monitor)显示 Serial.print() 输出的文本,是 Arduino 世界的"printf 调试法"。绘图器(Serial Plotter)把数字实时画成折线图,非常适合观察传感器波形。

安装 Arduino IDE

三大平台步骤略有不同,但都从官网 arduino.cc/en/software 下载:

Windows:下载 .exe 安装包,一路 Next。安装过程会弹出
         "是否安装 USB 驱动",全部勾选允许(这是识别板子的关键)。

macOS:  下载 .dmg,把 Arduino IDE 拖进"应用程序"。
         首次打开右键→打开,绕过未知开发者提示。

Linux:  下载 .AppImage,chmod +x 后双击运行;
         或 Debian/Ubuntu 用 apt / Flatpak 安装。
         需把当前用户加入 dialout 组才能访问串口:
         sudo usermod -a -G dialout $USER  (之后重新登录)
兼容板的 CH340 驱动

官方 Uno 用的是 ATmega16U2 做 USB 转串口,插上即认。而便宜的兼容板大多用 CH340 或 CP2102 芯片,Windows 可能识别不出串口。这时需单独安装对应 USB 转串口驱动(搜 "CH340 驱动")。装完在设备管理器能看到新的 COM 口即成功。

IDE 界面速览

Arduino IDE 2.x 主界面 ┌────────────────────────────────────────────────────────┐ │ [✓] [→] [Arduino Uno ▾] [COM3 ▾] [🔍串口监视器] │ ◄ 工具栏 ├──────────┬─────────────────────────────────────────────┤ │ 📁 Sketch│ void setup() { │ │ 📚 库 │ pinMode(13, OUTPUT); │ ◄ 代码编辑区 │ 📋 板管理 │ } │ │ 🐛 调试 │ void loop() { │ │ │ digitalWrite(13, HIGH); │ │ │ } │ ├──────────┴─────────────────────────────────────────────┤ │ 编译输出 / 错误信息 项目使用 924 字节 (2%) 存储空间 │ ◄ 输出窗口 └────────────────────────────────────────────────────────┘ = 编译验证 = 上传到板子 中间两个下拉框 = 选开发板型号 + 选串口(上传前必须都选对!)

添加 ESP32 等第三方开发板

要为第 11-12 章的联网做准备,现在就把 ESP32 内核装上:

① 文件 → 首选项 → "其他开发板管理器地址" 填入:
   https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

② 工具 → 开发板 → 开发板管理器
③ 搜索 "esp32" → 找到 "esp32 by Espressif Systems" → 安装
④ 安装完成后,开发板列表里就会出现 "ESP32 Dev Module" 等选项
开发板内核是什么?

不同芯片的指令集、外设、编译器都不一样。"内核(core)"就是让 Arduino 的统一 API(digitalWrite 等)在特定芯片上跑起来的适配层+工具链。装了 ESP32 内核,你写的 digitalWrite 才会被翻译成 ESP32 能懂的机器码。多个内核可共存,切换开发板即切换内核。

安装第一个库

以后常用的 DHT 温湿度库为例,演示库的安装:

工具 → 管理库(或左侧 📚 图标)
搜索 "DHT sensor library"
选 Adafruit 出品的那个 → 安装
(会提示是否一起装依赖 Adafruit Unified Sensor,点"全部安装")
// 装好库后,就能在代码顶部包含它的头文件
#include <DHT.h>       // 尖括号 = 从库目录找
#include "myfile.h"    // 双引号 = 从当前 Sketch 文件夹找
"找不到头文件" 报错

编译时若报 fatal error: DHT.h: No such file or directory,几乎都是库没装装错了同名库。回到库管理器确认已安装;ESP32 上有些库不兼容,注意看库描述里支持的平台。

Sketch 程序结构规范

一个组织良好的 Sketch 通常分为几个区块,养成好习惯代码才易维护:

/* ===== ① 头文件区:包含库 ===== */
#include <Servo.h>

/* ===== ② 宏与全局常量:用 #define / const 定义引脚 ===== */
#define LED_PIN   13       // #define 没有类型,编译前文本替换
const int BTN_PIN = 2;         // const 更推荐:有类型、可调试

/* ===== ③ 全局变量:跨 loop 保存状态 ===== */
int counter = 0;
bool ledState = false;

/* ===== ④ 初始化:setup 只跑一次 ===== */
void setup() {
  Serial.begin(9600);        // 启动串口,波特率 9600
  pinMode(LED_PIN, OUTPUT);
  pinMode(BTN_PIN, INPUT_PULLUP);
  Serial.println("系统启动完成");
}

/* ===== ⑤ 主循环:loop 无限执行 ===== */
void loop() {
  counter++;
  Serial.print("计数: ");
  Serial.println(counter);
  delay(500);
}

/* ===== ⑥ 自定义函数:把重复逻辑抽出来 ===== */
void blinkOnce(int ms) {
  digitalWrite(LED_PIN, HIGH);
  delay(ms);
  digitalWrite(LED_PIN, LOW);
  delay(ms);
}

#define vs const 的区别

#define(宏)

  • 预处理阶段纯文本替换
  • 不占用 RAM
  • 无类型检查,容易踩坑
  • 不能在调试器里查看
  • 末尾不加分号

const(常量)

  • 真正的变量,有明确类型
  • 编译器可优化,通常也不占额外 RAM
  • 有类型检查,更安全
  • 推荐现代写法首选
  • 末尾要加分号

编译上传全流程

点一下"→"背后发生了什么 你的 .ino │ ① 预处理:展开 #include / #define,自动加函数声明 ▼ 完整 C++ 源码 │ ② avr-gcc 编译:翻译为 AVR 机器码目标文件 ▼ .o 目标文件 + Arduino 核心库 │ ③ 链接:合并成一个完整可执行映像 ▼ firmware.hex (Intel HEX 格式) │ ④ avrdude 上传:复位板子→Bootloader 接管 ▼ →通过串口把 hex 写进 Flash ATmega328P Flash │ ⑤ 复位运行 ▼ 你的程序开始执行!输出窗口显示"上传完成"
看懂"存储空间占用"

上传后输出窗口会报 项目使用 924 字节 (2%) 程序存储空间全局变量使用 9 字节 (0%) 动态内存。前者是 Flash(存程序,32KB),后者是 SRAM(存变量,2KB)。SRAM 极其宝贵,大量使用 String 或大数组时容易耗尽导致死机——这是进阶后要警惕的坑。

本章小结

从官网免费下载 Arduino IDE(推荐 2.x),Windows 记得装 USB 驱动,兼容板往往还需单独装 CH340/CP2102 驱动。IDE 集编辑、编译、上传、串口监视于一体:工具栏两个下拉框分别选开发板型号串口,上传前二者必须都选对。开发板管理器用来安装不同芯片的内核(ESP32 需先在首选项填附加网址再搜索安装);库管理器是"代码商店",一键装库后用 #include <库.h> 调用。Sketch 是程序单元,主文件 .ino 必须放在同名文件夹里,组织上分为头文件、常量、全局变量、setup、loop、自定义函数六块。定义引脚推荐用 const int 而非 #define(有类型、更安全)。上传流程:预处理→编译→链接→avrdude 写 Flash→复位运行;输出窗口的字节占用分别对应 Flash(程序)和 SRAM(变量),后者只有 2KB 要省着用。

⚒️ 配套开发者工具箱 · 17 款免费在线工具