恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
Android物联网开发实战:从连接方案选型到OTA升级的全栈指南
首页
资讯中心
/
Android物联网开发实战:从连接方案选型到OTA升级的全栈指南
Android物联网开发实战:从连接方案选型到OTA升级的全栈指南
发布时间:2026/9/15 22:46:43
1. 物联网项目里的Android终端和普通App完全不是一回事很多人一听“Android物联网开发”第一反应是把手机App接上云、连个蓝牙然后就觉得万事大吉。我早年也这么想直到真正接手了一个环境监测终端的项目才发现自己在普通App开发里积累的经验在物联网场景下经常不够用。先说个最直观的差异普通App的“用户”是人人会用手指点屏幕会容忍几百毫秒的加载会根据界面提示做操作。但物联网场景下Android设备很多时候是无人值守的。它可能是一个工位上的数据采集器是充电桩里的控制面板是工厂产线上的工业平板也可能是冷链车里的温度记录终端。没有人在屏幕前帮你点击“重试”也没有人会看一眼日志告诉你“刚才闪退了”。设备要自己判断网络状态自己处理断电重启自己把数据缓存下来等到网络恢复再补传。这意味着你写的每一行代码都要考虑如果网络断了会怎样如果系统把进程杀了会怎样如果硬件突然掉电会怎样这些在普通App开发里属于“极端情况”的逻辑在物联网项目里是主路径。另一个容易被忽略的点是硬件边界。普通Android开发面对的是手机厂商为你封装好的硬件抽象你调一个Camera API就能拍照调一个LocationManager就能定位。但物联网项目里你很可能需要自己去处理串口通信、GPIO控制、传感器数据上报甚至直接跟Linux内核的设备节点打交道。Android系统在这里更像是一个运行Linux内核、拥有Java层框架的“主板操作系统”你需要理解一些嵌入式开发的思路。所以这篇文章我想从一个一线开发者的视角把Android在物联网时代做应用开发这件事拆开来讲角色定位、连接方案选型、连接层架构、设备管理、OTA升级、调试交付以及那些真正踩过的坑。无论你是准备入行物联网的Android工程师还是团队里需要兼顾设备端和控制端的全栈开发者这篇内容应该能帮你把整个技术地图理顺。2. 先搞清楚你的Android终端在物联网体系里扮演什么角色不夸张地说我见过很多项目失败不是因为技术选型差而是因为一开始就没想清楚设备端、Android端、云端各自该干什么。Android在物联网体系里至少有三类截然不同的角色开发侧重点完全不同。2.1 角色一作为IoT节点的系统底座第一类Android设备本身就是物联网终端。它直接连接传感器、执行器跑完整的业务逻辑。典型的例子带触摸屏的智能门禁、会议室预定屏、工业HMI人机界面、医疗设备操作终端。这类项目里Android不是“手机系统”而是一个带GUI的嵌入式系统。你需要关注的是系统裁剪很多项目会把系统做成一个只跑一个应用的专用终端开机自启禁用状态栏锁死返回键。串口和外设通信通过USB转串口、GPIO或I2C读取传感器数据。看门狗与进程守护应用崩溃后要能自动拉起系统长时间无响应要能自动重启。电源管理不使用时休眠但需要准点唤醒执行任务。这类开发对Android Framework层的理解要求比较高很多时候要做一些系统签名、修改开机动画、关掉默认输入法等定制工作。如果你用普通的MDM方案或者设备管理API来锁应用会比自己在应用层硬扛稳定得多。2.2 角色二作为用户的“遥控器”第二类也是目前最常见的形态——Android手机作为用户控制端远程控制设备。手机里装一个App配网、绑定设备、查看数据、下发指令。家电、灯具、插座、门锁、摄像头基本都是这个模式。这类开发的核心不在UI而在连接层和状态同步。你要保证指令可靠到达设备保证设备状态和手机端显示一致保证用户在户外时也能经过云端间接控制家里的设备。这部分对Android开发者的挑战是你熟悉Activity、Fragment、ViewModel但未必熟悉MQTT长连接、QoS级别、遗嘱消息、Topic设计。但物联网控制端恰恰特别依赖这些。2.3 角色三作为边缘计算节点第三类Android设备作为“边”的存在在靠近设备的地方做数据处理再把结果上送云端。停车场道闸、智能空调集群的本地网关、门店里的客流统计终端都属于这种。边缘计算的要求和前面两者有区别本地决策要及时网络抖动时本地判断逻辑仍要运行。数据预处理原始数据在本地过滤、聚合只把有效数据传云降低带宽和云端费用。断网容灾离线缓存要做得足够健壮恢复网络后无脑补传且不能造成数据错乱。很多项目里网关本身就是一台Android设备它既要从各种子设备收集数据又要和云端保持同步还可能要协调子设备的OTA升级。2.4 一个项目里可能同时存在多种角色虽然我分了三类但实践中经常混合。比如一个应用既作为本地控制台角色一又作为远程控制端角色二同时还做数据预处理角色三。我做过一个充电桩项目Android触屏终端装在桩体上用户扫码后在屏幕上操作充电流程。同时桩的状态、计费信息、故障告警都要上报云端运营人员在后台也能看到。这就是一个典型的混合角色本地交互、边缘算账、云端上报三者同时存在。这个项目让我体会最深的是你在开始写代码之前必须先画清楚数据流向。谁产生数据、谁消费数据、数据在哪里暂存、网络断开时数据走哪条路全部理清之后再谈技术选型和架构设计。那怎么选直接说结论选连接方案不取决于“哪个更先进”而取决于你的设备部署位置和通信距离。下面专门展开这一块。3. 连接方案选型BLE、Wi-Fi直连、MQTT还是HTTP物联网项目的连接选型可以说是决定项目成败的第一道关卡。连接选错了后面测试起来会非常痛苦。我把Android侧最常见的几种方案列出来直接讲适用场景和坑。3.1 BLE低功耗蓝牙BLE是近距离设备控制的主流方案。设备端通常用BLE模组很多基于nRF52、ESP32等芯片Android手机作为Central中心设备主动连接Peripheral外围设备。BLE的优点是低功耗、配对流程简单很多场景甚至不需要配对连接后直接通过GATT读写特征值。缺点也明显传输速率低、距离近空旷环境也就10-30米、不适合大数据量传输。Android开发里用BLE要注意几个点权限Android 12及以上要申请BLUETOOTH_SCAN、BLUETOOTH_CONNECT这两个运行时权限不再兼容旧版的BLUETOOTH权限。很多老项目升级到新系统以后扫描不到设备八成就是这个原因。连接稳定性系统蓝牙服务偶尔会抽风扫描回调不触发、连接状态异常掉线都很常见。真机上百台设备实测下来最稳的做法不是在一个Activity里直接扫而是用一个独立的Service做BLE的操作封装。MTU协商默认MTU只有23字节意味着一次最多传20字节的负载。如果要传大包必须先发起MTU协商请求设备端支持的话才能到更大的值常见是247字节。很多BLE协议传不了文件、传不了OTA包卡的就是这个。如果你的业务只是控制开或关、设置一个参数、读几个状态BLE就够用。3.2 Wi-Fi直连Wi-Fi直连通常有两种做法手机连设备自己开的热点或者设备连路由器、手机和设备在同一个局域网内通过Socket/UDP通信。第一种做法设备热点常用于配网阶段。设备上电后自己发一个无密码的AP热点手机连上这个热点把家里路由器的SSID和密码发过去设备收到后连路由器随后手机也切回路由器。这就是最常见的SmartConfig配网流程。实际开发时需要注意Android手机Wi-Fi切换的API从Android 10以后约束变严了直接用SettingsPanel让用户手动切网比在代码里强切要省心很多也不容易被系统禁止。第二种做法局域网内通信适合视频流、语音对讲、批量文件下发这类高带宽场景。协议一般用自定义TCP协议或者用成熟的协议如RTSP、MQTT over TCP。局域网内的延迟低、带宽充足但要注意路由器下多设备组播、广播隔离的问题。3.3 MQTT远程控制场景下MQTT基本上是最优选。它基于TCP协议走发布/订阅模式有QoS分级有遗嘱消息对弱网环境做了大量优化消息头开销极小固定头可以只有2字节。Android端最常用的库是Eclipse Paho可以配合RxJava或者协程封装。在服务端的Broker选型上工程上常见的有EMQX、Mosquitto云端托管的有各类物联网云平台的MQTT接入点。MQTT层面的几个关键点QoS级别QoS0最多发一次QoS1保证至少一次QoS2确保只有一次。端上控制类指令我一般用QoS1能接住重复消息但不会丢指令。Topic结构要设计得有层次。比如设备状态主题devices/{deviceId}/status指令下发主题devices/{deviceId}/command。层级化Topic的好处是可以批量订阅也方便云端做权限控制。遗嘱消息设备异常掉线时Broker会代发遗嘱消息。这一点非常重要云端靠它来感知设备离线否则只能等心跳超时。我在多个项目里验证下来Android端MQTT要注意的一个大坑是长连接在系统休眠时会被断开网络切换时也会断。所以连接层必须设计自动重连能力后面专门讲。3.4 HTTP/HTTPS短连接有些项目用HTTP轮询拿状态看起来简单但效率太低、实时性差。HTTP更适合用在“低频、非实时”的云端接口上比如登录鉴权、拉取设备列表、上传统计数据。如果你做的是设备管理后台类AppHTTP为主没问题。但如果你做的是实时控制响应要求小于1秒老老实实上MQTT。3.5 连接方案的快速评估逻辑我一般按下面这个逻辑做选型决策场景特征推荐方案核心考虑因素近距离10米内、低速、低功耗、电池供电BLE功耗优先数据量小不需要账户体系中等距离同一局域网、视频/音频/大批量文件Wi-Fi Socket/UDP带宽优先网络环境可控远程控制、慢速状态同步、弱网容忍MQTT实时性要求中等必须有离线消息机制低频业务、与云端API交互、后台管理HTTP/HTTPS简单但轮询要克制避免无谓的电量浪费表格只是参考实际项目里往往是混合使用。比如一个智能家居网关配网阶段用BLE或热点日常控制走MQTT局域网内视频流走Wi-Fi直连。方案之间是互补关系不是互斥。4. 连接层架构生命周期、断线重连和数据协议设计定了选型真正写代码时连接层是物联网App里最容易翻车的地方。很多项目的Bug清单里反复出现的都是“设备离线了App还不知道”“App切后台再切回来数据老是刷新不出来”。这些问题的根源不在UI而在连接管理层。4.1 用Service而不是Activity管连接手机App控制端最常见的一个错误在Activity的onCreate里初始化MQTT连接在onDestroy里关闭。用户一旦把App切后台系统很可能杀掉Activity连接就断了再切回来重新创建连接期间所有推送消息全丢了。正确做法是把这个连接放到一个前台服务里。服务持有MQTT客户端、监听连接状态、维护订阅关系Activity和ViewModel只是通过Repository模式获取数据不直接持有连接对象。有人担心前台服务常驻会有通知栏影响体验。实际上Android提供了Service.startForeground必须带一个通知但你可以把通知做成低打扰的样子同时保证连接稳定。如果你做的是企业级设备控制端这种取舍用户能接受。还有一点网络变化时系统会发CONNECTIVITY_CHANGE广播建议在Manifest里声明然后在广播里触发一次“重新检查所有连接”。不要让连接对象自己去监听统一管起来避免状态不同步。4.2 心跳、超时和指数退避重连MQTT也好、TCP也好长连接必须有心跳。心跳太频繁浪费流量和电量太慢会导致掉线无人知。局域网环境我设30秒公网环境设60秒。云端Broker如果支持可以开启服务端的Keep Alive校验不匹配就断开。重连策略这块指数退避是标配。第一次失败等2秒第二次4秒第三次8秒最高可以封顶到5分钟。一路上限然后每隔5分钟尝试一次直到成功。这个策略能避免设备端集体掉线时恢复网络瞬间出现“惊群效应”——所有客户端同时重连Broker直接被冲垮。我遇到过一次真实事故工厂断电200台设备集体掉线来电后同时重连MQTT Broker挂了然后连环掉线。从那以后我会在重连时间上加一个随机偏移比如random(0, 2000)毫秒打散重连时机。这个细节很多文档不会讲但生产环境真的能救命。4.3 数据帧协议从JSON到二进制通信协议里的数据格式也是物联网项目的一个常见分歧点。JSON的最大好处是调试方便、可读性强适合低频状态同步和设备控制。缺点是解析慢、体积大不太适合频繁采样上报的场景。如果一台设备每隔100毫秒上报一个16字节的传感器数据你用JSON包一层体积直接翻三倍。工业类项目我见过很多自定义二进制协议。比如Modbus协议一个请求帧里包含地址码、功能码、数据域、CRC校验干净利落。Android端的解析逻辑用一个ByteBuffer就能搞定性能很高。我的建议是没有历史包袱的项目高频数据走二进制低频指令走JSON。两类数据走不同的Topic或不同的端口互不干扰。二进制协议设计时需要注意字节序、对齐和CRC校验。字节序设备端如果是小端比如ESP32很多是x86或ARM都是小端Android端也是小端但如果协议参考文档写得不清楚就很容易踩坑。建议在协议里明确标注并写单元测试锁定。CRC校验网络传输有干扰CRC能有效识别坏帧不要省。数据帧校验失败就丢弃等重传别硬解析。4.4 离线缓存与补传断网时数据必须在本地保存。Android侧实现离线缓存最稳的方案是SQLite。注意不是SharedPreferences也不是文件里套个Map。只有SQLite才能在断电情况下保证数据不损坏。缓存表至少要包含这几个字段id、payload、createTime、status。status标记是否已上传。在ConnectionState.CONNECTED事件触发时扫描status0的记录按时间顺序补传成功后置为status1同时清理。补传不成功就保留等下次重连。有一个细节很容易踩坑补传的数据的时间戳必须是原始采样时间而不是补传时间。我在一个温度监测项目里见过由于端上做缓存补传时没有保留原始时间戳导致云端绘制出来的温度曲线出现了整体偏移。排查了两天才发现。所以设计表结构时原始业务字段一个都不能少。5. 从业务代码到模块化架构一个物联网App的项目落地结构连接层只是根基再往上就是业务架构。物联网App如果按普通App的MVP方式写随着设备类型变多很容易变成一坨“设备类型业务逻辑”的意大利面。这里分享一个我验证过多次的Android项目结构方案。5.1 按“设备域”而不是“页面”来分包传统App按页面分包比如ui/home、ui/detail。物联网App我建议按设备域分包device/light、device/airconditioner、device/charger。每个域包含它自己的数据模型、仓库和页面。好处是扩展性极强。新增一种设备只是新增一个域不会动到其它域。通用的连接管理、推送服务、账号体系放在core包里域之间不互相依赖。app/ ├── core/ │ ├── mqtt/ # MQTT连接管理 │ ├── bluetooth/ # BLE操作封装 │ ├── network/ # HTTP/API层 │ ├── database/ # 本地缓存 │ └── auth/ # 账号与登录态 ├── device/ │ ├── light/ # 灯设备域 │ ├── airconditioner/ │ └── charger/ └── main/ ├── MainActivity.kt └── ...这样分包以后你会发现某个设备域内部怎么调整都不会破坏其它域的功能协同开发时也比较舒服。5.2 用抽象类统一设备模型不同设备虽然差异很大但从控制端的视角看都有一些公共能力获取在线状态下发指令上报状态处理能力是否支持OTA所以我会定义一个IotDevice接口或抽象类里面包含这些通用能力然后让每个设备域去实现各自差异。控制页面依赖接口不关心具体设备是灯还是空调。实际开发时我倾向于用组合而不是继承。设备域之间可能有一些能力是共享的比如都支持定时开关那就单独抽一个TimerCapability接口设备类去实现它而不是强行往上继承。5.3 状态管理单一数据源物联网App里最头疼的一个问题是状态不同步。设备上报了“已关闭”但UI还显示“运行中”。要根治这个问题必须在架构上强制单一数据源。我习惯用StateFlow或者LiveData在Repository层管理“设备最新状态”。UI层只观察这一个数据源任何变化都从这里出去。本地缓存的数据、MQTT实时消息、HTTP轮询结果最终都统一汇入这个数据源再由ViewModel分发给UI。这样设计以后状态冲突的概率大幅降低。要显示“最后在线时间”也只需要在这个数据源里保留一个字段。测试时Mock这个数据源就能非常方便地模拟各种异常情况。6. OTA升级Android在物联网场景绕不开的设备管理能力不是所有物联网设备都有OTA需求但只要是长时间部署在现场的Android设备OTA几乎是标配。这里说的OTA分两种一种是给Android系统升级另一种是给同集群里的其它MCU或者嵌入式模组升级。很多Android设备管理系统里的OTA指的是后者。6.1 系统镜像升级 vs 应用升级如果整个系统需要升级Android阵营的基本思路是A/B分区无缝升级。设备在后台下载完整系统镜像写入备用分区然后切换启动分区重启后就进入新系统。优点是失败还能回滚不会变砖。但A/B分区需要系统层级的支持不是每个板卡厂商都开放了。很多定制方案其实是在Recovery模式里手动刷写或者用厂商提供的OTA Manager。如果你的场景只是应用自身迭代比如APK升级最简单的是通过云端下发APK下载链接应用内自行安装。但Android 8以上“允许安装未知来源应用”需要引导用户授权工业环境麻烦一点。更省心的做法是企业设备集成商有一套完整的设备管理SDK你在SDK里触发静默安装由MDM通道处理权限。如果项目体量不大也可以在应用内封装一个安装逻辑提示用户手动允许。6.2 给MCU或者其他IP设备OTA如果你要负责给同集群里的MCU升级固件那就要处理一个完整的流程了远远不是发个文件包那么简单。我以一个典型的“Android网关给ESP32子设备OTA”为例剖析。第一步从云端拉取固件版本信息比对本地子设备当前版本发现有新版本进入待升级状态。第二步下载固件包到Android本地。注意下载时校验哈希别下个坏包。第三步通过BLE或者Wi-Fi通道分片发送给子设备。每片发完等ACK超时就重发。我用过的最小传输单元是512字节配合序号和CRC。第四步全部发完后发一个“重启并跳转到新固件”的命令。子设备重启后上报新的版本号。第五步Android端根据回执更新升级状态如果失败记录失败原因提供手动重试入口。这一套流程最考验的是升级状态的机。状态机设计得不好很容易出现订单混乱中间掉线、断电、重连后到底该发哪一片所以状态表里至少要记录版本号、总包数、已确认包数、当前传输状态。每次恢复连接时先从已确认包数接着发而不是从头来。OTA还有一个容易被忽略的管理维度升级策略。现场大量设备要不要同时升级我的建议是分批灰度。先在测试设备上升级确认没问题再按百分比灰度放量最后全量。物联网项目出事故连锁反应很快OTA必须稳不能图快。7. 状态上报配置与设备管理API的设计思路聊完OTA再聊设备侧管理API。一个物联网平台都会提供设备管理和状态监控相关的APIAndroid端作为执行方或者控制方会频繁调用这些接口。7.1 云平台设备管理API的主要能力我以常见的IoT平台为例设备管理相关的接口一般包括注册与鉴权设备第一次接入云端要拿到唯一的设备密钥。状态上报设备实时上报属性比如在线状态、电量、信号强度。命令下发云端下发指令到设备比如“打开开关”“调整档位”。固件升级跟上面讲的OTA流程衔接。拓扑管理如果是网关类设备还需要管理子设备的上线、离线、绑定关系。Android端如果承载网关职责尤其要重视拓扑管理。我记得很清楚有个项目里子设备掉线后重新上线由于子设备ID没有做幂等处理平台里出现了两条重复记录导致指令下发时随机到一条记录上看起来就像“设备时灵时不灵”。后来在子设备上报逻辑里加了设备序列号的去重判断才解决。7.2 设备状态上报的字段设计状态上报的字段设计有讲究必须带的设备唯一ID、时间戳、版本号、信号强度。业务字段每类设备自己的属性。状态字段在线/离线/维护中。上报时间戳要用设备本地时间还是云端时间我的建议是两者都保留。本地时间用于展示实时数据云端时间是平台校验用的基准时间。如果产线设备本地时间不准靠云端的统一标准时间做统计排序更可靠。7.3 大字段上传注意压缩摄像头截图、设备故障日志、SQLite离线缓存包……这些大字段用JSON直接传会比较臃肿。我一般会用gzip压缩后再传云端收到后会解压压缩率很高能省不少带宽。网络弱的环境下超大数据包要分块上传并记录分块索引和总块数传完再合并。8. 配网、绑定和用户体系从单机调试到量产部署前面讲的偏技术架构这一部分聊产品化阶段最容易忽视的几个环节。很多项目Demo做得好好的一到量产就各种小问题冒出来问题都出在设备配网、用户绑定、型号管理这些“脏活累活”上。8.1 设备配网的三种模式智能设备入网方式从体验上分三类BLE辅助配网手机通过BLE直连设备把Wi-Fi账号密码传过去。体验最好也是很多中高端设备的选择。设备热点配网手机连设备AP热点经HTTP接口下发路由配置。开发成本低但用户要手动切网两次。SmartConfig手机和设备和路由器通过UDP广播等方式交换信息理论上连网过程“无感”但兼容性稍差。项目里如果时间紧先做热点配网逻辑很直白。但凡是面向C端的产品我建议最终做成BLE辅助配网。热点配网的“连一次热点再切回正常网络”这个操作对一部分用户来说就是劝退点。配网状态的判断也要小心。设备连路由器失败、路由器密码不对、连上但没外网三种情况要区分开给用户不同提示否则用户只会觉得“这破App连不上”。8.2 设备绑定关系的唯一性设备绑定的数据模型如果不严谨多人控制同一个设备时就会出问题。常见模型是设备ID关联用户ID。看起来简单实际要考虑同一用户多个家庭分组怎么管理设备被解除绑定后要不要清掉旧用户的控制权限新用户绑定时是否允许用户A先解绑再绑给用户B企业设备甚至还要区分管理员和操作员的权限等级。让管理员可以配置操作员只能执行这个权限模型要在绑定时就确定下来。8.3 出厂初始化与批量管理量产设备从产线出来到手要经历原生状态。设备第一次上电状态是未绑定、未配网这没毛病。但第二次用户解绑后设备是什么状态要恢复出厂设置才能给下一个用户绑定吗这里就需要一套出厂状态和恢复逻辑。我在实际项目里做的是设备端有一个“绑定令牌”机制绑定成功后在设备端写入一个标记解绑时云端下发指令清除该标记。这样出厂初始化、重新绑定就都有据可依。量产阶段还要考虑批量刷机和批量配置。通过MDM统一下发APK、默认配置、证书会节省大量人力。如果团队没有能力自研MDM也可以直接采购商用设备管理平台的SDKAndroid驱动层门槛并不高。9. 一些真实调试经验和最终体会按惯例最后分享几个调试过程中的实际案例比任何架构理念都有说服力。9.1 权限和日志最坑Android系统版本的权限策略一直在收紧。有一类问题特别典型Android 13上BLE扫描不到设备但Android 11上很正常。查下去原因是用的是旧版BLUETOOTH_SCAN权限没做版本适配。所以做物联网App时权限适配表一定要在开发阶段就整理出来Android版本涉及权限备注12以下BLUETOOTH、ACCESS_FINE_LOCATIONBLE扫描必加定位权限12及以上BLUETOOTH_SCAN、BLUETOOTH_CONNECT不再需要定位权限但需要声明neverForLocation13及以上附近设备权限Wi-Fi API相关有Wi-Fi扫描相关接口时注意这些权限在真机测试时尤其要跑一遍不要只在模拟器上验证。9.2 日志模块上线必须留一手普通App的日志出问题用户截个图还能看。物联网设备跑在现场没有屏幕可截图调试只能靠远程拉日志。所以应用里一定要内置日志模块滚动记录到文件并支持远程拉取。日志文件同样要考虑轮转。单文件超过5MB就切割最多保留5个文件。日志里不要打敏感信息但设备ID、命令类型、错误码必须全。有一个项目里就是这样一步步定期拉日志才定位到一个“雨天某设备通信频繁超时”的问题——排查结果是因为那台设备固件里某块处理逻辑有严重问题和通信无直接关系但如果没有完整日志根本无从查起。9.3 保持简单的原则最后说点心里话。物联网项目比纯软件项目多的是不确定性。设备硬件批次差异、现场网络环境、第三方协议兼容处处都可能有变量。架构上把连接、缓存、OTA、日志这些基础设施做扎实能帮你应对大部分外部不确定性。如果你的项目还在起步阶段我的建议是连接层用成熟的MQTT方案不要自己造轮子。设备发现用Callbacks回调而不是轮询过程尽量异步化。设备状态一定以服务端/云端数据为准本地不做太多推测。你可能觉得这些是“规范”但做多了就会明白这是省时间的唯一路径。我做了好几个Android物联网项目之后最大的体会是这个领域很少有一上来就“完美”的方案都是在版本迭代中逐步逼近稳定。控制好变量保留好现场问题总能被解决。希望这篇内容能给你一些能直接落地的思路少走几段弯路。