基于ESP-IDF的智能温室 AI 控制系统
基于 `ESP32-IDF` 的项目,先记录一下,也算给我后面做毕设留个档,顺便分享一点自己的经验。
项目名字叫《基于端云协同的智能温室 AI 控制系统》。
这个项目算是我目前做过最复杂的一个项目了。它本来其实是两个项目,一个偏底层传感器和控制,另一个偏联网和 AI 交互。后来在导师的鼓励下,我尝试把这两个东西合在一起,最后就做成了现在这个智能温室 AI 控制系统。
说实话,刚开始我也没想到会越做越大,做到后面发现它已经不是单纯“读几个传感器”或者“接一个 AI”那么简单了,而是真的变成了一个比较完整的小系统。
我目前用到的技术和硬件大概有这些:
`ESP32-S3` 开发板、`ESP-IDF` 框架、`FreeRTOS` 多任务调度、`WiFi` 通信、`MQTT`、`OneNET` 云平台、`WebSocket`、网页配网、`SGP30`、`GY30/BH1750`、`DHT11`、土壤湿度传感器、麦克风、音频放大器这些。
整个项目我自己大概把它分成两大块来看。
第一块就是 AI 交互这一块,主要做的是云端 AI 的接入和语音对话功能。
第二块就是底层硬件这一块,主要是四个传感器、风扇这类执行模块,还有数据采集和控制。
后面如果有时间的话,我也会按这两个方向慢慢整理,不然全堆在一篇里真的有点乱。
先说底层传感器这部分。
我这里用了四个比较基础、也比较常见的传感器,分别负责采集温室环境里的不同数据。
`SGP30` 是空气质量传感器,用来检测空气相关的数据,它走的是 `I2C`。
`DHT11` 用来测空气温度和湿度,这个大家应该都比较熟。
`GY30` 其实对应的就是 `BH1750` 光照传感器,也是 `I2C`,它和 `SGP30` 可以挂在同一条总线上,只要地址不一样就行。它主要用来检测环境光照强度。
土壤湿度这一块,我用的是土壤湿度传感器,通过 `ADC` 去采样读取数值,主要就是看土壤干不干。
这四个传感器基本就是整个系统的数据来源。可以简单理解成,它们负责“产出数据”,后面所有的显示、分析、远程查看、AI 问答,都是建立在这些数据基础上的。没有这部分,后面的功能其实都没法成立。
除了传感器,底层还有执行部分。
比如风扇模块。我这里做的思路就是,系统不只是能“看见”环境变化,还要能“做出反应”。比如温度高了、空气不流通了,或者 AI 收到用户指令了,就可以去控制风扇运行。这样整个系统才不只是监测,而是有一点“智能控制”的感觉。
然后就是网络部分。
ESP32-S3 本身自带 `WiFi` 和蓝牙,所以做联网项目确实很方便。要实现和云端 AI 交互,最基础的一步肯定还是先连网。
如果只是为了快速测试,其实最简单的方法就是在代码里直接写死 WiFi 名称和密码。不过为了让整个项目更完整一点,我最后采用的是网页配网的方式。也就是说,设备先开一个热点,用户连接这个热点后,在网页里输入家里的 WiFi 名称和密码,设备再拿这些信息去连接路由器。
这样做的好处就是不用每次换网络都重新烧程序,而且演示起来也更像一个真正的产品,体验上会好很多。这一点其实和很多智能设备的思路都差不多。
设备连上 WiFi 之后,接下来就要和云端通信了。
我这里主要用了两个方向,一个是 `MQTT`,一个是 `WebSocket`。
`MQTT` 这一块,我主要是拿来接 `OneNET` 云平台。它的作用说白了就是做远程数据上传和远程控制。
比如传感器采集到的温湿度、空气质量、光照、土壤湿度这些数据,都可以上传到云平台上。这样即使人不在设备旁边,也可以远程看到当前温室的状态。这个感觉有点像远程看监控,只不过我这里看的不是画面,而是环境数据。
除了上传数据,它也可以接收云端下发的命令。比如我现在已经可以做到远程下发指令,让风扇转动,也可以在远端查看设备当前采集到的数据。做到这一步之后,这个系统其实就已经不只是本地小实验了,而是有一点“端云协同”的味道了。
再说 `WebSocket`。
这一块主要是为了接入 AI,实现实时交互。因为语音对话这种场景,对实时性要求还是比较高的,所以我这边是通过 `WebSocket` 去和 AI 服务建立连接。
你可以把它理解成,设备和 AI 之间建立了一条比较实时的通道。人说话,设备把音频或者文本传过去,AI 再把结果返回来。这样整个交互过程才会比较自然。
不过这里还有一个问题,就是 AI 本身其实不知道你这个设备有什么能力。它并不知道你有哪些传感器,也不知道你能不能控制风扇。所以如果只是单纯把 AI 接上,它很多时候也只是“会聊天”,但不一定真的能帮你控制设备。
所以我后面又加了 `MCP` 这一层。
这个东西你可以简单理解成,是给 AI 注册它能调用的功能。比如:
- 它可以读取传感器数据
- 它可以查询当前环境状态
- 它可以控制风扇开关
- 它可以根据已有数据给出回答
加上这层之后,AI 就不只是一个聊天模型了,而是真的能和设备结合起来。
举个例子,如果我问一句:“现在温室里的空气怎么样?”
那 AI 就不是随便回一句,而是会去读取当前传感器的数据,再组织成一句正常的话告诉我。
如果我说:“把风扇打开。”
它就可以调用已经注册好的控制功能,去真正执行这个动作。
做到这里之后,我个人感觉这个系统才算真正有点完整了。因为它不只是采集数据,也不只是联网传数据,而是已经能做到“人和设备自然交互”了。
当然,要实现语音对话,光有 AI 和联网还不够,还需要音频这一整套东西。
所以项目里我还接了麦克风和音频放大器。麦克风负责采集人的声音,设备收到语音之后,会先做处理,再发给 AI;AI 返回结果以后,再通过喇叭或者音频输出模块播出来。
这一部分其实也很复杂,因为音频这块本身数据量就比较大,而且实时性要求比较高,调起来挺折磨人的。这里只能先简单带一下,不然如果细讲的话,内容会一下子变得特别硬核,对新手也不太友好。
不过从效果上来说,音频模块一旦跑通,整个项目的完成度会一下子高很多。因为它不再只是“传感器 + 云平台”,而是真的可以听、可以说、可以互动,整体感觉会更像一个完整的智能设备。
总结一下的话,我觉得这个项目最难的地方,不在某一个单独模块,而在于它涉及的东西真的很多,而且最后还得把这些东西真正整合到一起。
单独做传感器采集,其实还好。
单独做网页配网,也还能接受。
单独做云平台上传,慢慢调也能跑起来。
单独做 AI 接入,虽然麻烦,但也能一点点解决。
但当这些东西全部放在一个项目里一起跑的时候,问题就会一下子多起来。比如任务之间会不会互相影响,联网会不会卡住采集,AI 读到的数据是不是最新的,控制逻辑和云端显示能不能对应上,这些其实才是最花时间的地方。
所以这个项目给我最大的感受就是,做复杂项目的时候,真正重要的已经不只是“会不会写代码”,而是你能不能把整个系统理顺,能不能让不同模块稳定地协同工作。
目前这个项目的代码量已经有六七千行了,里面涉及的东西确实挺多的,所以这篇也只能算是一个比较粗略的经验分享,不可能一下子全讲完。
后面如果我继续整理的话,大概率会拆成几个部分慢慢写,比如:
- 传感器数据采集这一块
- 网页配网和 WiFi 连接这一块
- OneNET 云平台这一块
- AI 语音交互这一块
- MCP 功能调用这一块
这样写起来会更清楚一点,别人看起来也不会那么累。
如果有人对其中某个部分感兴趣,也可以留言交流。只要我后面还记得,我会尽量继续补。
如果有设计需求也可以找我,本人大三,还在继续学习中,最近也确实比较缺项目经费和学习资金。求大佬给点建议,本人投简历都是已读不回!!!
最后我再放一张流程图,这样整体结构会更直观一些。

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)