
基于ESP-WROOM-32的多功能桌面时钟
简介
基于我自己上一个温湿度计工程的基础上进行部分升级优化
简介:基于我自己上一个温湿度计工程的基础上进行部分升级优化开源协议
:MIT License
描述
* 1、项目功能介绍
本项目基于ESP-WROOM-32作为主控芯片,采用1.8寸TFT屏幕显示。PCB尺寸80mm*50mm。电源采用SY8088,是一个 DC/DC 稳压器,能够提供高达 1A 的输出电流。电源充放电管理采用TP4057。预留JW01气体检测模块接口用于后续升级。
* 2、开源协议
MIT License
*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);
//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;
}
}
设计图

BOM


评论