4. 主控模块选型与开发环境搭建
主控模块是农业环境监测仪的“大脑”,它决定了能接多少传感器、能不能联网、功耗多高、成本多少,也直接决定了你后续写代码和调试的体验。在低成本农业监测场景里,最常见的三类候选是 Arduino(以 UNO/Nano 为代表,基于 ATmega328P)、ESP32(含 ESP8266 作为近亲)和树莓派 Pico(RP2040)。它们不是“谁更高级”的关系,而是三种不同的定位:Arduino 是经典的单片机入门平台,ESP32 是自带 Wi-Fi/蓝牙的物联网主控,Pico 是双核、接口灵活且价格极低的现代微控制器。选型的关键不是追新,而是让主控的能力匹配你的监测需求。
三类主控的核心差异
先看一张对比表,把最影响选型的参数摆在一起(价格为常见零售参考,仅作量级示意):
| 对比项 | Arduino UNO / Nano | ESP32(如 DevKit) | 树莓派 Pico(RP2040) |
|---|---|---|---|
| 核心 | ATmega328P,8 位,16 MHz | Xtensa 双核,最高 240 MHz | 双核 Cortex-M0+,133 MHz |
| 存储 | 32 KB Flash / 2 KB RAM | 通常 4 MB Flash / 520 KB RAM | 2 MB Flash / 264 KB RAM |
| 无线 | 无(需外扩模块) | 内置 Wi-Fi + 蓝牙 | 无(Pico W 带 Wi-Fi) |
| ADC | 10 位,6 通道 | 12 位,多通道 | 12 位,3 通道(含内部温度) |
| 典型功耗 | 约 20–50 mA | Wi-Fi 工作时可达 100 mA 以上 | 约 20–30 mA |
| 价格量级 | 十几到几十元 | 十几到三十几元 | 几元到十几元 |
从表中能读出几个关键结论。第一,ADC 位数直接影响模拟传感器的分辨率:Arduino 的 10 位 ADC 在 5 V 参考下每级约 4.9 mV,而 ESP32/Pico 的 12 位在 3.3 V 参考下每级约 0.8 mV,对土壤湿度、光照这类模拟量更细腻。第二,无线能力决定了数据怎么出去:ESP32 内置 Wi-Fi,可以直接把数据发到 MQTT 服务器或云平台;Arduino 和 Pico 若要联网,需要额外接 ESP-01、SIM800 或 LoRa 模块,增加成本与接线复杂度。第三,功耗决定了供电方案:如果靠太阳能小板加电池供电,ESP32 在 Wi-Fi 发射瞬间的电流峰值可能让廉价电源模块掉压复位,需要更大的电容或更稳的稳压器。
怎么选:从需求倒推
把选型落到具体场景会更清楚。假设你要做一个蔬菜大棚监测节点,采集空气温湿度(如 DHT22 数字量)、土壤湿度(模拟量)、光照(模拟量),并且希望每 5 分钟把数据传到手机或云平台。这个需求里“远程联网”是硬指标,直接指向 ESP32:它自带 Wi-Fi,用 MQTT 协议发布到公共 Broker 即可,无需额外模块。若换成 Arduino,你得再挂一个 ESP-01 做透传,接线和 AT 指令调试会明显增加工作量。
反过来,如果只是做一个本地的小型育苗箱,用一块 LCD 显示温湿度、超限时蜂鸣器报警,不需要联网,那么 Arduino Nano 或 Pico 都够用。此时 Pico 的优势是 12 位 ADC 和更低价格,Arduino 的优势是 5 V 电平与大量现成库、教程,接 5 V 传感器更省心。再考虑供电:若用 3.7 V 锂电池加升压模块,ESP32 的 Wi-Fi 峰值电流要重点评估;若用 5 V 适配器长期供电,功耗就不是主要矛盾。
开发环境搭建:以 Arduino IDE 为例
确定主控后,第一步是把开发环境跑通。以 Arduino IDE 为例,安装后需要配置开发板支持。对 ESP32,打开“文件 → 首选项”,在“附加开发板管理器网址”中填入:
https://espressif.github.io/arduino-esp32/package_esp32_index.json
然后在“工具 → 开发板 → 开发板管理器”中搜索 esp32 并安装。安装完成后,在“工具 → 开发板”中选择对应的型号,例如 “ESP32 Dev Module”;插入 USB 线后,在“工具 → 端口”中选择出现的串口(Windows 下形如 COM3,Linux/macOS 下形如 /dev/ttyUSB0 或 /dev/cu.usbserial-*)。如果端口不出现,多半是缺少 USB 转串口驱动(CH340 或 CP2102),需要先装驱动。
对 Pico,官方推荐用 Thonny 配合 MicroPython:按住 BOOTSEL 键插入 USB,电脑会出现一个名为 RPI-RP2 的 U 盘,把 MicroPython 的 .uf2 固件拖进去,设备重启后 Thonny 即可识别串口并进入交互环境。若用 C/C++,则安装 Pico SDK 与 CMake 工具链,编译后用同样的拖拽方式烧录 .uf2 文件。
环境是否搭好,用一个最小测试就能判断。下面这段代码同时适用于 Arduino 与 ESP32,用来验证“编译—烧录—串口回读”整条链路:
void setup() {
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
Serial.println("LED ON");
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
Serial.println("LED OFF");
delay(1000);
}
烧录成功后,板载 LED 应以约 1 秒节奏闪烁,串口监视器(波特率设为 115200)持续打印 “LED ON / LED OFF”。看到这个现象,说明开发板选择、端口、驱动、烧录四件事都正确,可以进入传感器接线阶段。若串口是乱码,先检查波特率是否一致;若上传报错 “Failed to connect”,可尝试按住 BOOTSEL/BOOT 键再点上传,或换一根支持数据传输的 USB 线——很多“只能充电”的线是新手最常见的坑。
接线前必须确认的电平与供电
选型和环境之外,还有一个容易被忽略但会直接烧坏器件的点:逻辑电平。Arduino UNO 的 I/O 是 5 V,ESP32 和 Pico 是 3.3 V。把 5 V 传感器的信号线直接接到 ESP32 的 GPIO 上,可能损坏引脚。正确做法是确认传感器工作电压与输出电平:DHT22 可工作在 3.3–5 V,输出电平跟随供电,用 3.3 V 供电即可直连 ESP32;而某些 5 V 输出的模拟模块,则需要分压电阻或电平转换模块。供电方面,ESP32 开发板的 3.3 V 稳压器输出电流有限,多个传感器同时工作时建议外部单独供 3.3 V,并共地。
把这一节的要点收拢:先按“是否联网、模拟量多少、成本与功耗”三条主线选定主控,再用最小闪灯程序验证开发环境,最后在接线前核对电平与供电。这三步走稳,后面的传感器采集和数据处理才有可靠的基础。