毕业设计 ESP32在线墨水屏桌面摆件 -物联网 单片机 嵌入式

news/2024/11/15 0:51:13/

0 前言

🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

🚩 基于ESP32的在线墨水屏桌面摆件

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:4分
  • 创新点:4分

1 简介

使用了合宙的ESP32C3开发板,设计了一款可拆卸的桌面模式屏摆件,通过wifi联网,可实现时间、天气、古诗、图片四种模式的显示。通过按键实现不同模式间的切换和更新。

2 主要器件

  • ESP32C3开发板
  • 墨水屏模块
  • MOSFET-N+AO3400A
  • 按键微动开关 664.3
  • PCB插座_2.54_2x8/16P 立式

3 实现效果

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4 实现原理

4.1 硬件部分

墨水屏模块
在这里插入图片描述
使用2.9寸墨水屏,单片价格在15左右

项目在软件方面驱动墨水屏使用的是GxEPD2库,在GxEPD2库中选择适当的对于型号即可。如下所示:
GxEPD2_BW<GxEPD2_290, GxEPD2_290::HEIGHT> display(GxEPD2_290(/CS=5/ 7, /DC=/ 4, /RST=/ 5, /BUSY=/ 6)); // 屏幕型号1
GxEPD2_BW<GxEPD2_290_T5, GxEPD2_290_T5::HEIGHT> display(GxEPD2_290_T5(/CS=5/ 7, /DC=/4, /RST=/5, /BUSY=/6)); //屏幕型号2

底座模块
在这里插入图片描述
底座模块主要是起一个连接开发板和墨水屏模块的作用。

焊接PCB插座来实现墨水屏模块的拔插,焊接排母来实现与ESP32C3开发板的连接,焊接按钮来进行显示控制。

ESP32C3开发板
在这里插入图片描述
使用合宙的ESP32C3开发板,开发板买经典款或者简约款都可以。

经典款比较方便,因为使用简约款注意的技术细节会比较多,容易遇到坑。

排针朝上焊接就行,因为排针排母连接,这个项目用完拔下来做其他项目也很方便。

4.2 软件部分

编程软件Arduino

编程软件用的Arduino,环境配置参照网上资料。

开发板添加
在这里插入图片描述
使用到的库
在这里插入图片描述
本项目使用的库有:

  • ArduinoJson库: 解析Json数据,项目里的天气、古诗、名言等信息都是通过一些API获得,保存在返回的json数据中。
  • GxEPD2库:驱动墨水屏
  • Timezone库:通过NTP获取时钟需要用到
  • U8g2库:图像显示库

库的话可以在项目->加载库->管理库 中搜索下载。

5 部分核心固件代码

在这里插入图片描述

// wifi连接UDP设置参数
WiFiUDP Udp;time_t getNtpTime() //通过NTP获取时间
{IPAddress ntpServerIP; // NTP server's ip addresswhile (Udp.parsePacket() > 0); // discard any previously received packets// Serial.println("Transmit NTP Request");//  get a random server from the poolWiFi.hostByName(ntpServerName, ntpServerIP);sendNTPpacket(ntpServerIP);uint32_t beginWait = millis();while (millis() - beginWait < 1500){int size = Udp.parsePacket();if (size >= NTP_PACKET_SIZE){Serial.println("Receive NTP Response");Udp.read(packetBuffer, NTP_PACKET_SIZE); // read packet into the bufferunsigned long secsSince1900;// convert four bytes starting at location 40 to a long integersecsSince1900 = (unsigned long)packetBuffer[40] << 24;secsSince1900 |= (unsigned long)packetBuffer[41] << 16;secsSince1900 |= (unsigned long)packetBuffer[42] << 8;secsSince1900 |= (unsigned long)packetBuffer[43];return secsSince1900 - 2208988800UL + timeZone * SECS_PER_HOUR;}}Serial.println("No NTP Response :-(");return 0; // 无法获取时间时返回0
}// 向NTP服务器发送请求
void sendNTPpacket(IPAddress &address)
{// set all bytes in the buffer to 0memset(packetBuffer, 0, NTP_PACKET_SIZE);// Initialize values needed to form NTP request// (see URL above for details on the packets)packetBuffer[0] = 0b11100011; // LI, Version, ModepacketBuffer[1] = 0;          // Stratum, or type of clockpacketBuffer[2] = 6;          // Polling IntervalpacketBuffer[3] = 0xEC;       // Peer Clock Precision// 8 bytes of zero for Root Delay & Root DispersionpacketBuffer[12] = 49;packetBuffer[13] = 0x4E;packetBuffer[14] = 49;packetBuffer[15] = 52;// all NTP fields have been given values, now// you can send a packet requesting a timestamp:Udp.beginPacket(address, 123); // NTP requests are to port 123Udp.write(packetBuffer, NTP_PACKET_SIZE);Udp.endPacket();
}void initNTP()
{// Login suceeded so set UDP local portUdp.begin(LOCALPORT);// Set the time provider to NTPsetSyncProvider(getNtpTime); //同步时间
}

