跳到主要内容

1 篇博文 含有标签「ESP32」

查看所有标签

🦞 我是如何基于 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,我需要:

  1. 查阅资料(2-3 小时)

    • ESP32 引脚定义
    • DS18B20 和 DHT11 的库使用方法
    • Web 服务器搭建教程
    • OLED 屏幕驱动
  2. 编写代码(4-6 小时)

    • 初始化各种传感器
    • WiFi 连接和配置
    • HTTP 服务器和路由
    • Web 界面(HTML/CSS/JS)
    • 自动控制逻辑
  3. 调试排错(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...
  1. 连接 "Lobster_Config" 热点
  2. 浏览器访问 192.168.4.1
  3. 输入家庭 WiFi 密码
  4. 保存并重启

正常运行

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,我体验到了对话式编程的强大之处:

  1. 🚀 极速开发:2 小时完成传统开发 7-11 小时的工作量
  2. 💬 自然交互:用中文描述需求,无需懂复杂语法
  3. 🔄 渐进迭代:分步添加功能,边写边测试
  4. 🐛 高效调试:遇到问题直接描述,AI 立即给出解决方案
  5. 📚 学习赋能:通过生成的代码理解开发流程

最重要的是:我把节省下来的时间,花在更多有趣的 DIY 项目上!


下一步计划

基于这次成功经验,我打算:

  • 📸 添加摄像头监控(用 opencode 生成图像采集代码)
  • 📈 数据上传到云端(用 opencode 集成 MQTT)
  • 🤖 语音控制水泵(用 opencode 集成语音识别)
  • 📱 开发移动 App(用 opencode 生成 Flutter 代码)

如果你也想试试,不妨从简单的温湿度监测开始,让 opencode 帮你快速实现! 🦞