这是一个基于ESP32的课设,实现了多种功能模式的集成,包括信息显示、图片展示、MQTT通信、摩尔斯电码处理以及MPU6050姿态传感。该项目作为电子系统设计课程的实践项目,展示了ESP32在物联网应用中的多种功能实现。
该项目包含以下功能模式,可通过双击按钮切换:
在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模式下短按发送消息
char message[50];
strcpy(message, "wyh_esp32"); // 修改为您的标识信息
汉字库在font_chinese.h
和font_chinese.c
文件中定义。要添加新的汉字,请按照以下步骤操作:
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
};
chinese_chars
数组中添加新汉字的Unicode编码和点阵数据映射:static const chinese_char_t chinese_chars[] = {
// ...现有汉字定义...
{0x新汉字Unicode, char_新汉字名}, // 新汉字的Unicode和数据
};
要替换显示的照片,需要修改wyh_pic.c
文件中的图片数据:
wyh_pic.c
文件中的gImage_wyh_pic
数组// 图片数据示例格式
const unsigned char gImage_wyh_pic[32768] = {
0xFF, 0xFF, 0xFF, 0xFF, ... // 这里是图片的16位RGB565格式数据
};
如果需要修改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的实现方式,主要步骤:
.h
和.c
文件general.h
中包含新传感器的头文件main.c
中添加传感器初始化与数据读取代码注意:添加新模式需要修改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 # 项目说明文档
idf.py menuconfig
idf.py build
idf.py -p [端口] flash
idf.py -p [端口] monitor