6 最后


http://www.ppmy.cn/news/4540.html

相关文章

【Linux权限】文件权限值,权限掩码,粘滞位,普通用户添加信任名单

目录 1.权限分为2种用户&#xff1a;超级用户&#xff0c;普通用户 2.文件类型和访问权限 ​3.权限掩码&#xff08;八进制&#xff09; 4.sudo短暂提升权限 5.粘滞位 1.权限分为2种用户&#xff1a;超级用户&#xff0c;普通用户 超级用户&#xff08;通常为root&#x…

大数据MapReduce学习案例:TopN

文章目录一&#xff0c;案例分析&#xff08;一&#xff09;TopN分析法介绍&#xff08;二&#xff09;案例需求二&#xff0c;案例实施&#xff08;一&#xff09;准备数据文件&#xff08;1&#xff09;启动hadoop服务&#xff08;2&#xff09;在虚拟机上创建文本文件&#…

基于Java毕业设计心灵治愈服务平台源码+系统+mysql+lw文档+部署软件

基于Java毕业设计心灵治愈服务平台源码系统mysqllw文档部署软件 基于Java毕业设计心灵治愈服务平台源码系统mysqllw文档部署软件本源码技术栈&#xff1a; 项目架构&#xff1a;B/S架构 开发语言&#xff1a;Java语言 开发软件&#xff1a;idea eclipse 前端技术&#xff1…

PySpark--spark local 的环境部署

Spark环境搭建-Local 环境搭建 基本原理 本质&#xff1a;启动一个JVM Process进程(一个进程里面有多个线程)&#xff0c;执行任务Task Local模式可以限制模拟Spark集群环境的线程数量, 即Local[N] 或 Local[*]其中N代表可以使用N个线程&#xff0c;每个线程拥有一个cpu core。…

LeetCode 297. 二叉树的序列化与反序列化

今天早上睡起来刷了这么一道题&#xff0c;二叉树的序列化和反序列化 大概意思就是给你一个二叉树&#xff0c;把他转成一个字符串&#xff0c;中间的自定义规则由你定&#xff0c;再根据这个字符串去还原这个二叉树&#xff0c;这道题的话思路不难&#xff0c;写起来有的细节…

[C++]类和对象【中】

&#x1f941;作者&#xff1a; 华丞臧 &#x1f4d5;​​​​专栏&#xff1a;【C】 各位读者老爷如果觉得博主写的不错&#xff0c;请诸位多多支持(点赞收藏关注)。如果有错误的地方&#xff0c;欢迎在评论区指出。 推荐一款刷题网站 &#x1f449;LeetCode 文章目录类的六个…

D.类的继承与派生

D.类的继承与派生 Time Limit: 1000 MSMemory Limit: 32768 KTotal Submit: 26 (17 users)Total Accepted: 17 (17 users)Special Judge: NoDescription某工厂需要打造某种球形零件&#xff0c;在尝试的过程中使用了不同的金属&#xff0c;要求根据产品的尺寸信息和所用金属的密…

【多目标优化求解】基于matlab粘菌算法MOSMA求解多目标优化问题【含Matlab源码 2279期】

⛄一、获取代码方式 获取代码方式1: 完整代码已上传我的资源:【多目标优化求解】基于matlab粘菌算法MOSMA求解多目标优化问题【含Matlab源码 2279期】 点击上面蓝色字体,直接付费下载,即可。 获取代码方式2: 付费专栏优化求解(Matlab) 备注: 点击上面蓝色字体付费专…