
专业版
#第九届立创电赛#桌面温湿度检测仪
172
0
0
0
简介
基于上次示波器现成的tft屏幕做的,也顺便尝试学习ESP32。硬件上设计了SHT40、JW01、蜂鸣器的接口,但软件目前只写了时间和温湿度显示,剩下的以后慢慢加吧~
简介:基于上次示波器现成的tft屏幕做的,也顺便尝试学习ESP32。硬件上设计了SHT40、JW01、蜂鸣器的接口,但软件目前只写了时间和温湿度显示,剩下的以后慢慢加吧~开源协议
:GPL 3.0
创建时间:2024-07-05 20:46:57更新时间:2024-08-02 14:02:03
描述
* 1、项目功能介绍
本项目基于ESP-WROOM-32作为主控芯片,采用1.8寸TFT屏幕显示。PCB尺寸80mm*50mm。电源采用SY8088,是一个 DC/DC 稳压器,能够提供高达 1A 的输出电流。电源充放电管理采用TP4057。预留JW01气体检测模块接口用于后续升级。
注:原理图和PCB有两份,分别是STM32f103c8t6主控版、ESP-WROOM-32主控版,这里介绍的是ESP32版即Board2
* 2、开源协议
GPL 3.0
*3、硬件部分
硬件部分:MCU主控、温湿度传感器、DCDC降压、充放电管理以及1.8寸TFT显示屏部分
*5、软件部分
项目使用VS code +PlatformIO基于arduino开发,使用TFT_eSPI库、Adafruit SHT4x Library、NTPClient实现相应功能,部分示例代码如下:
TFT屏幕
void showHanzi(int32_t x, int32_t y, const char c[3], uint32_t color) {
for (int k = 0; k < 21; k++)// 根据字库的字数调节循环的次数
if (hanzi[k].Index[0] == c[0] && hanzi[k].Index[1] == c[1] && hanzi[k].Index[2] == c[2])
{ tft.drawBitmap(x, y, hanzi[k].hz_Id, hanzi[k].hz_width, 16, color);
}
}
/*整句汉字显示*/
void showHanziS(int32_t x, int32_t y, const char str[], uint32_t color) { //显示整句汉字,字库比较简单,上下、左右输出是在函数内实现
int x0 = x;
for (int i = 0; i < strlen(str); i += 3) {
showHanzi(x0, y, str+i, color);
x0 += 17;
}
}
/*文本显示函数*/
//参数:x y font s fg bg str
void showtext(int16_t x,int16_t y,uint8_t font,uint8_t s,uint16_t fg,uint16_t bg,const String str)
{
//设置文本显示坐标,和文本的字体,默认以左上角为参考点,
tft.setCursor(x, y, font);
// 设置文本颜色为白色,文本背景黑色
tft.setTextColor(fg,bg);
//设置文本大小,文本大小的范围是1-7的整数
tft.setTextSize(s);
// 设置显示的文字,注意这里有个换行符 \n 产生的效果
tft.println(str);
}
wifi及NTP
const char *ssid = "自己的wifi"; //wifi账号
const char *password = "自己的WiFi密码"; //wifi密码
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP,"cn.pool.ntp.org"); //NTP服务器地址
void get_wifi()
{
// 连接网络
WiFi.begin(ssid, password);
//等待wifi连接
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected"); //连接成功
Serial.print("IP address: "); //打印IP地址
Serial.println(WiFi.localIP());
}
timeClient.begin();
//设置偏移时间(以秒为单位)以调整时区,例如:
// GMT +1 = 3600
// GMT +8 = 28800
timeClient.setTimeOffset(28800);
SHT4x温湿度传感器
//SHT40温湿度传感器配置及初始化代码
#define SHT4X_SDA_PIN 21
#define SHT4X_SCL_PIN 22
Adafruit_SHT4x sht4 = Adafruit_SHT4x();
void SHT4x_Init() {
Wire.begin(SHT4X_SDA_PIN, SHT4X_SCL_PIN);
if (!sht4.begin()) {
Serial.println("Couldn't find SHT4x");//试初始化SHT4x传感器,如果失败则打印错误信息并进入无限循环
while (1) delay(1);
}
Serial.println("Found SHT4x sensor");
Serial.print("Serial number 0x");
Serial.println(sht4.readSerial(), HEX);
sht4.setPrecision(SHT4X_HIGH_PRECISION);//设置传感器的精度
switch (sht4.getPrecision()) {
case SHT4X_HIGH_PRECISION:
Serial.println("High precision");
break;
case SHT4X_MED_PRECISION:
Serial.println("Med precision");
break;
case SHT4X_LOW_PRECISION:
Serial.println("Low precision");
break;
}
sht4.setHeater(SHT4X_NO_HEATER);//关闭传感器的加热器功能。
switch (sht4.getHeater()) {
case SHT4X_NO_HEATER:
Serial.println("No heater");
break;
case SHT4X_HIGH_HEATER_1S:
Serial.println("High heat for 1 second");
break;
case SHT4X_HIGH_HEATER_100MS:
Serial.println("High heat for 0.1 second");
break;
case SHT4X_MED_HEATER_1S:
Serial.println("Medium heat for 1 second");
break;
case SHT4X_MED_HEATER_100MS:
Serial.println("Medium heat for 0.1 second");
break;
case SHT4X_LOW_HEATER_1S:
Serial.println("Low heat for 1 second");
break;
case SHT4X_LOW_HEATER_100MS:
Serial.println("Low heat for 0.1 second");
break;
}
}
*6、大赛LOGO验证
* 8、演示您的项目并录制成视频上传
视频要求:请横屏拍摄,分辨率不低于1280×720,格式Mp4/Mov,单个视频大小限100M内;
视频标题:立创电赛:{项目名称}-{视频模块名称};如立创电赛:《自动驾驶》-团队介绍。
设计图

BOM


添加到专辑
0
0
分享
侵权投诉
评论