🌱 灌溉控制器·日志实战
📚
30 章
完整目录
💧 数据存储
🛠️ SD卡 · RTC
01
课程导论
硬件准备
灌溉控制器项目概述 · 数据存储与日志重要性 · ESP32/SD卡/RTC/传感器 · 搭建Arduino IDE环境
02
SD卡基础
SPI协议
SD卡与SPI通信 · 模块接线(CS/SCK/MOSI/MISO) · 初始化与卡类型检测 · 电压/格式化排查
03
FatFS文件系统
API详解
FatFS简介 · 文件/目录概念 · f_open/f_close/f_read/f_write · 长文件名支持配置
04
创建日志文件
写入验证
编写代码创建日志文件 · 写入固定字符串 · 关闭文件 · 验证创建 · 打开失败错误处理
05
格式化日志输出
时间戳/级别
RTC时间戳格式化 · INFO/WARN/ERROR · CSV与JSON对比 · 构建标准日志行
06
追加写入
文件大小管理
FA_OPEN_APPEND模式 · f_size检查 · 日志轮转(按大小/日期) · 删除旧日志
07
RTC时钟模块
DS3231/DS1307
DS3231与DS1307对比 · I2C协议 · RTC初始化与时间设置 · 读取时间 · NTP/手动校准
08
传感器采集
土壤/温湿度
土壤湿度读取 · DHT22温湿度 · 格式化日志行 · 批量写入与缓存策略
09
数据存储结构
struct/CRC
定义C结构体 · 内存对齐与__packed__ · 与JSON/CSV互转 · CRC校验
10
配置文件管理
JSON/cJSON
JSON存储WiFi/阈值/校准参数 · cJSON库 · SD卡解析配置 · 修改与保存
11
多任务日志
FreeRTOS
创建日志/传感器任务 · 互斥锁保护SD卡 · 队列传递日志数据
12
日志缓冲区
环形缓冲
环形缓冲区原理 · 实现日志缓冲 · 满时策略(丢弃/阻塞) · 与SD卡写入协同
13
错误处理
异常日志
常见错误类型 · 错误码定义 · 异常日志(堆栈/寄存器) · 系统恢复策略
14
数据导出
可视化
导出SD卡日志到PC · Python解析CSV/JSON · Matplotlib曲线 · HTML报告
15
远程日志
MQTT/云
ESP32连接WiFi · MQTT发布日志 · Node-RED接收 · 阿里云IoT对接
16
低功耗日志
深度睡眠
ESP32深度睡眠 · RTC唤醒定时器 · 睡眠前刷新缓冲 · 唤醒恢复 · 功耗测量
17
文件系统可靠性
断电保护
意外断电保护 · Journaling概念 · f_sync · 双备份文件 · 检查与修复
18
日志安全
AES加密
AES-128加密 · mbedTLS集成 · 加密写入/解密读取 · 密钥管理(eFuse/安全芯片)
19
单元测试
Unity模拟
Unity/Ceedling测试 · 模拟SD卡(内存模拟) · 测试日志写入读取 · 覆盖率分析
20
性能优化
写入加速
SD卡写入速度测试 · SPI时钟调整 · DMA传输 · 批量写入 · 碎片整理
21
实战一
基础灌溉记录器
需求分析 · 架构设计 · 传感器+SD卡+时间戳 · 功能测试与调试
22
实战二
智能配置灌溉
JSON配置文件 · WiFi远程控制 · 日志上传MQTT服务器
23
实战三
低功耗监测站
低功耗传感器选型 · 深度睡眠定时唤醒 · 数据压缩批量上传
24
实战四
多节点LoRa采集
LoRa通信简介 · 网关节点设计 · 数据汇聚与云端存储
25
日志分析工具
Python
Python分析工具 · argparse参数 · 过滤搜索 · 统计报表(灌溉次数/用水量)
26
Web仪表盘
Chart.js
ESP32 Web服务器 · Chart.js实时图表 · RESTful API · 前后端交互
27
固件升级
OTA兼容
OTA升级原理 · 日志格式版本控制 · 旧日志兼容 · 升级迁移策略
28
生产部署
监控告警
批量烧录配置 · 日志监控告警(阈值) · 远程诊断 · 设备管理平台集成
29
常见问题
故障排除
SD卡初始化失败 · 时间戳错误 · 日志文件损坏 · 写入慢 · 内存不足
30
课程总结
未来展望
项目回顾 · 技术栈总结 · 扩展方向(边缘计算/AI预测) · 学习资源推荐