ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基于Arduino与ESP32的智能防火系统:传感器选型、架构设计与实战

基于Arduino与ESP32的智能防火系统:传感器选型、架构设计与实战 1. 项目缘起从“火”的恐惧到智能守护作为一个在电子制作和智能家居领域折腾了十多年的老玩家我家里堆满了各种开发板、传感器和线材。在这些“破烂”里Arduino Uno 和 ESP32 绝对是出场率最高的明星。我做过智能浇花、语音控制灯带甚至用舵机做了个自动喂猫器。但去年夏天发生的一件事让我把目光投向了一个更严肃、更基础的领域防火。当时我正在用 ESP32 做一个温湿度监测的小项目板子和一堆杜邦线、面包板摊在书桌上。一个不留神一根裸露的导线搭在了电源正负极上瞬间冒出一小股白烟伴随着刺鼻的焦糊味。虽然只是烧坏了一个廉价的传感器但那股味道和瞬间的恐慌让我后背发凉。我立刻想到如果当时我不在家或者火苗引燃了旁边的纸张后果不堪设想。这次“有惊无险”的事故让我下定决心必须用我手头的技术为自己和家人搭建一道主动的、智能的防火屏障。这就是“Say no to fire with Arduino”这个项目的初衷——它不是要做一个取代专业消防设备的复杂系统而是利用 Arduino 生态的便捷性和灵活性打造一个低成本、高可定制、能实时预警的“家庭防火哨兵”。这个项目的核心价值在于它的“可感知”与“可联动”。传统的烟雾报警器只能被动报警声音刺耳但信息单一。而我们基于 Arduino 的方案可以集成多种传感器如火焰、烟雾、温度不仅能更早、更准确地发现火情隐患比如高温异常或微小烟雾还能通过 Wi-FiESP32将报警信息实时推送到你的手机甚至联动家里的智能插座自动切断高风险电器的电源。它把防火从一个“事后警报”的动作变成了一个“事前预防事中干预”的智能流程。无论你是刚接触 Arduino 的新手想做一个有实用价值的项目还是有一定经验的开发者希望深化对传感器网络和物联网应用的理解这个项目都能提供一条清晰的路径和丰富的实践机会。2. 核心传感器选型与工作原理让开发板“看见”和“感知”火情要实现防火第一步是让我们的 Arduino 系统能够“感知”到与火灾相关的物理量。市面上传感器种类繁多针对家庭初期火灾的特点我们主要关注三类探测明火的火焰传感器、探测阴燃烟雾的烟雾传感器以及监测环境温度异常的温度传感器。选择合适的传感器并理解其原理是项目可靠性的基石。2.1 火焰传感器捕捉光的“指纹”火焰传感器是探测明火最直接的设备。市面上常见的有红外火焰传感器和紫外火焰传感器。对于 Arduino 项目我们通常使用基于红外探测的 KY-026 或类似模块。它的核心是一个对特定红外波段尤其是 760nm-1100nm 纳米对应火焰产生的红外辐射敏感的光电管或热电堆。工作原理火焰在燃烧时会辐射出大量的红外线。KY-026 模块上有一个红外接收管专门接收这个波段的红外信号。当它探测到足够强度的红外辐射时模块的数字输出引脚DO会从高电平跳变为低电平或反之取决于模块设计同时模拟输出引脚AO会输出一个与红外强度成正比的电压值。模块上通常还有一个电位器用于调节灵敏度即触发阈值。注意红外火焰传感器容易被其他红外源干扰如白炽灯、阳光、甚至人体的热辐射。因此在安装时需避开热源和直射阳光并且最好配合其他传感器如烟雾做联合判断以降低误报率。我个人的经验是将其灵敏度调节到“刚好能稳定探测到打火机火焰在1米外”的程度是一个不错的起点。2.2 烟雾传感器嗅探空气中的“异常”烟雾传感器是探测火灾初期阴燃阶段的关键。最常用的是 MQ-2 气体传感器模块它对液化气、丙烷、氢气、烟雾等均有良好的灵敏度。工作原理MQ-2 的核心是一个二氧化锡SnO2半导体气敏元件。在清洁空气中它的电导率较低。当存在可燃气体或烟雾颗粒时这些物质吸附在半导体表面与空气中的氧发生反应导致半导体内部载流子浓度变化从而使其电导率增高。模块将电导率的变化转换为电压信号输出AO引脚。同样它也有一个数字输出引脚DO和灵敏度调节电位器。实操心得MQ-2 需要预热这是新手最容易忽略的一点。刚上电时它的读数极不稳定通常需要预热 1-3 分钟才能进入稳定工作状态。在程序初始化阶段应延时一段时间再进行首次读数。此外厨房的油烟、酒精挥发都可能触发它所以安装位置要远离厨房和通风口。我通常将它的模拟输出值接入设置一个动态阈值例如基线值上浮30%而不是单纯依赖数字输出这样可以实现更精细的预警。2.3 温度传感器监测环境的“体温”温度异常升高是火灾的重要前兆。这里我强烈推荐使用DS18B20数字温度传感器而不是常见的模拟温度传感器如 LM35。选择 DS18B20 的理由数字信号抗干扰强它采用单总线协议直接输出数字温度值避免了模拟信号在长距离传输中的衰减和干扰问题。精度高典型精度为±0.5°C完全满足防火监测需求。一线多机单根数据线可以挂载多个 DS18B20每个有唯一64位ROM地址方便多点测温例如同时监测房间角落、电器附近等多个位置。无需额外电路寄生供电模式下仅需连接数据线和地线VCC引脚可以省略接线更简洁。工作原理DS18B20 内部包含一个高精度温度传感元件和一个数字转换模块。主控如 Arduino通过单总线协议向其发送指令DS18B20 完成温度测量并转换后将数字结果通过同一根数据线传回。我们通过对应的库如 DallasTemperature可以轻松读取温度值。传感器组合策略在实际部署中我建议采用“温度烟雾”为主“火焰”为辅的策略。在客厅、卧室等区域布置 DS18B20 和 MQ-2在车库、储物间等可能存放易燃物且无人常驻的区域可以加装红外火焰传感器。这种多传感器数据融合的方式能极大提高系统的可靠性和预警的准确性。3. 系统架构设计与核心硬件搭建确定了“感知器官”传感器后我们需要为整个系统搭建“大脑”和“神经网络”。这个项目的架构可以很简单也可以很复杂取决于你的需求。这里我提供一个兼顾稳定性、可扩展性和成本的中等复杂度方案它也是我自家正在运行的版本。3.1 主控板选型Arduino Uno 与 ESP32 的分工协作很多人会纠结到底用 Arduino Uno 还是 ESP32。我的答案是都用让它们各司其职。这是一个典型的“边缘计算云端通信”架构。Arduino Uno 作为本地感知与控制核心角色负责连接所有传感器火焰、烟雾、DS18B20进行实时数据采集、初步滤波和本地逻辑判断。优势模拟输入引脚多方便连接多个模拟传感器数字IO丰富编程简单稳定性极高几乎不会死机成本低廉。任务循环读取各传感器数据当任何传感器数值超过预设阈值时立即触发本地报警如启动高分贝蜂鸣器、闪烁LED并同时通过串口向 ESP32 发送警报报文。ESP32 作为网络通信与智能中枢角色通过串口接收 Arduino Uno 发来的数据负责 Wi-Fi 连接、数据上报云平台、接收手机App指令以及执行高级联动。优势内置 Wi-Fi 和蓝牙网络功能强大双核处理器可以轻松处理网络协议和复杂逻辑功耗控制较好。任务连接家庭Wi-Fi将报警信息和传感器数据定时/触发式上报到物联网平台如阿里云物联网平台、ThingsBoard等接收平台下发的指令或手机App指令在发生报警时可以通过 GPIO 控制继电器模块切断指定插座的电源如智能插座后的电暖器、充电器等。为什么这样分工将传感器采集和网络通信分离是工业上常见的提高系统可靠性的方法。即使 ESP32 因为网络问题暂时离线Arduino Uno 的本地报警功能依然有效保证了核心安全功能不丢失。同时Arduino 专注于它最擅长的实时IO控制ESP32 专注于网络任务系统结构清晰调试方便。3.2 硬件连接清单与接线图以下是所需的核心硬件清单和接线示意以 Arduino Uno 为例组件型号/说明数量大致用途主控1Arduino Uno R31传感器数据采集与本地报警主控2ESP32 DevKit V11网络通信与智能联动传感器1红外火焰传感器模块 (KY-026)1-2探测明火传感器2烟雾传感器模块 (MQ-2)1-2探测烟雾传感器3数字温度传感器 (DS18B20)2-3监测环境温度报警器有源蜂鸣器模块1本地声音报警指示灯LED模块或RGB LED1状态指示如正常绿色预警黄色报警红色联动模块5V继电器模块1控制智能插座或电器电源连接件杜邦线公对公、公对母若干接线电源5V/2A USB电源适配器2分别为 Uno 和 ESP32 供电接线示意图Arduino Uno 部分Arduino Uno 引脚 - 外设模块 5V -------------- 火焰传感器 VCC, 烟雾传感器 VCC, 蜂鸣器 VCC, DS18B20 VDD (如果不用寄生供电) GND ------------- 所有模块的 GND A0 -------------- 火焰传感器 AO (模拟输出) A1 -------------- 烟雾传感器 AO (模拟输出) Digital 2 ------- 火焰传感器 DO (数字输出可选) Digital 3 ------- 烟雾传感器 DO (数字输出可选) Digital 4 ------- DS18B20 DATA 引脚 (需接4.7K上拉电阻到5V) Digital 5 ------- 蜂鸣器 I/O 引脚 Digital 6 ------- LED 引脚ESP32 与 Arduino Uno 通信Arduino Uno TX (Pin 1) - ESP32 RX (例如 GPIO16) Arduino Uno RX (Pin 0) - ESP32 TX (例如 GPIO17) (注意连接时需先断开 Uno 与电脑的USB避免串口冲突。)ESP32 联动控制ESP32 GPIO (如 GPIO12) - 继电器模块 IN 引脚 继电器模块 COM/NO 端子 - 串联接入智能插座或电器的火线中。关键细节DS18B20 的数据线必须接一个4.7KΩ的上拉电阻到 VCC5V否则通信会失败。这是单总线协议的硬件要求务必检查。蜂鸣器要选择“有源”型只需要给一个高电平就能持续发声编程控制简单。4. 核心代码实现与逻辑剖析硬件连接好后灵魂在于软件。我们将代码分为两部分Arduino Uno 的传感器采集与本地逻辑代码以及ESP32 的网络通信与联动代码。这里我会重点讲解核心逻辑和容易出错的细节。4.1 Arduino Uno 端数据采集、滤波与报警判断Arduino 端的代码核心是稳定地读取传感器数据并进行去噪和阈值判断。我们使用串口与 ESP32 通信约定简单的报文协议。// Arduino Uno 端核心代码片段 #include OneWire.h #include DallasTemperature.h // 引脚定义 #define FLAME_AO A0 #define SMOKE_AO A1 #define BUZZER 5 #define STATUS_LED 6 #define ONE_WIRE_BUS 4 // DS18B20 数据线引脚 // 初始化 DS18B20 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(oneWire); // 阈值定义 (需要根据实际环境校准) const int FLAME_THRESHOLD 500; // 火焰模拟值阈值低于此值认为有火 const int SMOKE_THRESHOLD 300; // 烟雾模拟值阈值高于此值认为有烟 const float TEMP_THRESHOLD 45.0; // 温度阈值摄氏度 // 变量声明 int flameValue, smokeValue; float tempValue; bool fireAlarm false; void setup() { Serial.begin(115200); // 与 ESP32 通信的串口 pinMode(BUZZER, OUTPUT); pinMode(STATUS_LED, OUTPUT); sensors.begin(); digitalWrite(STATUS_LED, HIGH); // 上电亮灯表示正常 delay(10000); // 等待 MQ-2 传感器预热非常重要 } void loop() { // 1. 读取传感器数据 flameValue analogRead(FLAME_AO); smokeValue analogRead(SMOKE_AO); sensors.requestTemperatures(); tempValue sensors.getTempCByIndex(0); // 获取第一个传感器的温度 // 2. 简单的滑动平均滤波以烟雾传感器为例 static int smokeBuffer[10] {0}; static byte index 0; smokeBuffer[index] smokeValue; index (index 1) % 10; long smokeAvg 0; for (int i 0; i 10; i) { smokeAvg smokeBuffer[i]; } smokeAvg / 10; // 3. 报警逻辑判断 fireAlarm false; if (flameValue FLAME_THRESHOLD) { fireAlarm true; Serial.println(ALARM:FLAME); // 发送火焰报警报文 } if (smokeAvg SMOKE_THRESHOLD) { fireAlarm true; Serial.println(ALARM:SMOKE); // 发送烟雾报警报文 } if (tempValue TEMP_THRESHOLD) { fireAlarm true; Serial.println(ALARM:TEMP); // 发送高温报警报文 } // 4. 执行本地报警动作 if (fireAlarm) { digitalWrite(BUZZER, HIGH); digitalWrite(STATUS_LED, LOW); // LED 熄灭或闪烁视设计而定 // 可以添加更复杂的声光报警模式 } else { digitalWrite(BUZZER, LOW); digitalWrite(STATUS_LED, HIGH); // 定时上报正常数据给 ESP32 static unsigned long lastReport 0; if (millis() - lastReport 5000) { // 每5秒上报一次 Serial.print(DATA:); Serial.print(flameValue); Serial.print(,); Serial.print(smokeAvg); Serial.print(,); Serial.println(tempValue); lastReport millis(); } } delay(200); // 主循环延迟 }代码逻辑剖析与避坑指南预热等待setup()函数中的delay(10000)至关重要这是给 MQ-2 传感器充分的预热时间。没有预热它的读数毫无参考价值。软件滤波传感器数据尤其是模拟值会有波动。直接使用原始值进行判断会导致误报。这里对烟雾值进行了简单的滑动平均滤波创建一个包含10次历史值的缓冲区每次取平均值能有效平滑毛刺。对于火焰和温度传感器也可以采用类似方法。报文协议设计与 ESP32 的通信采用了简单的字符串报文。ALARM:开头的表示报警DATA:开头的表示定期上报的传感器数据。ESP32 端通过识别这些前缀来解析。这种设计简单可靠易于调试。阈值校准FLAME_THRESHOLD、SMOKE_THRESHOLD等阈值绝对不能照抄你需要在实际部署环境中进行校准。方法在系统正常工作时读取并记录传感器数值作为基线然后模拟火情务必注意安全可以用吹灭的火柴产生少量烟或用热水杯靠近温度传感器观察数值变化从而确定一个合理的报警阈值。4.2 ESP32 端网络通信、云平台对接与智能联动ESP32 端的代码负责“向上”连接云“向下”解析 Arduino 的指令并执行联动。这里以连接阿里云物联网平台为例展示核心框架。// ESP32 端核心代码片段 (基于 Arduino 框架) #include WiFi.h #include PubSubClient.h // MQTT 客户端库 // WiFi 和阿里云配置 const char* ssid Your_WiFi_SSID; const char* password Your_WiFi_Password; const char* mqttServer Your_ProductKey.iot-as-mqtt.cn-shanghai.aliyuncs.com; // 阿里云MQTT接入点 const int mqttPort 1883; const char* clientId Your_ClientId; // 通常由设备三元组生成 const char* username Your_DeviceNameYour_ProductKey; const char* userPassword Your_DeviceSecret; // 计算后的签名不是明文密码 WiFiClient espClient; PubSubClient client(espClient); HardwareSerial SerialUno(1); // 使用 ESP32 的第二个硬件串口与 Uno 通信 // 与 Uno 通信的引脚定义 #define UNO_RX 16 #define UNO_TX 17 // 联动控制引脚 #define RELAY_PIN 12 void setup() { Serial.begin(115200); // 初始化与 Arduino Uno 通信的串口 SerialUno.begin(115200, SERIAL_8N1, UNO_RX, UNO_TX); pinMode(RELAY_PIN, OUTPUT); digitalWrite(RELAY_PIN, HIGH); // 继电器默认断开安全状态 setupWiFi(); client.setServer(mqttServer, mqttPort); client.setCallback(mqttCallback); // 设置收到云端指令的回调函数 } void loop() { // 1. 维持 MQTT 连接 if (!client.connected()) { reconnectMQTT(); } client.loop(); // 2. 监听来自 Arduino Uno 的串口数据 if (SerialUno.available()) { String message SerialUno.readStringUntil(\n); message.trim(); if (message.startsWith(ALARM:)) { // 处理报警信息 String alarmType message.substring(6); triggerAlarm(alarmType); // 上报报警到云端 String payload {\alarm\:\ alarmType \}; client.publish(/sys/Your_ProductKey/Your_DeviceName/thing/event/property/post, payload.c_str()); } else if (message.startsWith(DATA:)) { // 处理常规数据上报到云端 // 解析 flameValue,smokeAvg,tempValue // 构建属性上报 JSON // client.publish(...) } } delay(10); } void triggerAlarm(String type) { // 本地联动动作 Serial.printf([紧急] 检测到 %s 报警\n, type.c_str()); // 例如控制继电器切断电源 digitalWrite(RELAY_PIN, LOW); // 继电器吸合切断电路假设继电器低电平触发 // 可以添加其他动作如点亮所有LED发送更详细的推送等 } void mqttCallback(char* topic, byte* payload, unsigned int length) { // 处理从云端或手机App下发的指令 String msg; for (int i 0; i length; i) { msg (char)payload[i]; } Serial.println(收到云端指令: msg); // 解析 JSON例如 {cmd: resetAlarm, relay: off} // 根据指令执行动作如 digitalWrite(RELAY_PIN, HIGH); }关键实现细节与避坑指南串口选择ESP32 有多个硬件串口。这里使用了SerialUno即 UART1并将 RX/TX 引脚定义到 16 和 17避免与用于调试的SerialUART0冲突。阿里云物联网平台对接这是整个项目网络部分的核心。你需要先在阿里云物联网平台创建产品、设备获取“三元组”ProductKey, DeviceName, DeviceSecret。clientId、username、userPassword的生成有特定规则务必参考阿里云官方文档使用DeviceSecret计算签名而不是直接填写明文密码。MQTT 主题上报属性/sys/.../thing/event/property/post和接收指令的主题需要严格按照阿里云的物模型定义来设置。错误的话题会导致通信失败。继电器逻辑继电器的控制逻辑要搞清楚。通常继电器模块“高电平触发”是指输入信号为高电平时继电器吸合常开触点闭合。在安全系统中我们通常希望报警时继电器动作切断电源所以报警触发函数triggerAlarm里我们让控制引脚输出LOW假设模块是低电平触发或HIGH假设模块是高电平触发务必根据你的继电器模块说明书测试确认。系统正常时继电器应处于不动作状态电器通电。错误处理与重连网络是不稳定的。reconnectMQTT()函数必须实现完整的重连逻辑包括断开旧连接、重新连接Wi-Fi、重新计算MQTT连接参数等并加入延时和重试次数限制避免程序卡死。5. 系统部署、校准与长期维护要点代码烧录完毕硬件连接无误并不意味着项目结束。真正的挑战在于如何将它可靠地部署到真实环境中并确保其长期稳定运行。这一步往往比编程更考验耐心和经验。5.1 传感器部署的“黄金位置”传感器的安装位置直接决定系统的有效性。以下是基于我多次测试和调整后的经验烟雾传感器 (MQ-2)最佳位置房间天花板的中央或距离墙壁至少 50 厘米处。因为烟雾会向上升腾并扩散。避坑点绝对不要安装在厨房、浴室门口、空调或风扇的出风口附近。油烟、水汽和气流会严重干扰传感器导致误报或失效。我最初把它装在客厅靠近餐厅的位置结果每次炒菜都触发报警后来移到了客厅对角线的天花板中央问题解决。高度离地 1.5 米到 2 米为宜避开屋顶的灰尘聚集区。温度传感器 (DS18B20)监测重点电器热源附近是重中之重。例如路由器、NAS、电视机顶盒的散热口旁电暖器、充电器聚集的插排附近。安装技巧可以用一小段热缩管或绝缘胶带将 DS18B20 的金属探头部分包裹并紧贴在需要监测的电器外壳上注意绝缘这样能更灵敏地感知设备本身的温升而不是环境温度。多点部署利用其单总线特性在同一个数据线上挂多个传感器分别监测房间角落环境基线和热点位置。火焰传感器 (KY-026)适用场景车库、储藏室、阳台等可能存放油漆、汽油、纸张等易燃物且不常有人停留的区域。安装方向传感器探头应水平或略微向下倾斜避免直接对着窗户阳光干扰或白炽灯。灵敏度调节安装后用打火机在预设距离如1米测试调节模块上的蓝色电位器使指示灯能在稳定火苗下触发但在室内灯光下不触发。5.2 阈值的动态校准与自适应固化的阈值是误报的根源。一个健壮的系统应该具备一定的自适应能力。上电自学习在系统启动后的前几分钟如5分钟程序不进行报警判断而是持续采集各传感器数据计算出一个“环境基线”。例如计算这段时间内烟雾传感器读值的平均值和方差。// 伪代码上电基线学习 long smokeSum 0; for(int i0; i300; i) { // 学习5分钟300秒*循环周期 smokeSum analogRead(SMOKE_AO); delay(1000); // 每秒读一次 } int smokeBaseline smokeSum / 300; // 报警阈值可以设为 baseline 一个偏移量如50昼夜节律补偿家庭环境在白天和夜晚可能存在差异如湿度、背景温度。可以引入实时时钟RTC模块或通过ESP32获取网络时间为不同时段设置不同的阈值微调系数。趋势预警除了瞬时值超阈值更高级的预警是监测“变化趋势”。例如温度在10分钟内上升了10°C即使绝对值没到45°C也值得发出一个“温升过快”的预警通知到手机。这需要在ESP32端实现简单的数据历史记录和计算。5.3 供电、外壳与长期运行稳定性供电切勿使用电脑USB口长期供电电压和电流都不稳定。务必使用可靠的5V/2A手机充电头或专用的电源适配器。对于部署在屋顶或隐蔽处的传感器可以考虑使用带有 Micro-USB 接口的电源模块集中供电。外壳所有电子部件必须装入绝缘、阻燃的外壳中。可以使用3D打印的盒子或者购买现成的塑料防水盒。务必在外壳上为传感器开出合适的探测孔烟雾传感器需要空气流通火焰传感器需要透光并为蜂鸣器开出音孔。看门狗与自恢复长期运行程序可能跑飞。务必启用硬件看门狗。在 Arduino Uno 上可以使用avr/wdt.h库。在 ESP32 上自带看门狗在setup()中调用esp_task_wdt_init()进行配置。 同时在 ESP32 的网络连接代码中要加入断线重连机制如果长时间如10分钟无法连接网络或云平台可以考虑自动重启。定期测试至少每月一次进行系统测试。用烟雾罐可在消防器材店购买测试烟雾传感器用吹风机热风保持安全距离测试温度传感器用打火机测试火焰传感器。确保报警触发、手机通知、继电器联动整个链条畅通。6. 从原型到产品功能扩展与进阶思路当基础系统稳定运行后你可以根据兴趣和需求对其进行功能扩展让它从一个“防火报警器”进化成一个真正的“家庭安全中枢”。集成摄像头与图像识别通过 ESP32-CAM 模块在报警触发时自动拍摄现场照片并上传到云存储或发送到你的手机。甚至可以尝试运行轻量级的人形检测模型区分是宠物触发还是陌生人闯入需结合其他传感器判断。多房间组网与精确定位使用多个 ESP32 或 ESP-NOW 协议组建一个低功耗的传感器网络。当某个节点报警时可以同时唤醒其他节点并通过信号强度RSSI大致判断火源位置在手机App上显示“客厅东北角温度异常”而不是简单的“家里着火啦”。与智能家居平台深度联动通过云平台或本地的 Home Assistant 等系统实现更复杂的自动化场景。例如夜间报警时自动打开所有房间的智能灯照亮逃生路径。触发报警时自动关闭家里的智能燃气阀门如果接入的话。离家模式下报警灵敏度自动提高居家模式下则适当降低减少误报干扰。数据可视化与历史分析将传感器数据长期存储到数据库如 InfluxDB并用 Grafana 等工具绘制成图表。你可以清晰地看到家里一天的温度、湿度变化曲线分析电器运行规律甚至能发现“每周日下午书房温度会异常升高一点”从而排查出一个隐藏的散热问题。低功耗与电池备份对于关键节点可以考虑设计电池供电方案并让 ESP32 和传感器大部分时间处于深度睡眠状态定时唤醒检测。这样即使家里停电核心的防火功能也能持续工作一段时间。这个项目最吸引我的地方就在于它从一个具体的安全需求出发串联起了传感器技术、嵌入式编程、网络通信、云平台、甚至简单的数据分析等多个领域。它不是一个空中楼阁的Demo而是一个能真实运行、提供价值的实用系统。每一次调试、每一次优化、每一次成功预警哪怕是误报后的调整都让我对“用技术守护生活”这句话有了更深的体会。动手去搭一个吧从点亮第一个LED到收到第一条手机报警通知这个过程本身就是无价的。
返回列表