毕业设计 ESP32在线墨水屏桌面摆件 -物联网 单片机 嵌入式
创始人
2024-04-25 22:10:56
0

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 display(GxEPD2_290(/CS=5/ 7, /DC=/ 4, /RST=/ 5, /BUSY=/ 6)); // 屏幕型号1
GxEPD2_BW 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 最后

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...