当前位置: 首页 > news >正文

esp32课设记录(五)整个项目开源github

我把该项目开源到了github:https://github.com/whyovo/ESP32_course_project

以下是readme文档:

ESP32 课设

项目概述

这是一个基于ESP32的课设,实现了多种功能模式的集成,包括信息显示、图片展示、MQTT通信、摩尔斯电码处理以及MPU6050姿态传感。该项目作为电子系统设计课程的实践项目,展示了ESP32在物联网应用中的多种功能实现。

课程设计要求

必做功能(满分80分)

  • ✅ 1个按键输入(GPIO9)
  • ✅ 1个LED输出(GPIO8)
  • ✅ 液晶屏显示自己的照片(预存在开发板)
  • ✅ WLAN连接到MQTT服务器,注册账户并可以收发消息
  • ✅ 液晶屏显示英文字符串(由MQTT服务器下发)
  • ✅ 单一程序运行时具备上述功能,不需要切换程序

选做功能(20分)

  • ✅ 3个人一组,可以通过MQTT互相收发消息(使用统一主题,可通过消息前缀识别发送者)
  • ✅ 支持更多传感器输入和数据上传(集成MPU6050加速度计与陀螺仪)
  • ✅ 按键输入支持摩尔斯电码(短按输入"点",长按输入"划")

硬件要求

  • ESP32开发板
  • ST7789/ST7735 LCD显示屏 (128x160分辨率)
  • MPU6050传感器 (加速度计和陀螺仪)

硬件连接

LCD屏幕连接

  • SCL: GPIO5
  • SDA: GPIO4
  • RES: GPIO0
  • DC: GPIO3
  • CS: GPIO1
  • BL: GPIO2

MPU6050连接

  • SCL: GPIO8
  • SDA: GPIO10

软件要求

  • ESP-IDF v5.x 或更高版本
  • 下列必要的ESP-IDF组件:
    • WiFi
    • MQTT
    • I2C
    • SPI
    • LCD
    • FreeRTOS

功能模式

该项目包含以下功能模式,可通过双击按钮切换:

  1. 欢迎界面模式:显示个人和课程信息
  2. 照片模式:显示预加载的图片,可通过短按控制LED开关
  3. MQTT模式:连接MQTT服务器,发送和接收消息
  4. 摩尔斯电码模式:通过按钮输入摩尔斯电码,实时解码并显示
  5. MPU6050模式:显示并发送加速度计和陀螺仪数据到MQTT服务器

操作指南

基本操作

  • 短按按钮:根据当前模式执行不同操作
  • 长按按钮:根据当前模式执行辅助操作
  • 双击按钮:切换到下一个功能模式

各模式操作详情

欢迎界面模式
  • 短按:刷新个人信息
  • 长按:显示设备详情
照片模式
  • 短按:切换LED状态
  • 长按:显示LED状态信息
MQTT模式
  • 短按:发送预设消息
  • 长按:显示MQTT连接详情
摩尔斯电码模式
  • 短按:输入"点"(.)
  • 长按:输入"划"(-)
  • 系统会自动解码输入的摩尔斯电码
  • 输入6个连续点(…) 将通过MQTT发送当前解码结果
MPU6050模式
  • 短按:刷新传感器数据
  • 长按:通过MQTT发送传感器数据
  • 自动每0.5秒发送一次数据到MQTT服务器

详细配置指南

WiFi和MQTT配置

mqtt.h文件中需要配置以下参数:

// WiFi配置
#define WIFI_SSID "您的WiFi名称"
#define WIFI_PASSWORD "您的WiFi密码"// MQTT配置
#define MQTT_BROKER_URL "mqtt://您的MQTT服务器地址:端口"
#define MQTT_USERNAME "您的用户名"
#define MQTT_PASSWORD "您的密码"
#define MQTT_CLIENT_ID "ESP32_客户端ID"
#define MQTT_TOPIC "您的订阅主题"
#define MQTT_PUBLISH_TOPIC "您的发布主题"

屏幕显示修改

修改欢迎界面和个人信息

main.c文件中可以修改欢迎界面显示的个人信息。找到以下代码段并修改为您的信息:

// 显示初始欢迎界面
clear_text_area(lcd_buffer, LCD_H_RES, LCD_V_RES);
draw_string(lcd_buffer, 0, 0, "姓名", 0xFFFF, LCD_H_RES);  // 修改为您的姓名
draw_string(lcd_buffer, 0, CHINESE_FONT_HEIGHT + 2, "班级", 0xFFFF, LCD_H_RES);  // 修改为您的班级
draw_string(lcd_buffer, 0, CHINESE_FONT_HEIGHT * 2 + 4, "学号", 0xFFFF, LCD_H_RES);  // 修改为您的学号
draw_string(lcd_buffer, 0, CHINESE_FONT_HEIGHT * 3 + 6, "电子系统设计2", 0xFFFF, LCD_H_RES);
esp_lcd_panel_draw_bitmap(panel_handle, 0, 0, LCD_H_RES, LCD_V_RES, lcd_buffer);
修改MQTT发送的消息内容

在MQTT模式下默认发送的消息可在以下位置修改:

// MQTT模式下短按发送消息
char message[50];
strcpy(message, "wyh_esp32");  // 修改为您的标识信息

添加汉字库

汉字库在font_chinese.hfont_chinese.c文件中定义。要添加新的汉字,请按照以下步骤操作:

  1. font_chinese.h文件中添加新汉字的点阵数据:
