Skip to content

levi52/ESP32_UV_BOX

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ESP32 UV BOX

ESP32 UV BOX 基于ESP-WROOM-32D-N8的简易紫外线等级检测盒

板载S12SD紫外线传感器,AHT20温湿度传感器,BMP280气压传感器,WS2812灯珠,1.8寸TFT

Contributors Forks Stargazers Issues MIT License


Logo

ESP32 UV BOX


探索文档 »

查看代码 · 报告Bug · 提出新特性

目录

目录
  1. 文件目录说明
  2. 开发工具
  3. 硬件
  4. 软件
  5. CONTACT
  6. LICENSE
  7. 鸣谢
  8. END

(⬆️TOP)

文件目录说明

ESP32_UV_BOX
│  Changelog.md        记录文档
│  clearBuildDir.bat   build文件删除
│  default_8MB.csv     存储分区
│  LICENSE             开源协议
│  platformio.ini      开发配置
│  README.md           说明文档
├─assets/              静态文件
├─include
│      README
├─lib                  外部库
│  │  README
│  └─ArduinoZlib 
├─src                  主要文件
│  │  button.cpp       按键控制
│  │  button.h
│  │  main.cpp         主程序
│  │  network.cpp      网络请求
│  │  network.h
│  │  sensor.cpp       传感器
│  │  sensor.h
│  │  ui.cpp           界面
│  │  ui.h
│  ├─font/             字体文件
│  └─img/              图片文件
└─test/                测试文件

(⬆️TOP)

开发工具

(⬆️TOP)

硬件

硬件设计见立创开源硬件平台

(⬆️TOP)

软件

使用到的库

(⬆️TOP)

程序简述

屏幕页面

屏幕尺寸为1.8寸,分辨率是128x160,屏幕驱动是ST7735,使用TFT_eSPI库驱动屏幕,所有界面使用TFT_eSPI绘制

使用TFT_eSPI需要修改配置文件User_Setup.h,根据屏幕类型和显示情况修改内容

#define ST7735_DRIVER // 屏幕驱动
#define TFT_RGB_ORDER TFT_RGB // 颜色顺序
#define TFT_WIDTH  128  // 屏幕宽度
#define TFT_HEIGHT 160  // 屏幕高度
#define ST7735_GREENTAB2  // 仅ST7735
// #define TFT_INVERSION_ON // 黑白反转
// #define TFT_INVERSION_OFF
#define TFT_BL   17 // 背光引脚
#define TFT_MOSI 23
#define TFT_SCLK 18
#define TFT_CS   5  // Chip select control pin
#define TFT_DC    2  // Data Command control pin
#define TFT_RST   4  // Reset pin (could connect to RST pin)
//#define TFT_RST  -1  // Set TFT_RST to -1 if display RESET is connected to ESP32 board RST

根据以下结构设计绘制界面: UI

页面结构设计参考:OSHWHub: 黑人黑科技的开源工程ESP32 万能遥控器

使用ledc控制引脚输出PWM调节屏幕背光亮度

(⬆️TOP)

UV

使用S12SD传感器来检测紫外线,然后经过放大,使用ADC采集电压,根据电压范围判断紫外线指数等级

程序中使用此函数获取紫外线指数

uint8_t sensor_uv_data(void)

(⬆️TOP)

AHT20

使用AHT20传感器来检测环境温度和湿度,使用IIC通信协议

程序中使用此函数来获取温湿度数据

AHT20Data sensor_aht20_data(void);

AHT20Data为定义的结构体数据

struct AHT20Data
{
    float temperature;
    float humidity;
};

(⬆️TOP)

BMP280

使用BMP280传感器来检测环境压强和温度,并能够计算得到海拔高度,使用IIC通信协议

程序中使用此函数来获取压强等数据

BMP280Data sensor_bmp280_data(void);

BMP280Data为定义的结构体数据

struct BMP280Data
{
    float temperature;
    float pressure;
    float altitude;
};

(⬆️TOP)

网络配置

初次使用时,会建立网络ESP_UV_BOX_WIFI

连接网络,浏览器打开网址192.168.1.1,会出现配网页面

页面代码参考: CSDN: 请收藏!分享一个ESP32/ESP8266高颜值WIFI配网页面代码-带下拉选择框和中英文版本。文末有arduino配网代码。

一共五个输入框,分别是WIFI SSID, WIFI PASSWORD, Private KEY, Location IDbilibili UID

网络配置相关函数如下

bool wifi_scan(void);
void wifi_connect(int timeOut_s);
void wifi_disconnect(void);
void ap_init(void);
void server_init(void);
void handleRoot(void);
void handleConfigWifi(void);
void handleNotFound(void);
void doClient(void);
void wifiConfigBySoftAP(void);

(⬆️TOP)

网络天气

天气等数据使用和风天气API,免费订阅每日有1000次请求

订阅规则

具体代码参考B站:大聪明的二手脑袋的视频Dudu天气时钟版本更新,全面对接和风天气,2.0版本继续开源

网络天气相关函数如下

void get_weather_now(void);
void get_weather_future(void);
void get_air(void);
void get_city_id(void);
String urlEncode(const String& text);

(⬆️TOP)

网络时间

时间数据使用NTPClient库获取网络时间

网络相关函数如下

void time_init(void);
void get_time(void);

(⬆️TOP)

哔哩哔哩

通过如下API接口获得JSON格式的数据,使用ArduinoJson库解析获得关注数和粉丝数

https://api.bilibili.com/x/relation/stat?vmid=用户UID

可以使用官网提供的工具生成解析代码

{
    "code": 0,
    "message": "0",
    "ttl": 1,
    "data": {
        "mid": 378576508,
        "following": 318,
        "whisper": 0,
        "black": 0,
        "follower": 56
    }
}

生成的解析代码如下

// String input;

JsonDocument doc;

DeserializationError error = deserializeJson(doc, input);

if (error) {
  Serial.print("deserializeJson() failed: ");
  Serial.println(error.c_str());
  return;
}

int code = doc["code"]; // 0
const char* message = doc["message"]; // "0"
int ttl = doc["ttl"]; // 1

JsonObject data = doc["data"];
long data_mid = data["mid"]; // 378576508
int data_following = data["following"]; // 318
int data_whisper = data["whisper"]; // 0
int data_black = data["black"]; // 0
int data_follower = data["follower"]; // 56

(⬆️TOP)

按键控制

使用拨轮开关作为控制输入,一共有三个按键,使用OneButton库,支持单击、双击、长按等操作。

(⬆️TOP)

实物

  • PCB

  • 页面

  • 紫外线检测

(⬆️TOP)

CONTACT

levi52 - @github

travi5 - @bilibili

(⬆️TOP)

LICENSE

该项目签署了MIT 授权许可,详情请参阅 LICENSE

(⬆️TOP)

鸣谢

(⬆️TOP)

END

Typing SVG

2024 levi5

(⬆️TOP)