基于STM32与OneNET的智能家居控制系统设计与实现全解析
发布时间:2026/10/26 17:48:13 锦皓数字建站

去年我把一套基于STM32的智能家居控制系统从零搭完云端选了OneNET前前后后调试了差不多三个星期。这项目很有代表性因为它几乎把一个嵌入式开发者会遇到的典型知识点全串起来了GPIO、定时器、PWM、ADC、串口、网络模块、云平台协议真正做完一遍你会发现物联网项目的核心不是某个外设怎么驱动而是怎么把一整条数据链路打通。正在纠结毕业设计选题的人、想入门嵌入式物联网的开发者、或者打算给家里做一个能远程控制的自动化装置的朋友这套系统的思路完全可以拿过去直接改。1. 整套系统的设计思路与架构拆解1.1 为什么选STM32加OneNET这套组合先说选型逻辑。智能家居控制系统的核心需求无非是三块本地采集数据、本地控制设备、远端查看与控制。市面上能做的方案很多比如用树莓派、用ESP8266裸跑、用Arduino加各种模块但STM32在这个场景里有它非常明确的位置——它便宜、低功耗、外设资源丰富而且生态资料极其成熟。你随便搜“基于STM32的毕业设计”都能看到海量项目在用它社区积累的驱动代码和调试经验能让一个新手少踩很多看不见的坑。云端为什么选OneNET而不是自己搭服务器理由更直接自己搭服务器要处理域名、公网IP、安全证书、数据库、前端页面这一套下来工作量直接翻倍。OneNET作为成熟的物联网云平台提供了设备接入、数据存储、可视化面板、命令下发这些基础能力个人学习和毕业设计完全够用。对于学生党来说它还有一个看不见的优势——平台操作文档和示例代码非常多遇到问题基本都能搜到答案这一点在我当时的开发过程中帮了大忙。当然OneNET也不只是给学习用的。它支持HTTP、MQTT、TCP透传等多种协议设备端只需要一个能联网的模块就能对接这种“云端能力封装好设备端只管通信”的模式放到实际产品原型阶段也一样能跑不会出现“样例能跑、落地就废”的尴尬情况。1.2 系统架构与信息流怎么设计我那套系统的实际结构是这样的以STM32为主控下面挂传感器和执行器两类设备。传感器负责采集环境信息包括温湿度、光照强度、人体红外状态、超声波测距数据执行器则是LED灯、继电器控制的插座、风扇、窗帘电机这些常见家用设备。通信模块则选用ESP8266作为Wi-Fi桥接把STM32采集到的数据打包上传到OneNET平台。用户侧的信息流其实很好理解。传感器数据采集完STM32做主控逻辑判断同时把数据通过串口发给ESP8266ESP8266走Wi-Fi把数据POST到OneNET。用户打开手机或电脑上的OneNET可视化面板就能看到温湿度曲线、灯光状态、是否有人等实时数据。反过来用户在面板上点一个开关按钮命令就从云端下发到ESP8266ESP8266再通过串口把控制指令转给STM32最后STM32置高/置低对应的GPIO引脚完成继电器或LED的开关。这条链路看着简单真正调起来问题一堆。比如ESP8266的串口波特率是否和STM32匹配数据包格式怎么定命令下发的帧格式如何解析云端数据点名称怎么对应这些都要在设计初期就定好标准。我当时就是在这个环节吃了没提前约定的亏后面排查时花了不少时间。1.3 硬件选型清单与理由这里放一张我实际用到的硬件清单给准备复刻的人做个参考模块型号/方案选择理由主控STM32F103C8T6性价比高资料多适合原型验证Wi-Fi模块ESP8266-01S便宜AT指令简单OneNET资料丰富温湿度传感器DHT11 / SHT30DHT11足够演示SHT30精度更高温度传感器DS18B20单总线多节点并联方便光照传感器BH1750I2C接口直接输出光照数值人体感应HC-SR501被动红外检测有人/无人测距模块HC-SR04超声波可做智能防撞联动显示模块LCD1602IIC转接/ OLED本地查看实时状态执行器LED、继电器模块、风扇、步进电机模拟家居设备的开关与控制电源12V/5V双路电源AMS1117降压给传感器、执行器、主控分别供电这里有个提醒如果控制的是220V设备继电器必须选带光耦隔离的且强弱电要严格分开布线。我见过有人图省事把220V和5V走线绞在一起这是非常危险的。如果只是做课程设计或原型验证用LED、风扇、小电机这些低压负载就够了别去碰强电。2. 工程搭建与底层外设驱动2.1 开发环境选择标准库、HAL库还是CubeMX先回答新手最纠结的库选择问题。我这套系统用的是STM32标准库加Keil MDK原因只有一个参考代码最多排查最方便。HAL库抽象度高、代码量大但网上的示例和毕业设计代码很大比例还是标准库写的。如果你的项目时间紧比如两三个月就要交东西直接跟标准库走最稳等到工作后需要做产品时再切HAL库也不迟。环境搭建这块有几个会卡人的细节。先说Keil5兼容C51和STM32的安装问题。以前老版本的Keil一个版本既要写8051又要写ARM时会出各种兼容问题现在Keil 5以上区分了软件包安装时注意把C51和MDK的Pack路径分开不要用同一个默认目录覆盖。装完后如果编译时提示找不到STM32芯片那就是芯片包没装去Keil官网或Packs页面下载对应系列的DFP包安装即可。也可以用STM32CubeMX生成初始化代码再导入Keil但记得核对生成的时钟配置是否符合你的外部晶振频率我见过不少朋友在8MHz和16MHz晶振的设置上翻车。还有朋友问我用GCC工具链、PlatformIO、或Visual Studio Code写STM32行不行当然行。如果你在PlatformIO里开发打开use_usbhost_hs这类USB HS选项时要特别小心可能导致串口无法识别或端点数不够我因为这个卡了好几天后来把配置里的USB相关选项关掉才恢复。如果你用Makefile或PlatformIO这类非Keil环境还要注意stm32 ld文件它决定了Flash和RAM的地址分配。链接脚本里堆栈设置得太小跑一段时间程序就会莫名其妙死机不是所有死机都是逻辑错。2.2 按键、LCD1602、旋转编码器这些“小外设”的接法很多人做项目时把注意力放在大模块上结果在按键这类小东西上栽了跟头。按键模块电路设计是个高频搜索词为什么大家总在搜它因为按键没做好消抖程序再优秀也没用。常规接法是GPIO配置成上拉输入按键一端接地另一端接引脚按下时引脚拉低松开时恢复高电平。软件上必须做10到20毫秒的延时消抖或者用定时器做按键扫描状态机不能在主循环里裸延时等按键那样CPU会被卡死其他传感器数据全乱套。LCD1602的接法也经常让人头疼。按理说LCD1602是并行接口需要至少6个引脚但配上IIC转接板后只需要两根I2C线就能驱动代码量也大量缩减。我当时直接上了IIC的LCD1602省下来的GPIO给后面挂更多传感器用。五线四相步进电机的驱动也值得提一句它用的是ULN2003驱动板STM32只需要输出四路GPIO时序脉冲即可。要注意的是裸电机引脚直接接MCU是不行的电流不够必须经过驱动芯片而且四相时序一旦反了电机就只会震动不会转这个现象当时坑了我一晚上。关于旋转编码器它是做音量调节、菜单选择的神器。Proteus仿真时用不用正点原子的延时函数都无所谓关键是编码器检测要用外部中断加状态判断不然快速旋转时脉冲会丢。你在Proteus里仿真时如果发现编码器转得飞快但程序反应不过来多半是中断里没做限流或滤波处理。真实板子上也一样编码器引脚需要接10nF级别的电容去抖否则毛刺会被当成有效旋转。2.3 PWM模拟、定时器捕获与时间基准先说说PWM。STM32的PWM功能基本上每个定时器都有输出比较模式配置好后通过调整CCR寄存器就能调节占空比。我在项目里用它做两件事LED灯的无级调光和模拟风扇转速。stm32 pwm模拟测试这个关键词值得新朋友留意PWM配置后你想验证波形对不对最直接的办法就是接LED看亮度是否有级差变化或者用示波器量波形。没有示波器的话用定时器捕获自己发的PWM信号也能测频率这就是所谓的“stm32定时器捕获测频率”玩法。捕获模式需要注意初始电平选择上升沿捕获还是下降沿捕获配合滤波器一起用不然外部信号有毛刺会算错频率。再讲时间基准。项目里凡是涉及延时、超时判断、测距计算的地方都和时间基准有关。SysTick是系统自带的滴答定时器很适合做延时和RTOS心跳但要小心优先级配置不对时会让delay卡死尤其是你在中断里调用延时函数。细心的朋友会发现另一个工具——DWT。DWT是Cortex-M内核自带的调试观测点计数器计一个周期仅需一个CPU时钟周期拿它获取微秒级时间戳比SysTick更精准。我在超声波测距里就是用DWT来捕获Echo引脚的脉宽时间测出来的距离非常稳定。还有一个容易被忽略的细节是LSI校准内部低速时钟本身的误差较大如果程序里用到独立看门狗或低功耗模式建议先测一下LSI的实际频率再校准预分频值。2.4 DS18B20测温与超声波测距的驱动要点DS18B20是典型的单总线器件网上驱动的代码很多但照抄之后很多人大呼读不出温度或者是温度长时间卡在85度。原因基本是时序没严格满足数据手册。单总线要求在初始化、写入、读取时序时精确控制延时通常要进入短暂关中断状态防止其他中断打扰时序。很多人会在初始化时少了一个480微秒的复位脉冲或者写时序中1位数据设置的延时时间不对就会导致第一个字节读出来全是0xFF换算后自然显示85。还有一个高阶玩法设备地址匹配后可以在一条总线上挂多个DS18B20但如果你用常规的搜索ROM方式去寻址程序会肥大很多建议直接读每个传感器的64位ROM编号然后做映射。超声波测距模块HC-SR04则是另一种思路给Trig引脚一个10微秒以上的高电平脉冲模块会发出超声波然后Echo引脚会输出一个和往返时间成正比的高电平。MCU只需要测出这个高电平的时间除以声速340米每秒再除以2就是距离。听起来很简单实际做的时候最怕的是阻塞方式测脉宽用while等引脚变化会让主循环全程卡住导致其他传感器全部停摆。正确做法是用输入捕获中断或DWT计数后台测时间。3. 传感器数据采集与本地处理的踩坑记录3.1 ADC多通道切换的坑连续采集不稳定怎么办STM32的ADC内置多通道采集功能但“stm32 adc切换通道”这个关键词能经常上热搜说明大家在这块翻车的概率极高。我的项目里要采集一个电位器模拟量、一个光敏电阻电压还有一个NTC热敏电阻电压一共三路模拟输入。刚开始写的时候直接把ADC配置成扫描模式一个循环里把三个通道轮询一遍结果发现三路数值之间会互相干扰尤其是切换速度过快时前面的采样电荷还没放完就进入了下一通道转换。解决办法有两个。一个是在每次切换通道后加几十微秒的延时让采样保持电容的电量稳定另一个更靠谱用ADC的注入通道或者DMA搬运方式把所有通道的数据按固定顺序搬运到内存数组里避免中断和轮询干扰转换结果。实际测试下来用DMA方式采集的数据稳定性明显好于轮询方式。还有一个细节STM32的ADC参考电压一般接到VDDA如果板子上VDDA纹波较大采集值会跟着跳。建议在VDDA和地之间加一个100nF和10uF的去耦电容别小看这个小改动。3.2 串口打印的正确姿势printf重定向做STM32开发不打印日志等同于闭着眼睛开车。串口打印最常见的手段是重定向printf到USART标准库的printf最终会调用fputc这个函数所以只需重写它即可。int fputc(int ch, FILE *f) { while((USART1-SR 0X40) 0); // 等待发送寄存器为空 USART1-DR (uint8_t)ch; return ch; }这在Keil里只要在工程里开启MicroLIB就能正常打印。但有个性能问题printf本身属于阻塞串口函数如果串口波特率不高而打印信息频繁整个主循环都会被拖慢。我后来做了一个简单的做法把调试信息放到一个环形缓冲里串口空闲时再去发送这样既不会丢数据也不阻塞主流程。特别是你想用stm32串口调试pid的时候如果定时器中断里直接用printf极可能把控制周期搞乱。正确操作是在中断外做日志输出中断里只记录状态值主循环里统一打印。我调一个温控PID时就是把目标值、当前值、输出值以文本形式打印出来再用串口波形工具查看曲线调试效率提升非常明显。串口还有一个百试不爽的用法把串口作为一个“命令控制台”通过字符串指令人为触发继电器开关或设置PID参数。这样在没有OneNET云端时本地调试硬件控制逻辑会方便很多。比如输入“LED ON”、“FAN 50”这种指令程序解析后执行对应动作比每次重新下载固件快多了。3.3 步进电机、伺服电机485控制的接线与调试这个项目我在本地做了两套电机控制一套用于窗帘模拟的五线四相步进电机一套用于云台转动的伺服电机485控制。步进电机接线方面ULN2003驱动板的IN1到IN4接到STM32的四个GPIO程序上按四拍或八拍方式输出脉冲电机就能持续转动。四拍方式最简单八拍方式转起来更平滑但代码量会增加一些。调试时要注意给电机单独供电不要和MCU共用电源否则电机启动瞬间电流抽走会导致STM32复位这个现象我遇到过很多次。伺服电机485控制则是另一种玩法协议类似Modbus用UART收发控制指令。接线时要注意AB线之间要加120欧终端电阻否则长距离传输时信号反射会把数据帧打乱。波特率必须和伺服驱动器设置一致建议用9600或115200然后逐步发送指令测试。如果你把485芯片的RE和DE引脚直接接在一起收发切换时必须有方向延时通常3到5毫秒否则发完指令立刻收数据会收不全。如果不做这个延时最典型的症状是控制指令发不出去或者明明收到应答却解析成乱码。4. 接入OneNET云平台的核心实现4.1 网络模块选择ESP8266、W5500还是ESP32要把本地数据发到OneNET云平台网络接入模块是绕不开的一环。我在项目里用的ESP8266理由很简单价格低、功耗也能接受、AT指令生态成熟。ESP8266通过串口和STM32通信STM32发送“ATCIPSTART”建立TCP连接再发送“ATCIPSEND”指定数据长度最后把HTTP报文发送出去。这种方式虽然代码零散但每一步都很直观非常适合调试。如果你是入门建议先拿ESP8266跑通一条完整的上报链路之后再考虑更复杂的方案。如果你做的是工业级或长时间运行的设备W5500接入OneNET云平台是更好的选择。W5500自带硬件TCP/IP协议栈不依赖AT指令直接在STM32上通过SPI接口读写寄存器即可。它的优势是网络栈不占主控CPU资源设备稳定性更高。代价是代码复杂度上了一个台阶需要理解W5500的socket管理机制。还有一类选择是ESP32如果你用esp32 onenet方案甚至可以把主控和网络模块合二为一因为ESP32本身就是一个带Wi-Fi的MCU。当然我们讨论的是STM32方案所以ESP32可以作为主控的替代选项而不是搭档。4.2 创建产品、设备和APIKey在动代码之前得先把OneNET平台侧的环境搞定。登录OneNET云平台后台后第一步是创建一个产品产品类型选择“智能家居”联网方式根据你的模块选“Wi-Fi”或“以太网”。产品创建完成后会生成一个产品ID这个ID在设备接入时会用到。然后在该产品下添加设备设备ID和鉴权信息要保存好这一步相当于给设备办了张“门禁卡”。接下来是添加数据流也就是OneNET里的数据模板。每个数据流对应一个设备上传的一个属性比如“temperature”、“humidity”、“light”、“door_motion”等它会自动按时间序列存储数据。这里我先说明OneNET的数据流名称和你上传JSON里的数据点名称必须严格对应不然即使数据上传成功云端也识别不到。最省事的做法是把数据流名称定成和程序代码里json字段名一致的英文小写字符串后续维护也不容易乱。4.3 数据上报HTTP还是MQTTOneNET支持多种协议对接我建议第一次做的人用HTTP代码逻辑最简单。HTTP上报的核心就是向OneNET的API接口发送一个POST请求路径格式类似“/devices/设备ID/datapoints”然后在请求头里带上api-key鉴权字段请求体放JSON格式的测量数据。STM32这边不需要真的去实现一个完整HTTP库只要在ESP8266或W5500上与服务器建立TCP连接后把提前拼好的HTTP报文发出去就行。很多stm32 http库的思路也是这样本质是帮你拼报文和解析响应如果你只是简单上报手写就够了。HTTP方式上报成功有很好的反馈OneNET会返回一个JSON响应里面包含错误码和描述信息。我刚开始调试时经常看到返回400或401后来查资料才发现要么是数据点格式写错要么是鉴权头少了空格。这里贴一段我当时用的HTTP报文格式参考POST /devices/你的设备ID/datapoints?type3 HTTP/1.1 Host: api.heclouds.com api-key: 你的APIKey Content-Length: 数据长度 Content-Type: application/json {temperature:26.5,humidity:60.1,light:320}相比之下MQTT方式适合设备频繁上报或需要云端主动下发控制的场景。MQTT连接稳定、省流量但协议本身比HTTP复杂STM32端需要额外集成MQTT客户端代码。OneNET要求MQTT设备先走登录鉴权流程会涉及token计算第一次接触容易绕晕。所以我的建议是先HTTP跑通再用MQTT优化不要一开始就挑战高难度。4.4 GBK转UTF8的坑与字符编码处理这个环节是很多人在搜索栏里反复输入“stm32 gbk转utf8”的原因。严格来说单片机上做字符编码转换属于典型的资源换正确性问题。Keil的编辑环境默认是GBK编码如果你在源代码里直接写中文比如用于OneNET数据点展示的名称或消息内容最终上传到云端时大概率变成乱码。OneNET后端按UTF-8解析数据本地GBK字节流和云端UTF-8字节流不一致结果就是“能上传但显示全乱”。解决思路有两个。第一个是规避中文字符数据点名称和上报JSON全部用英文这就彻底绕开了编码转换问题。大多数演示项目其实根本不需要在数据里带中文所以这是最推荐的做法。第二个必须用中文时可以在上位机把源文件另存为UTF-8编码然后编译器按UTF-8处理字符串常量或者在固件里内置一张GBK到UTF-8的映射表逐字节转换后再发送。映射表方案的代码复杂度高一点但能在不换开发环境的情况下保证云端数字和汉字都正常。另一个相关的细节是一旦在OneNET可视化面板里添加了汉字标题面板自身是正常的但设备上报的数据点是英文也不会影响展示。所以编码问题不要在单片机端硬扛能用英文就用英文。4.5 OneNET可视化面板与命令下发数据能传上去只是第一步让用户能在网页上直观看到并操作才是智能家居的体验所在。OneNET自带的“可视化”功能非常好用后台可以新建一个仪表盘添加折线图、仪表盘、文本、开关按钮等组件再把每个组件绑到对应的数据流上。温度用折线图、光照用仪表盘、人体感应用状态图标这样整个面板看起来就非常像一个小型智慧家庭管理界面。命令下发是反向链路。OneNET既支持设备主动上报也支持云端向设备下发命令。我在面板上加了一个“开关灯”按钮配置为下发一个命令命令内容选JSON格式比如“{led:1}”表示开灯。OneNET把命令推给设备设备端ESP8266收到后将这段字符串原封不动地通过串口转发给STM32STM32解析JSON后就能执行对应动作。解析JSON在单片机上是臭名昭著的内存大户所以我没用标准JSON库而是用了一个简单的字符串匹配找到“led”字段后判断冒号后面的数字是1还是0。如果以后命令多了再逐步升级成轻量级JSON解析库。这里有一个OneNET相关的冷门需求“onenet上传文件”如果你要做OTA远程升级OneNET平台也支持文件上传设备端可以下载升级包。但OTA实现涉及分块下载、校验、Flash写入和异常回滚工作量非常大新手建议先把基础数据链路跑通以后再考虑。5. 常见问题与排查技巧实录5.1 编译与工具链问题问题一Keil5同时装了C51和STM32包编译时报“Error: L6211E: Invalid /DEBUG directive”或者找不到芯片。这种一般是Pack冲突或安装了不兼容的旧包。解决方法是把两个工具链的Pack安装目录分开然后在Keil的Pack Installer里重新勾选对应芯片型号的DFP包。如果还不行干脆把Keil卸载后先装MDK版再装C51版中间路径不要共用。问题二用PlatformIO或GCC开发STM32时编译能过但程序跑飞。八成是stm32 ld文件里的内存区间配置不对或者堆栈空间设置过小。检查链接脚本里的FLASH和RAM起始地址是否和实际型号一致尤其注意STM32F103C8T6是64KB Flash、20KB RAM如果你的固件超过64KB自然无法运行。用PlatformIO做STM32 USB串口或USB HS模式时还要注意端点映射我之前开了use_usbhost_hs选项结果系统枚举失败设备沉默不语。问题三想用Arduino开发STM32虽然可以用但由于Arduino框架的抽象层次较高对底层外设的精细把控不如标准库直观。建议只是快速验证传感器时用涉及云平台对接和低层协议精调时还是回归STM32原生开发。5.2 通信与协议问题问题一ESP8266发送HTTP报文时OneNET返回HTTP/1.1 400 Bad Request。最常见原因是Content-Length算错多一个字节或少一个字节都会导致服务器解析失败。我后来做法是先在PC上用网络调试工具测通报文再把报文原样搬进STM32代码只在长度参数处留一个变量。还有要检查HTTP头部行尾是\r\n不是\n这个细节会导致头信息解析失败。问题二W5500接入OneNET云平台时总是连接超时。先从硬件排查检查SPI时钟频率是否过高推荐10MHz以内再看看MAC地址是不是全零部分W5500默认MAC会导致网络异常最后确认路由器是否开启了AP隔离。软件层面上W5500初始化后要等DHCP获取到IP再发起TCP连接不要一上电就猛连。问题三MQTT连接OneNET经常掉线或鉴权失败。OneNET的MQTT连接不是简单填IP端口就完事需要在CONNECT报文里带上产品ID、设备名和鉴权信息并按要求计算出password。很多人直接把HTTP的api-key填到MQTT里结果服务器拒绝。如果确认格式都对还不行检查设备时间别把过期时间戳填进去。5.3 外设与驱动问题问题一ADC切换通道后第一次采集的数值明显偏大或偏小。这是采样保持电容充电时间不足导致的解决办法是在切换通道后丢弃前两次采样结果取第三次以后的数据。更优雅的做法是打开ADC的DMA循环模式把多次采样结果做平均值滤波。问题二温度传感器数值一直显示85。这是DS18B20未正确初始化时的默认上电温度值说明通信根本没建立。重点检查复位时序、寄生供电问题。临时解决方案是给DS18B20的VCC单独供3.3V或5V不要依赖数据线寄生供电这样读温度最稳定。问题三定时器捕获的频率值抖动厉害。检查输入引脚上有没有加RC滤波器外部信号是不是高低电平毛刺太多。STM32的定时器输入滤波器寄存器可以设置数字滤波把采样频率和滤波深度配好捕获结果就会平整很多。如果你测的是PWM信号别忘了把通道配置为双边沿捕获这样即使在50%占空比下也能精确测出频率。问题四在FreeRTOS系统里调用Flash擦写函数结果系统卡死或数据写坏。Flash擦写期间必须关闭中断并防止任务调度否则擦写过程中被高优先级任务打断轻则写入失败重则硬件阻塞。正确做法是进入临界区后再擦写如果数据量大建议外挂一块SPI Flash存储不要写内部Flash。问题五延时函数在优化等级改变后突然卡死。有些延时函数依赖空循环编译器优化后直接把空循环优化没了非常诡异。可靠做法是用DWT或SysTick实现延时不依赖编译器优化行为。在Proteus仿真里用正点原子的delay函数时也要注意仿真时钟和真实定时器配置是否匹配仿真环境下定时器中断触发机制不完全一致跑死循环很常见。6. 我的一些经验和小技巧做完这个项目我最深的体会是智能家居控制系统的难点不在于把某个模块点亮而在于把所有模块按“端到端”的思维串起来。传感器采集、本地控制、云端上报、命令下发、可视化展示每一环都要有一条明确的数据通道任何一环断了整个系统就是半残废。所以我的建议是第一版代码不要在main.c里堆几千行分成sensor.c、ble_ctl.c、oneNET.c、uart_debug.c这种模块化文件哪怕文件小一点也要把职责划清。后面要加新设备时只改对应的驱动文件和服务层逻辑不用天天全盘翻代码。调试方面强烈建议保留一个独立串口做日志输出并且用上位机串口工具把每次上传、下发、传感器状态都打印出来。你以为云端收到了数据其实可能只是本地发了你以为命令下发了其实可能卡在网络模块那一步。只要日志清晰这些问题都能在几分钟内定位。也正因如此我后来在项目里养成了一个习惯每遇到一个诡异问题先把类似“stm32串口调试pid”、“stm32 adc切换通道”、“w5500接入onenet云平台”这样的关键词搜一遍几乎所有坑都有人踩过踩坑笔记往往是排查最快的方式。如果后续想让这套系统更像“产品”可以考虑往网关方向升级。比如用支持FreeRTOS的STM32做多设备汇聚用k210与stm32通讯实现摄像头图像识别联动或者把本地交互改成蓝牙通信配合手机APP。也可以把家里鱼缸改成智能鱼缸接上水位传感器和加热棒用OneNET做远程监控加自动投喂。总之这套架构的延展性很好值得在这个基础上继续折腾下去。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。