3、开发环境搭建:ESP32/Nordic SDK安装、VS Code与PlatformIO配置、Hello World与LED点灯
好,咱们正式开始动手了。
这一章,说白了就是“磨刀”。刀磨快了,后面砍柴才不费劲。很多初学者一上来就急着写代码,结果环境配了三天,心态崩了。我见过不少这样的案例,包括我自己刚入行时也踩过类似的坑。
所以,咱们今天的目标很明确:把ESP32和Nordic的开发环境搭好,跑通第一个程序,点亮一颗LED灯。嗯,就这些。
3.1 选哪个平台?ESP32还是Nordic?
这个问题,我经常被问到。我的建议是:两个都装。
为什么?因为在实际项目中,你永远不知道客户要用哪颗芯片。ESP32生态成熟,资料多,适合快速验证;Nordic的蓝牙协议栈做得非常稳,低功耗性能一流。我个人习惯是,桌面常备两套环境,哪个顺手用哪个。
不过,咱们课程里会以ESP32为主,Nordic作为补充。毕竟ESP32的入门门槛更低,适合先建立信心。
| 特性 | ESP32 | Nordic nRF52系列 |
|---|---|---|
| 开发难度 | 低(资料多) | 中(需熟悉SDK结构) |
| 蓝牙协议栈 | Bluedroid / NimBLE | SoftDevice(非常成熟) |
| 功耗 | 中等 | 极低(适合电池设备) |
| 价格 | 便宜 | 稍贵 |
3.2 安装ESP-IDF(乐鑫官方SDK)
先搞定ESP32。乐鑫官方推荐的是ESP-IDF,也就是物联网开发框架。你想想看,这个框架里集成了Wi-Fi、蓝牙、各种外设驱动,咱们写应用层代码就行了。
安装步骤:
- 去乐鑫官网下载ESP-IDF离线安装包(Windows用户选Windows Installer,Mac/Linux用户用命令行)。
- 双击安装,路径不要有中文和空格。我习惯放在
C:\esp\esp-idf。 - 安装完成后,打开命令提示符,输入
idf.py --version,如果看到版本号,说明装好了。
3.3 安装Nordic nRF5 SDK
Nordic的SDK稍微有点不一样。它不叫IDF,叫nRF5 SDK。下载后是一个压缩包,解压就能用。
步骤:
- 去Nordic官网下载nRF5 SDK(推荐17.1.0版本,比较稳定)。
- 解压到
C:\nRF5_SDK_17.1.0。 - 注意:Nordic的SDK依赖ARM GCC编译器,需要额外安装。我建议直接用Segger Embedded Studio,它自带编译器,省事。
3.4 VS Code + PlatformIO:现代嵌入式开发的标配
说实话,我早期做嵌入式开发时,用的还是Keil和IAR。后来接触了VS Code + PlatformIO,就再也回不去了。为什么?因为插件生态太强了,代码补全、调试、库管理,全在一个界面里搞定。
安装步骤:
- 下载并安装VS Code(官网直接下,免费)。
- 打开VS Code,点击左侧扩展图标,搜索“PlatformIO IDE”,安装。
- 安装完成后,重启VS Code。你会看到底部多了一个小蚂蚁图标(PlatformIO的logo)。
- 点击小蚂蚁,选择“Open”,然后“New Project”。
- 在向导里,Board选择“Espressif ESP32 Dev Module”,Framework选择“Arduino”或“ESP-IDF”。
嗯,这里要注意:初学者建议选Arduino框架,因为API更简单。等熟悉了再切到ESP-IDF,性能更好。
3.5 Hello World:第一个程序
环境搭好了,咱们来写个“Hello World”。不过嵌入式世界的Hello World,不是打印字符串,而是点亮一颗LED灯。
为什么?因为打印字符串需要串口,串口需要驱动,驱动可能出问题。但LED灯,只要电路对,代码对,它就亮。这是最直接的反馈。
代码示例(Arduino框架):
// 文件名:src/main.cpp
#include <Arduino.h>
// 定义LED引脚(ESP32开发板通常用GPIO2)
#define LED_PIN 2
void setup() {
// 初始化串口,波特率115200
Serial.begin(115200);
// 设置LED引脚为输出模式
pinMode(LED_PIN, OUTPUT);
Serial.println("Hello World! LED点灯程序启动。");
}
void loop() {
// 点亮LED
digitalWrite(LED_PIN, HIGH);
delay(1000); // 延时1秒
// 熄灭LED
digitalWrite(LED_PIN, LOW);
delay(1000); // 延时1秒
}
代码很简单,对吧?但有几个细节,我当年就吃过亏:
- 引脚号别搞错:ESP32 DevKit上,板载LED通常接在GPIO2。但有些版本接在GPIO5或GPIO16。最好查一下原理图。
- 波特率要匹配:串口监视器如果设成9600,看到的就是乱码。统一用115200。
3.6 编译与烧录
代码写好了,怎么让它跑起来?
- 在VS Code底部,点击PlatformIO的“→”箭头(Build & Upload)。
- PlatformIO会自动下载依赖、编译代码。第一次编译会慢一些,因为要下载工具链。
- 编译完成后,用USB线连接ESP32开发板到电脑。
- 点击“Upload”按钮,代码会自动烧录到开发板。
- USB线是充电线,不是数据线(换一根)。
- 开发板没有进入下载模式(按住BOOT键,再按一下EN键,松开BOOT)。
- 驱动没装(CP2102或CH340驱动,去官网下载)。
3.7 验证:LED闪烁
烧录成功后,你会看到开发板上的LED开始以1秒间隔闪烁。嗯,这就成了。
同时,打开串口监视器(PlatformIO底部有个“Serial Monitor”按钮),你会看到每隔1秒打印一次“Hello World!”。
说实话,第一次看到自己写的代码让硬件动起来,那种感觉是很奇妙的。我记得我大学时第一次点亮LED,兴奋得拍了张照片发朋友圈。虽然现在看来很幼稚,但那就是嵌入式的魅力——代码不再是虚拟的,它能控制真实世界。
3.8 避坑指南:我踩过的几个坑
最后,分享几个我实际项目中遇到的坑,你遇到了可以少走弯路:
- 电源问题:我曾经用一根劣质USB线供电,结果LED亮度不够,还时不时重启。换了一根带屏蔽的线,问题解决。
- 引脚冲突:ESP32的GPIO6-11是Flash引脚,不能用作普通IO。我一开始不知道,接上去死活不亮。查了数据手册才明白。
- PlatformIO版本:有一次升级了PlatformIO,结果之前的项目编译不过。后来发现是工具链版本变了。建议每个项目固定一个PlatformIO版本,或者用
platformio.ini锁定版本。
好了,这一章的内容就到这里。环境搭好了,灯也亮了,咱们算是正式入门了。下一章,我会带你深入蓝牙配网的底层原理,看看数据是怎么在空中“飞”起来的。