1. 项目概述与核心价值在农业仓储、工业设备监控乃至实验室环境管理中温度都是一个至关重要的参数。传统的温度监测往往依赖人工定时巡检不仅效率低下数据存在断档而且在恶劣或偏远环境下实施困难。几年前我接手了一个粮仓温度监控的预研项目核心需求就是解决这个问题如何低成本、低功耗地实现多点温度的自动采集与远程上报让管理人员在办公室甚至家里就能掌握现场情况。经过一番选型和折腾我们最终敲定了一套基于Arduino MKR 1400和DHT22传感器的解决方案。这套方案的精髓在于它巧妙地结合了开源的硬件平台、成熟稳定的传感器以及几乎无处不在的GSM蜂窝网络将一个复杂的物联网节点构建过程简化到了爱好者也能上手实操的程度。整个系统的骨架很清晰DHT22负责感知环境温度Arduino MKR 1400作为大脑进行数据读取、处理和决策最后通过其内置的GSM模块将数据以短信的形式发送到指定的手机号码。你可能会问为什么不用更流行的Wi-Fi或蓝牙答案就在于应用场景。粮仓往往位于郊区网络基础设施薄弱Wi-Fi覆盖不现实蓝牙传输距离又太短。而GSM网络信号覆盖广只要手机有信号的地方它基本就能工作非常适合这种“野外科考”式的部署。当然这套方案的价值远不止于粮仓。任何需要远程、无人值守、周期性上报简单数据的场景比如偏远地区的气象站、水库水位监测、户外设备机箱温度告警等都可以从这个项目中获得直接的灵感。接下来我就把这套从硬件接线、代码编写到功耗优化的“踩坑”经验毫无保留地拆解给你看。2. 硬件选型与核心组件解析一套稳定可靠的硬件系统是项目的基石。这里的每一个组件选择背后都经历了性能、成本、功耗和可靠性的多重权衡。直接照单全收可以快速复现但了解“为什么”这么选才能让你在应对不同需求时灵活变通。2.1 核心大脑Arduino MKR 1400选择MKR 1400作为主控板是我们方案的核心决策。市面上Arduino板子众多从经典的Uno到强大的Mega为何独独是它首先集成度是关键。MKR 1400板载了u-blox SARA-U201GSM模块这意味着你不需要再额外购买并费力地连接一个GSM Shield。它把微控制器一颗低功耗的ARM Cortex-M0和通信模块做到了同一块板子上大大简化了硬件设计和连接复杂度也提高了整体可靠性。其次供电灵活性。这块板子设计之初就考虑了电池供电场景。它支持通过Vin引脚或USB口供电并且自带一个单节锂聚合物电池Li-Po充电管理电路。你只需要接上一块3.7V的Li-Po电池它就能边工作边为电池充电当有外部电源时或者纯粹依靠电池运行。这对于需要长期户外工作的设备来说是至关重要的便利。再者功耗控制。虽然其功耗相比专为物联网设计的超低功耗MCU如ESP32的深度睡眠仍较高但在Arduino生态中MKR系列通过软件库支持低功耗睡眠模式为优化续航提供了可能。最后是开发友好性完全兼容Arduino IDE和庞大的库生态像驱动DHT22、使用GSM功能都有现成的库支持极大降低了开发门槛。注意购买MKR 1400时请务必确认版本。早期有些版本可能存在天线连接器兼容性问题。同时因为它包含GSM模块在一些地区可能需要进行型号核准购买前最好咨询卖家。2.2 感知触角DHT22温湿度传感器DHT22也称AM2302是一款经典的数字式温湿度复合传感器。为什么不用更便宜的DS18B20仅温度或模拟温度传感器精度与性价比的平衡DHT22在0-100%湿度范围内典型精度为±2%RH温度精度±0.5°C。对于粮仓监控通常要求温度监测精度在±1°C内这类应用这个精度完全足够。虽然它有约2秒的采样间隔限制但对于我们按小时计的数据上报频率来说这根本不是问题。其数字单总线接口也节省了宝贵的模拟引脚。单总线与上拉电阻DHT22采用单总线协议与主控通信这意味着数据引脚需要连接一个10kΩ的上拉电阻到VCC。这个电阻的作用是确保在总线空闲时数据线被拉至高电平维持一个稳定的空闲状态这是单总线协议正常工作的必要条件。很多新手会忽略这个电阻导致传感器无法读取数据或数据不稳定。供电与布线DHT22工作电压范围是3.3V-6V与MKR 1400的3.3V或5V输出完美兼容。但需要注意的是长距离连接时超过1-2米信号衰减和干扰会加剧。如果传感器需要布置在较远位置建议使用屏蔽线并将供电电压适当提高至5V以增强信号驱动能力同时在主控端数据引脚增加一个更小的上拉电阻如4.7kΩ进行阻抗匹配。在我们的粮仓原型中传感器通过数米长的导线连接稳定运行了数月。2.3 能量心脏电源系统设计电源系统决定了这个节点能“活”多久。我们的设计包含三个部分电池、充电管理和潜在的太阳能补充。电池选型我们选择了常见的3.7V、1000mAh的锂聚合物电池。选择理由很简单电压匹配MKR 1400的电池输入就是为单节Li-Po设计的、能量密度相对较高、形状扁平易于集成。容量选择则是一个权衡1000mAh对于持续运行GSM模块的板子来说可能只能撑一天左右但这作为原型测试是足够的。实际部署时可以根据目标续航如一周计算所需容量。粗略估算假设系统平均工作电流100mA每天工作1分钟包括GSM联网、发送短信其余时间深度睡眠那么日均耗电约1.67mAh1000mAh电池可运行约600天。但这只是理想情况GSM模块连接网络时的瞬时电流可能高达2A这会拉低电池有效容量。太阳能补充系统为了实现“永久”续航我们后期引入了太阳能充电方案。核心是一个5V、1W左右的小型太阳能板搭配一个简单的TP4056锂电充电管理模块。太阳能板在白天为电池充电电池在全天候为系统供电。这里有个关键点必须使用带管理功能的充电模块防止电池过充或过放否则有安全风险。我们选择的Adafruit的太阳能充电器模块就集成了这些保护功能。天线与SIM卡MKR 1400需要外接GSM天线才能获得良好的信号。我们使用了常见的棒状胶体天线。SIM卡方面为了降低成本我们选用了一张最便宜的预付费物联网卡或手机副卡只需要能收发短信即可无需流量套餐。务必在代码中正确设置APN接入点名称这个信息需要向你的SIM卡运营商索取。3. 系统搭建与硬件连接实操理论清楚了现在开始动手。把一堆散件变成能工作的系统连接是第一步。这一步的可靠性直接决定了后续调试的难度。3.1 主控板基础供电与设置首先确保你的Arduino MKR 1400是完好无损的。如果板载的锂电充电芯片允许你可以先通过USB线连接电脑这样既可以为板子供电也能通过Arduino IDE进行编程。安装天线找到板子上标有“GSM ANT”的u.FL连接器将GSM天线的小接口垂直对准轻轻按压直至听到轻微的“咔嗒”声表示已扣紧。然后小心地将天线摆放到合适位置避免与电路板的其他元件短路。插入SIM卡在板子背面找到SIM卡槽。使用取卡针或回形针轻轻插入旁边的小孔卡托会弹出。将SIM卡按照卡托上的图示方向通常芯片面朝下缺口朝外放入再将卡托推回卡槽。听到锁止声即安装完成。实操心得很多连接不上的问题都源于天线未接好或SIM卡未正确安装。务必确保天线连接牢固SIM卡运营商在你部署的地区有良好的2G网络覆盖MKR 1400主要支持2G网络部分区域可能已退网需提前确认。3.2 DHT22传感器接线详解我们将连接三个DHT22传感器到Arduino MKR 1400。接线遵循统一的模式清晰有序的接线能避免后续调试的噩梦。单个传感器接线原理以传感器1连接至数字引脚4为例VCC电源正极 连接到面包板的5V电源正极总线。GND电源地 连接到面包板的GND电源地总线。DATA数据引脚 连接到Arduino的数字引脚4D4。10kΩ上拉电阻 一端连接在DATA线即D4引脚连接点另一端连接到5V电源正极总线。具体操作步骤搭建电源总线在面包板的两侧长条上一侧标记为“5V”另一侧标记为“GND”。使用跳线将Arduino MKR 1400的“5V”引脚连接到面包板的“5V”总线将“GND”引脚连接到面包板的“GND”总线。这样整个面包板就有了统一的电源。安装传感器将三个DHT22传感器依次插入面包板的中间区域确保每个传感器独占一行例如占用孔位E10-E13、E15-E18、E20-E23彼此不共用引脚。连接电源线对每个传感器用跳线将其VCC引脚通常为最左边的引脚连接到“5V”总线将其GND引脚通常为最右边的引脚连接到“GND”总线。连接数据线与上拉电阻传感器1数据引脚中间引脚用跳线连接到Arduino的D4引脚。在面包板上找一个空闲区域插入一个10kΩ电阻电阻的一端与连接D4的跳线共用同一个孔电阻的另一端插入“5V”总线。传感器2数据引脚接D5同样在数据线和5V总线间连接一个10kΩ电阻。传感器3数据引脚接D6连接10kΩ电阻。最终检查对照下图或上述描述仔细检查每一根连线确保VCC、GND没有接反数据线连接正确上拉电阻一端接数据线、一端接5V。一个常见的错误是把上拉电阻接在了数据线和GND之间这会导致信号始终被拉低。3.3 电池与太阳能板连接可选升级如果你计划进行户外长期部署连接电池和太阳能板是必要步骤。连接电池找到MKR 1400上标有“BAT”的引脚。将锂聚合物电池的红色导线正极连接到“BAT”引脚黑色导线负极连接到“BAT-”引脚。请注意有些电池接口可能是JST-PH接头可能需要相应的转接线或焊接。连接太阳能充电系统如使用将太阳能板的正负极导线连接到TP4056充电模块的“SOLAR”和“SOLAR-”输入端。将电池的正负极与连接到MKR 1400的是同一对线也连接到TP4056模块的“BAT”和“BAT-”输出/输入端。注意此时电池既连接MKR 1400也连接充电模块。TP4056模块通常有一个“OUT”和“OUT-”用于给负载供电但我们的负载MKR 1400直接接在电池上所以这个接口可以空着因为模块已经通过电池接口为电池充电并保护电池了。供电测试断开USB线系统应能由电池单独供电启动。用万用表测量电池电压应在3.7V-4.2V之间。在阳光下测量充电模块输出端电压应略高于电池电压表示正在充电。4. 软件编程与核心代码剖析硬件是躯体软件是灵魂。让这套系统按我们的意志工作需要编写Arduino代码。代码的核心任务很明确周期性唤醒、读取三个传感器数据、通过GSM发送短信、然后进入深度睡眠以省电。4.1 开发环境配置与库安装首先确保你使用的是最新版的Arduino IDE1.8.x或更高版本。添加板支持打开Arduino IDE点击“工具” - “开发板” - “开发板管理器”。在搜索框中输入“Arduino SAMD Boards”找到并安装它。安装完成后在“工具” - “开发板”列表中你应该能选择“Arduino MKR GSM 1400”。安装必需库MKRGSM 这是驱动板载GSM模块的核心库。可以通过“工具” - “管理库”搜索“MKRGSM”进行安装。DHT sensor library 搜索“DHT sensor library by Adafruit”并安装。这个库会同时安装其依赖的Adafruit_Sensor库。Arduino LowPower 搜索“Arduino LowPower”并安装。这个库用于控制MKR 1400进入低功耗睡眠模式。4.2 代码结构与核心函数解析下面我将分块解析代码的关键部分。完整的代码你可以根据这些解析自行组合或从项目仓库获取。// 1. 库文件引入与宏定义 #include MKRGSM.h #include DHT.h #include DHT_U.h #include ArduinoLowPower.h // 定义三个DHT22传感器连接的引脚 #define DHTPIN1 4 #define DHTPIN2 5 #define DHTPIN3 6 #define DHTTYPE DHT22 // 明确指定传感器类型 // 定义睡眠间隔毫秒 12小时 12 * 60 * 60 * 1000 43200000 ms const unsigned long SLEEP_INTERVAL_MS 43200000UL; // 2. 全局对象声明 GSM gsmAccess; GSM_SMS sms; DHT dht1(DHTPIN1, DHTTYPE); DHT dht2(DHTPIN2, DHTTYPE); DHT dht3(DHTPIN3, DHTTYPE); // 你的手机号码国际格式例如 8613812345678 char remoteNumber[] 8613812345678; void setup() { Serial.begin(9600); while (!Serial); // 等待串口连接仅用于调试 // 初始化DHT传感器 dht1.begin(); dht2.begin(); dht3.begin(); Serial.println(Initializing GSM module and connecting to network...); // 3. GSM网络连接 bool connected false; // 尝试连接网络最多尝试10次每次间隔1秒 for (int i 0; i 10; i) { if (gsmAccess.begin(YOUR_APN) GSM_READY) { // 替换YOUR_APN为你的运营商APN connected true; Serial.println(GSM connected); break; } else { Serial.print(Connection attempt ); Serial.print(i1); Serial.println( failed. Retrying...); delay(1000); } } if (!connected) { Serial.println(Failed to connect to GSM network. Going to sleep.); // 即使连接失败也进入睡眠等待下一个周期重试 goToSleep(); } } void loop() { // 4. 读取传感器数据 float t1 dht1.readTemperature(); float t2 dht2.readTemperature(); float t3 dht3.readTemperature(); // 检查读数是否有效DHT22读取失败会返回NaN if (isnan(t1) || isnan(t2) || isnan(t3)) { Serial.println(Failed to read from DHT sensor!); // 可以在这里选择重试几次或者发送一个错误通知 String errorMsg Error: Sensor read failed.; sendSMS(errorMsg); } else { // 5. 构造短信内容 String dataMessage Temperature Report:\n; dataMessage Sensor 1: String(t1, 1) C\n; // 保留一位小数 dataMessage Sensor 2: String(t2, 1) C\n; dataMessage Sensor 3: String(t3, 1) C\n; dataMessage Battery: String(readBatteryVoltage()) V; // 假设有一个读电压的函数 Serial.println(Sending SMS...); Serial.println(dataMessage); // 6. 发送短信 sendSMS(dataMessage); } Serial.println(Work done. Going to deep sleep for 12 hours.); // 7. 进入深度睡眠 goToSleep(); // 程序执行将在此暂停直到被RTC或外部中断唤醒然后从setup()开始重新运行 } // 发送短信的函数 void sendSMS(String txt) { sms.beginSMS(remoteNumber); sms.print(txt); if (sms.endSMS()) { Serial.println(SMS sent successfully.); } else { Serial.println(SMS sending failed.); } } // 进入深度睡眠的函数 void goToSleep() { // 在睡眠前最好关闭GSM模块以节省更多电量 // 但MKRGSM库可能没有提供直接的关机API一种方法是物理断电但复杂。 // 这里我们仅使用LowPower库睡眠CPU。 Serial.println(Entering deep sleep...); delay(100); // 给串口输出一点时间 LowPower.deepSleep(SLEEP_INTERVAL_MS); } // 读取电池电压的函数示例需要根据具体硬件连接实现 float readBatteryVoltage() { // MKR 1400的电池电压可以通过ADC读取但需要分压。 // 这里仅作示例返回一个固定值。 // 实际实现 int sensorValue analogRead(ADC_BATTERY); float voltage sensorValue * (3.3 / 1023.0) * (R1R2)/R2; return 3.85; }关键代码解析与注意事项APN设置代码中的YOUR_APN必须替换为你SIM卡所属运营商的接入点名称。中国移动通常是CMNET中国联通是3GNET或UNINET中国电信是CTNET。这个信息错误会导致GSM无法连接互联网虽然发短信可能不需要但一些网络注册过程需要。深度睡眠与唤醒我们使用了LowPower.deepSleep()函数。在睡眠期间CPU和大部分外设都会关闭功耗极低可低至几十微安。MKR 1400可以通过实时时钟RTC在设定的时间后唤醒自己这正是我们实现定时12小时的关键。注意深度睡眠后程序会从头开始执行即从setup()开始所有变量都会重新初始化。如果你需要保存状态需要使用RTC内存或EEPROM。错误处理代码中加入了简单的传感器读取失败判断和GSM连接重试机制。在实际部署中你应该考虑更健壮的错误处理比如连续多次读取失败后尝试复位传感器或发送警报。短信长度GSM短信有长度限制通常160个英文字符。我们的温度报告信息较短没问题。如果数据量很大需要考虑拆分多条发送或改用GPRS传输数据。4.3 代码上传与初步测试用USB线将MKR 1400连接至电脑。在Arduino IDE中选择正确的端口工具 - 端口。点击上传按钮。上传过程中板子上的黄色LED会快速闪烁。上传成功后打开串口监视器工具 - 串口监视器波特率设置为9600。你应该能看到初始化、连接网络、读取传感器、发送短信的日志输出。同时你预设的手机号码应该能收到一条温度报告短信。实操心得第一次测试时建议先将睡眠间隔SLEEP_INTERVAL_MS改为一个很短的值如60000代表1分钟快速验证整个“读取-发送-睡眠-唤醒”的循环是否正常工作。确认无误后再改为12小时43200000或其他你需要的间隔。5. 低功耗优化与太阳能供电集成最初的版本可能只能工作一两天这显然不实用。优化的目标是在不显著增加成本的前提下最大限度地延长续航甚至实现能量自给。5.1 软件层面的低功耗策略在硬件固定的情况下软件优化是提升续航最有效的手段。最大化睡眠时间这是最根本的原则。我们的主要工作读传感器、发短信可能只需要几十秒剩下的99.9%的时间都应该让系统处于深度睡眠状态。使用LowPower.deepSleep()并设置尽可能长的间隔。外设电源管理在进入睡眠前主动关闭所有不需要的外设。GSM模块在发送完短信后调用gsmAccess.shutdown()如果库支持来彻底关闭GSM模块。这比让它待机省电得多。唤醒后在setup()中重新初始化。传感器DHT22是数字传感器不工作时功耗极低约100微安但如果你使用其他功耗大的传感器可以考虑通过MOSFET开关电路来控制其电源在需要测量时才上电。降低工作频率与电压Arduino LowPower库可能允许你降低CPU主频虽然MKR 1400本身功耗管理已较好。更关键的是确保传感器在满足精度要求的前提下使用最低的采样率。优化网络连接流程避免频繁注册GSM模块注册到网络是一个耗电过程。我们的设计是12小时一次这已经很好了。不要为了“实时性”而缩短间隔。快速断线发送完数据后立即执行关闭GSM模块的操作不要等待。5.2 硬件层面的功耗削减移除调试接口在最终部署版本中移除所有用于调试的LED指示灯如果可能或者确保它们在睡眠时被关闭。电源路径优化检查整个电路板是否有不必要的“电漏”。例如确保上拉电阻的阻值合适10kΩ在省电和信号完整性间是个平衡如果线路短可以尝试增大到47kΩ以减少从VCC到GND的静态电流。选用低功耗LDOMKR 1400板载的稳压器效率可能不是最优。如果是从头设计PCB可以选用静态电流极低的LDO或DC-DC降压芯片。5.3 太阳能供电系统设计与集成对于户外永久性部署太阳能供电是终极解决方案。我们的目标是设计一个“收支平衡”的系统白天太阳能板产生的能量不仅要满足白天的系统运行消耗还要能为电池充入足够的电以度过夜晚和阴雨天。系统组件太阳能板选择一块开路电压约6V功率1W-5W的小型板。功率计算假设系统日均耗电5mAh经过深度睡眠优化后电压3.7V则日均耗能约18.5mWh。考虑到充电效率约70%、阴雨天等因素需要太阳能板日均产生约50mWh的能量。在平均日照4小时地区需要板子功率至少12.5mW。实际上选择1W的板子已留有充足余量。充电管理模块必须使用推荐TP4056这类线性充电IC的模块它集成了过充、过放、过流保护。选择带“太阳能输入”功能的版本更好。电池作为能量缓冲池。容量选择要能支撑连续多个阴雨天。例如希望支撑3个无日照日日均耗电5mAh则需要至少15mAh的电池。实际上考虑到电池老化、自放电我们会选择大得多的电池如2000mAh或更大。连接与调试连接方式如前文硬件部分所述。调试的关键是测量和平衡用万用表长期监测电池电压。在连续晴天下午电压应能达到并稳定在4.2V满电清晨应不低于3.7V避免过放。如果发现电池电量持续下降说明太阳能板功率不足或系统功耗过高。需要换更大功率的板子或进一步优化功耗。如果电池长期处于满电状态可以减少太阳能板功率或考虑给系统增加一些有益的负载如更频繁的数据采集。避坑指南太阳能板的角度和清洁度极大影响发电效率。务必根据所在地的纬度调整板的倾斜角使其正面尽可能垂直对准正午太阳。定期清理板面的灰尘和鸟粪。另充电管理模块的“电池反接保护”功能很重要接线时务必分清正负极。6. 部署、调试与常见问题排查系统在桌面上运行良好不代表在粮仓顶、野外树梢上也能稳定工作。部署是最后一道也是最考验人的关卡。6.1 现场部署要点防护外壳将整个系统主板、电池、充电模块放入一个防水、防尘的塑料盒中。盒子侧面开孔用于传感器线缆和天线引出开孔处使用防水格兰头。太阳能板固定在盒子外部或通过导线连接。天线放置GSM天线尽量放置在开阔、高处的位置远离金属物体和大功率设备。可以使用磁吸底座吸附在金属屋顶或架设一根短杆。传感器布线DHT22传感器通过导线延长。建议使用带屏蔽层的多芯线屏蔽层单端接地接主控端的GND。传感器探头部分可以套上一个小型的防辐射罩可以用穿孔的塑料瓶自制避免阳光直射导致测温不准。电源检查部署前确保电池已充满电。用万用表测量太阳能板在阳光下的开路电压确认其正常工作。6.2 系统调试流程部署后不要立刻离开进行现场调试上电观察给系统上电观察板载LED指示灯。MKR 1400通常有电源灯和网络状态灯。网络灯应开始闪烁表示正在搜索网络。串口日志如果条件允许可以临时接上笔记本电脑或使用蓝牙串口模块通过串口监视器查看启动日志确认GSM网络注册成功、传感器读取正常。功能验证手动触发一次数据发送可以通过临时修改代码缩短睡眠时间或者设计一个外部按钮中断唤醒确认手机能收到正确的短信。长期稳定性测试让系统在现场运行至少24-48小时观察其能否按时、稳定地发送数据以及电池电压的变化趋势。6.3 常见问题与解决方案速查表以下是我们开发和部署过程中遇到的一些典型问题及解决方法问题现象可能原因排查步骤与解决方案收不到短信1. GSM模块未联网。2. 手机号码格式错误。3. SIM卡欠费或未开通短信功能。4. 信号极差。1. 检查串口日志看gsmAccess.begin()是否返回GSM_READY。检查天线连接、APN设置。2. 确认号码为国际格式86xxxxxxxxxxx。3. 将SIM卡插入手机试发一条短信。4. 尝试更换天线位置或使用外置高增益天线。传感器读数全为NaN或错误1. 接线错误VCC/GND接反。2. 上拉电阻未接或接错位置。3. 传感器损坏。4. 电源不稳定电压过低。1. 用万用表检查传感器引脚电压是否为5V。2. 确认10kΩ电阻一端接数据线一端接5V。3. 更换一个传感器测试。4. 尝试在传感器VCC和GND之间并联一个100uF的电解电容稳压。系统运行一段时间后停止工作1. 电池耗尽。2. 程序跑飞或陷入死循环。3. 看门狗未启用系统死机。1. 测量电池电压检查太阳能充电是否正常。2. 增加串口调试输出定位卡死位置。检查传感器读取等函数是否有超时阻塞。3. 在代码中启用硬件看门狗Watchdog定期喂狗。GSM连接非常慢或经常失败1. 信号强度弱。2. SIM卡是物联网卡在网络附着上有特殊要求。3. 模块天线性能不佳。1. 使用gsmAccess.getSignalStrength()读取信号强度大于10通常可连接。2. 咨询运营商物联网卡是否需要配置特定的APN或激活。3. 更换为性能更好的外置天线。深度睡眠后无法唤醒1. 睡眠时间设置函数有误。2. 低功耗库与板型或其它库冲突。3. 某些中断引脚配置不当在睡眠时产生干扰。1. 确认LowPower.deepSleep()参数单位是毫秒且值没有溢出。2. 尝试使用最基本的示例代码测试睡眠功能。3. 检查所有未使用的数字引脚将其设置为输入上拉模式避免浮空。我个人在实际部署中最深刻的体会是稳定性测试至关重要。实验室里风平浪静现场环境却是复杂的。温度骤变导致的凝露、昆虫进入设备箱、太阳能板被落叶覆盖、甚至雷击感应浪涌都可能让系统宕机。因此除了软件上的看门狗硬件上也可以考虑加入一些保护比如电源入口的防反接二极管和TVS管信号线的磁环等。最后没有一个系统是完美的定期比如每季度进行人工巡检和维护仍然是保证长期可靠运行的必要手段。这个基于Arduino MKR 1400的远程温度监测系统为我们提供了一个快速验证想法、低成本部署原型的优秀框架。你可以在此基础上轻松地更换传感器如土壤湿度、光照强度改变通信方式如使用LoRaWAN替代GSM以进一步降低功耗和成本或者增加本地数据存储SD卡让它适应更多样化的物联网监测需求。