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 发射瞬间的电流峰值可能让廉价电源模块掉压复位,需要更大的电容或更稳的稳压器。

主控选型决策与开发环境配置 监测需求 传感器数量与类型 是否需远程联网 供电方式与功耗预算 成本上限 需要内置 无线联网? 是 ESP32 内置 Wi-Fi/蓝牙,12 位 ADC 适合 MQTT 上云、远程监测 否 模拟量多、 要低成本? 是 树莓派 Pico 双核 133 MHz,12 位 ADC 价格低,适合本地采集 否 Arduino UNO/Nano 生态成熟、资料多、5V 兼容 适合入门与简单本地显示 开发环境: Arduino IDE / PlatformIO(Arduino、ESP32) Thonny / MicroPython 或 Pico SDK(Pico) 共同步骤:装驱动 → 选开发板 → 选端口 → 烧录测试

怎么选:从需求倒推

把选型落到具体场景会更清楚。假设你要做一个蔬菜大棚监测节点,采集空气温湿度(如 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 适配器长期供电,功耗就不是主要矛盾。

选型口诀可以概括为:要联网优先 ESP32;要极致低价、模拟量多、本地采集优先 Pico;要生态成熟、5 V 传感器多、入门练手优先 Arduino。三者都能完成基础监测,差别在于“省事”还是“省钱”。

开发环境搭建:以 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,并共地。

不要用 ESP32 的 3.3 V 引脚直接给舵机、继电器线圈或大功率加热片供电,这类负载启动电流大,会拉低电压导致主控复位。主控只负责“信号”,负载电源要独立走线并共地。

把这一节的要点收拢:先按“是否联网、模拟量多少、成本与功耗”三条主线选定主控,再用最小闪灯程序验证开发环境,最后在接线前核对电平与供电。这三步走稳,后面的传感器采集和数据处理才有可靠的基础。