static const uint8_t char_新汉字名[] = {// 这里是16x16点阵数据,每行2个字节,共16行(总共32字节)0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
  1. chinese_chars数组中添加新汉字的Unicode编码和点阵数据映射:
static const chinese_char_t chinese_chars[] = {// ...现有汉字定义...{0x新汉字Unicode, char_新汉字名},  // 新汉字的Unicode和数据
};

替换图片

要替换显示的照片,需要修改wyh_pic.c文件中的图片数据:

  1. 准备一张适合LCD分辨率的图片
  2. 使用图片转换工具(如LCD Image Converter)将图片转换为适合的RGB565格式
  3. 将生成的数据替换到wyh_pic.c文件中的gImage_wyh_pic数组
  4. 修改分辨率的宏定义,现在是128x128
// 图片数据示例格式
const unsigned char gImage_wyh_pic[32768] = {0xFF, 0xFF, 0xFF, 0xFF, ...  // 这里是图片的16位RGB565格式数据
};

MPU6050传感器配置

如果需要修改MPU6050的连接引脚,可在mpu6050.c文件中修改以下定义:

#define I2C_MASTER_SCL_IO 8        // SCL引脚,默认GPIO8
#define I2C_MASTER_SDA_IO 10       // SDA引脚,默认GPIO10

摩尔斯电码配置

摩尔斯电码模块的超时时间和缓冲区大小可在morse.c文件中调整:

#define MORSE_CHAR_TIMEOUT 2000 // 字符超时时间(毫秒)
#define MORSE_MAX_BUFFER 32     // 最大缓冲区大小

按钮配置

如需调整按钮的长按时间、双击检测时间等参数,可在button.c文件中修改:

#define BUTTON_LONG_PRESS_TIME 750   // 长按阈值(毫秒)
#define BUTTON_DOUBLE_CLICK_TIME 300 // 双击的有效时间窗口(毫秒)
#define BUTTON_DEBOUNCE_TIME 20      // 消抖时间(毫秒)

添加支持的传感器

如需添加新的传感器支持,建议参考MPU6050的实现方式,主要步骤:

  1. 创建传感器相关的.h.c文件
  2. general.h中包含新传感器的头文件
  3. main.c中添加传感器初始化与数据读取代码
  4. 添加新的显示模式用于展示传感器数据

注意:添加新模式需要修改app_mode_t枚举类型并增加相应的处理逻辑。

项目结构

ESP32_course_project/
├── main/
│   ├── main.c               # 主程序入口
│   ├── general.h            # 通用头文件
│   ├── button.c/h           # 按钮处理
│   ├── led.c/h              # LED控制
│   ├── lcd.c/h              # LCD显示屏控制
│   ├── mqtt.c/h             # MQTT通信
│   ├── morse.c/h            # 摩尔斯电码处理
│   ├── mpu6050.c/h          # MPU6050传感器控制
│   ├── font_chinese.c/h     # 中文字体支持
│   └── wyh_pic.c/h          # 图片数据
├── CMakeLists.txt           # CMake构建配置
└── README.md                # 项目说明文档

编译与烧录

  1. 安装ESP-IDF环境
  2. 配置项目:idf.py menuconfig
  3. 编译项目:idf.py build
  4. 连接ESP32,并烧录:idf.py -p [端口] flash
  5. 监视输出:idf.py -p [端口] monitor

故障排除

  • 屏幕无显示:检查LCD连接,特别是SPI引脚连接
  • WiFi无法连接:确认WiFi凭据正确,ESP32在WiFi覆盖范围内
  • MQTT连接失败:检查MQTT配置和服务器状态
  • MPU6050没有数据:检查I2C连接,确认地址设置正确

注意事项

  • 首次使用前,请确保正确配置WiFi和MQTT参数
  • 确保MPU6050连接正确,否则可能导致I2C通信错误
  • 修改图片数据需要重新编译整个项目

相关文章:

  • CI/CD 深度实践:灰度发布、监控体系与回滚机制详解
  • 每日Prompt:自拍生成摇头娃娃
  • 【General Agent Benchmark】论文分享No.12:LLF-Bench
  • Java大师成长计划之第27天:RESTful API设计与实现
  • 解锁MySQL性能调优:高级SQL技巧实战指南
  • 5.19打卡
  • SID 2025上的天马,用“好屏”技术重构产业叙事
  • 探索C++面向对象:从抽象到实体的元规则(上篇)
  • 【MySQL基础】MySQL基础:MySQL基本操作与架构
  • PyTorch图像建模(图像识别、分割和分类案例)
  • 黑马程序员C++2024新版笔记 第三章 数组
  • 没有 Mac,我如何用 Appuploader 完成 iOS App 上架
  • C++(25): 标准库 <deque>
  • 打卡day30
  • 二:操作系统之进程通信(IPC)
  • 大语言模型训练数据格式:Alpaca 和 ShareGPT
  • 显示器无法接受键盘/鼠标问题解决
  • C++面试2——C与C++的关系
  • 2021ICPC四川省赛个人补题ABDHKLM
  • day 29
  • 欧洲观察室|欧盟对华战略或在中欧建交50年时“低开高走”
  • 鸿蒙电脑正式发布,国产操作系统在个人电脑领域实现重要突破
  • 河南发布高温橙警:郑州、洛阳等地最高气温将达40℃以上
  • 孟夏韵评《无序的学科》丨误读与重构的文化漂流
  • 俄媒:俄乌代表团抵达谈判会场
  • 上海市税务局:收到对刘某某存在涉税问题的举报,正依法依规办理