🦞 我是如何基于 opencode 完成 ESP32 智能龙虾缸监控系统开发的
· 阅读需 7 分钟
前言
作为一个喜欢折腾的 DIY 爱好者,我一直想给我的小龙虾缸加一套智能监控系统。最近,我用了 opencode —— 一个强大的 AI 编程助手,竟然用不到 2 小时就搞定了!
今天就分享我是如何通过聊天式交互完成整个开发的。
项目背景
我的小龙虾缸需要:
- 实时监测水温和空气温湿度
- 根据水温自动控制水泵(降温/循环)
- 能随时查看数据状态
- 成本要低(不想买几百块的专业设备)
硬件清单
| 组件 | 价格 | 说明 |
|---|---|---|
| ESP32 开发板 | ¥30 | 主控板 |
| DS18B20 温度传感器 | ¥5 | 水温检测 |
| DHT11 温湿度传感器 | ¥3 | 空气温湿度 |
| 5V 水泵模块 | ¥15 | 水循环控制 |
| 继电器模块 | ¥8 | 控制水泵 |
| OLED 屏幕 (0.96寸) | ¥12 | 本地显示 |
| 杜邦线若干 | ¥5 | 连接线 |
总成本:约 ¥78
传统开发 vs opencode 开发
如果不用 opencode,我需要:
-
查阅资料(2-3 小时)
- ESP32 引脚定义
- DS18B20 和 DHT11 的库使用方法
- Web 服务器搭建教程
- OLED 屏幕驱动
-
编写代码(4-6 小时)
- 初始化各种传感器
- WiFi 连接和配置
- HTTP 服务器和路由
- Web 界面(HTML/CSS/JS)
- 自动控制逻辑
-
调试排错(1-2 小时)
- 传感器读取失败
- WiFi 连接不稳定
- Web 界面无法访问
总时间:7-11 小时
用 opencode,我只花了 2 小时!
对话式开发全流程
第 1 次对话 - 项目框架
我:
我要开发一个 ESP32 智能龙虾缸监控系统,需要以下功能:
1. 使用 DS18B20 测量水温
2. 使用 DHT11 测量空气温湿度
3. 控制一个 5V 水泵(通过继电器)
4. 提供 Web 管理界面,可以查看数据和手动控制水泵
5. 使用 OLED 屏幕显示实时数据
请帮我生成完整的 PlatformIO 项目配置和代码
opencode: 好的,我来帮你生成完整的代码。这个项目将使用:
- OneWire 和 DallasTemperature(DS18B20)
- DHT 库(DHT11)
- Adafruit_SSD1306(OLED)
- ESPAsyncWebServer(Web 服务器)
📝 生成文件:
platformio.ini- 项目配置src/main.cpp- 主程序代码data/index.html- Web 界面
第 2 次对话 - 添加 WiFi 配置
我:
上面的代码不错,但我想要一个配置模式。首次启动时创建 AP 热点 "Lobster_Config",访问 192.168.4.1 可以配置 WiFi 信息。配置成功后保存到 SPIFFS,重启后自动连接。
opencode: 好的,我来添加 WiFi 配置功能。这将包括:
- WiFiManager 类实现配置逻辑
- 配置 Web 页面 HTML/CSS/JS
- SPIFFS 文件系统初始化
⚠️ 注意:首次启动后连接 "Lobster_Config" 热点配置 WiFi。
第 3 次对话 - 自动控制逻辑
我:
我需要根据水温自动控制水泵。规则如下:
- 水温 > 28°C 时,水泵开启(每 10 分钟工作 5 分钟)
- 水温 < 24°C 时,水泵关闭
- 其他温度,水泵每 30 分钟工作 5 分钟
opencode: 好的,我来添加智能温控逻辑:
- 温度阈值配置
- 定时器实现
- 状态机控制水泵开关
💡 智能策略:高温时增加水泵工作时间,低温时节省能源。
第 4 次对话 - 优化 Web 界面
我:
Web 界面需要更美观一些,要求:
1. 深色主题,现代化 UI
2. 实时数据更新(WebSocket 或轮询)
3. 显示历史数据图表(使用 Chart.js)
4. 移动端适配
5. 添加系统设置页面(修改阈值、工作时间等)
opencode: 好的,我来重新设计整个 Web 界面:
- 响应式 HTML/CSS(深色主题)
- Chart.js 图表集成
- RESTful API 设计
- 设置表单和验证
🎨 界面预览:现代化设计,支持手机和电脑访问。
硬件接线
根据生成的代码,接线非常清晰:
ESP32 引脚分配:
GPIO 4 → DS18B20 数据引脚
GPIO 5 → DHT11 数据引脚
GPIO 16 → 继电器控制引脚
GPIO 21 → OLED SDA
GPIO 22 → OLED SCL
关键注意事项:
- ✅ DS18B20 需要 4.7kΩ 上拉电阻
- ✅ 共地(所有 GND 连在一起)
- ✅ 继电器接 VIN(5V),传感器接 3V3
使用体验
首次启动
=== Lobster Monitor System ===
WiFi Config AP: Lobster_Config
Config URL: http://192.168.4.1
Waiting for configuration...
- 连接 "Lobster_Config" 热点
- 浏览器访问 192.168.4.1
- 输入家庭 WiFi 密码
- 保存并重启
正常运行
Connecting to WiFi...
Connected! IP: 192.168.31.45
Starting HTTP server...
OLED initialized
Sensors ready
访问 Web 界面 http://192.168.31.45:
- 📊 实时数据图表
- 🎛️ 手动控制水泵
- ⚙️ 修改阈值设置
- 📱 手机完美适配
遇到的坑
坑 1:DS18B20 总是返回 -127°C
现象: 水温传感器读取失败
解决对话:
我:DS18B20 总是返回 -127°C,这是我的接线代码,请帮我看看
opencode:看到问题了。DS18B20 需要 4.7kΩ 上拉电阻连接到 3V3,
否则无法正常通信。另外检查:
1. 确认 DAT 引脚连接到 GPIO 4
2. 确认 VCC 接 3V3(不是 5V)
3. 确认共地
结果: 加上拉电阻后立即正常。
坑 2:Web 界面刷新很慢
现象: 数据更新需要手动刷新页面
解决对话:
我:Web 界面数据刷新太慢,改用 WebSocket 实时推送
opencode:好的,我来添加 WebSocket 服务器端和客户端代码,
实现实时数据推送,无需手动刷新。
结果: 数据实时更新,体验丝滑。
坑 3:WiFi 经常断线
现象: 运行一段时间后 Web 界面无法访问
解决对话:
我:WiFi 连接不稳定,请添加断线重连机制
opencode:好的,我来添加自动重连逻辑,定期检查连接状态,
断线后自动重新连接。
结果: 稳定运行 24 小时无断线。
对话技巧总结
✅ 正确做法
1. 逐步添加功能
❌ 一次性描述所有需求
✅ 先生成基础框架,再逐步添加功能
2. 描述问题时提供上下文
❌ 代码报错了,帮我看看
✅ 编译时报错 "undefined reference to 'setup()'",这是 main.cpp
3. 明确告知技术栈
✅ 使用 PlatformIO + ESP32 + Arduino 框架
✅ 使用 AsyncWebServer 库(更好的并发性能)
❌ 避免踩坑
1. 不要一次性描述所有需求
- AI 可能遗漏细节
- 代码生成质量下降
- 后续修改成本高
2. 不要忽略错误信息
- 具体的错误信息能帮助 AI 快速定位
- 提供代码片段让 AI 上下文更清晰
最终成果
功能清单
- ✅ OLED 屏幕显示水温、气温、湿度
- ✅ Web 界面实时数据更新
- ✅ 水温 > 28°C 自动开启水泵
- ✅ 水温 < 24°C 自动关闭水泵
- ✅ 手动控制水泵
- ✅ 历史数据图表
- ✅ 阈值设置页面
- ✅ WiFi 自动重连
代码质量
- ✅ 错误处理完善(传感器读取失败时提示)
- ✅ 内存使用合理(FreeHeap > 50KB)
- ✅ SPIFFS 文件系统正常读写
- ✅ 代码注释清晰,易于二次修改
效率对比
| 方面 | 传统开发 | 使用 opencode | 提升 |
|---|---|---|---|
| 代码编写 | 4-6 小时 | 30 分钟 | 8-12倍 |
| 查阅资料 | 2-3 小时 | 0 分钟 | 无限 |
| 调试排错 | 1-2 小时 | 30 分钟 | 2-4倍 |
| 总时间 | 7-11 小时 | 2 小时 | 3.5-5.5倍 |
总结
通过 opencode,我体验到了对话式编程的强大之处:
- 🚀 极速开发:2 小时完成传统开发 7-11 小时的工作量
- 💬 自然交互:用中文描述需求,无需懂复杂语法
- 🔄 渐进迭代:分步添加功能,边写边测试
- 🐛 高效调试:遇到问题直接描述,AI 立即给出解决方案
- 📚 学习赋能:通过生成的代码理解开发流程
最重要的是:我把节省下来的时间,花在更多有趣的 DIY 项目上!
下一步计划
基于这次成功经验,我打算:
- 📸 添加摄像头监控(用 opencode 生成图像采集代码)
- 📈 数据上传到云端(用 opencode 集成 MQTT)
- 🤖 语音控制水泵(用 opencode 集成语音识别)
- 📱 开发移动 App(用 opencode 生成 Flutter 代码)
如果你也想试试,不妨从简单的温湿度监测开始,让 opencode 帮你快速实现! 🦞