合宙ESP32C3+合宙1.8TFT屏幕点亮并获取温湿度和时间信息
本帖最后由 SmallLion_114 于 2022-7-8 12:23 编辑机械专业小白自学, 部分代码应用社区大佬 topdog AND 相关教程
1.硬件
温湿度传感器DHT11;
Wifi模块合宙ESP32C3;
屏幕合宙1.8寸TFT排针已焊接屏(ST7735);
使用Blinker在线显示温湿度数据,并显示历史曲线
TFT屏幕引脚摸索半天:'(:'(
TFT屏幕的引脚定义如下:
#define TFT_CS 10
#define TFT_RST 8
#define TFT_DC 9
#define TFT_BACKLIGHT11 //ESP32C3的GPIO11(VDD_SPI)默认功能是给flash供电
#define TFT_MOSI 7
#define TFT_SCLK 13
全部代码如下:
/*温湿度检测并上传Blinker,通过SNTP访问中国教育网公共NTP网络时间同步服务器获取实时时间信息,
* 通过1.8寸显示屏展示获取的温湿度信息和时间信息,
*/
#define BLINKER_WIFI
#include <Blinker.h>
#include "DHT.h";
#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
#include <SPI.h>
//通过SNTP获取时间
#include "time.h"
#include "sntp.h"
char auth[] = "秘钥";
char ssid[] = "wifi名";
char pswd[] = "WiFi密码";
BlinkerNumber HUMI("humi");
BlinkerNumber TEMP("temp");
BlinkerButton Button1("btn-abc");
//温湿度传感器引脚定义
#define DHT11PIN 6
#define DHTTYPE DHT11
//TFT屏幕引脚定义
#define TFT_CS 10
#define TFT_RST 8
#define TFT_DC 9
#define TFT_BACKLIGHT11 /*ESP32C3的GPIO11(VDD_SPI)默认功能是给flash供电,
我们完全可以使用外部3.3v给flash供电,将此IO用作通用io,以下是
操作流程,注意以下的操作只能执行一次,更改后不能复原。
*/
#define TFT_MOSI 7
#define TFT_SCLK 13
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
DHT dht(DHT11PIN,DHTTYPE);
float humi_read=0,temp_read=0;
int ledpin=1;
const char* ntpServer1 = "cn.ntp.org.cn"; //中国
const char* ntpServer2 = "edu.ntp.org.cn"; //中国教育网
const longgmtOffset_sec = 8 * 3600; //参数就是用来修正时区的,比如对于我们东八区(UTC/GMT+08:00)来说该参数就需要填写 8 * 3600
const int daylightOffset_sec = 0; //使用夏令时 daylightOffset_sec 就填写3600,否则就填写0;
const char* time_zone = "CST-8";// 亚洲/上海时区规则,包括日光调整规则(可选)
void setup(void) {
tft.initR(INITR_BLACKTAB);
Serial.begin(115200);
tft.setRotation(1); //可以用来设置横屏显示
tft.fillScreen(ST77XX_BLACK);
delay(100);
pinMode(ledpin,OUTPUT);
BLINKER_DEBUG.stream(Serial);
BLINKER_DEBUG.debugAll();
Blinker.begin(auth,ssid,pswd);
Blinker.attachHeartbeat(heartbeat);
Blinker.attachDataStorage(dataStorage);
dht.begin();
sntp_set_time_sync_notification_cb( timeavailable );
sntp_servermode_dhcp(1); // (optional)
configTzTime(time_zone, ntpServer1, ntpServer2);
}
//时间输出
/*void printLocalTime()
{
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
Serial.println("No time available (yet)");
return;
}
tft.fillScreen(ST77XX_BLACK);
tft.setTextSize(2);
tft.setCursor(0, 30);
tft.setTextColor(ST77XX_WHITE, ST77XX_BLACK);
tft.print("Time:");
tft.print(&timeinfo,"%H");
tft.print(":");
tft.print(&timeinfo, "%M");
//tft.print(":");
//tft.print(&timeinfo, "%S");
tft.println();
//tft.setTextColor(ST77XX_WHITE, ST77XX_BLACK);
tft.print(&timeinfo, "%F");
delay(2000);
}
*/
// 回调函数(通过NTP调整时间时调用get)
void timeavailable(struct timeval *t)
{
tft.println("Got time adjustment from NTP!");
//printLocalTime();
}
/*void setup() {
// put your setup code here, to run once:
}*/
//温湿度输出
void loop() {
// put your main code here, to run repeatedly:
Blinker.run();
Button1.attach(button1_callback);
float h=dht.readHumidity();
float t=dht.readTemperature();
if(isnan(h)||isnan(t))
{
BLINKER_LOG("Fail to read");
}else
{
BLINKER_LOG("Humidity:",h,"%");
BLINKER_LOG("Temperature:",t,"℃");
//printLocalTime();
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0,10);
tft.setTextColor(ST77XX_YELLOW, ST77XX_BLACK);
tft.setTextSize(2);
tft.print("Humi:");
tft.print(h);
tft.print(" %");
tft.println();
tft.println();
tft.setTextSize(2);
tft.setTextColor(ST77XX_RED, ST77XX_BLACK);
tft.print("Temp:");
tft.print(t);
tft.print(" C");
tft.println();
tft.println();
humi_read=h;
temp_read=t;
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
Serial.println("No time available (yet)");
return;
}
//tft.fillScreen(ST77XX_BLACK);
tft.setTextSize(2);
//tft.setCursor(0, 30);
tft.setTextColor(ST77XX_WHITE, ST77XX_BLACK);
tft.print("Time:");
tft.print(&timeinfo,"%H");
tft.print(":");
tft.print(&timeinfo, "%M");
//tft.print(":");
//tft.print(&timeinfo, "%S");
tft.println();
tft.println();
//tft.setTextColor(ST77XX_WHITE, ST77XX_BLACK);
tft.print(&timeinfo, "%F");
}
Blinker.delay(2000);
}
void heartbeat()
{
HUMI.print(humi_read);
TEMP.print(temp_read);
}
//通过对相关相关程序的修改,可以实现控制LED灯的开关
void button1_callback(const String & state)
{
BLINKER_LOG("get button state: ",state);
if(state=="on")
{
digitalWrite(ledpin,HIGH);
Button1.print("on");
}else if(state=="off")
{
digitalWrite(ledpin,LOW);
Button1.print("off");
}
}
void dataStorage()
{
Blinker.dataStorage("temp", temp_read);
Blinker.dataStorage("humi", humi_read);
}
Earduino 发表于 2022-8-26 10:20
就你上边这个app吧。应该是app吧
这个APP是Blinker,Arduino社区里有相关教程 屏的购买链接能丢一个吗 Earduino 发表于 2022-7-11 13:16
屏的购买链接能丢一个吗
https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-24154658004.2.42bf597dpuYr3t&id=560176729178 问一下合宙的EINK-1.54它的主控是什么型号?没找到资料 这个上位机是怎么做的 Earduino 发表于 2022-8-26 08:30
问一下合宙的EINK-1.54它的主控是什么型号?没找到资料
显示屏背板上应该有型号吧,你说的这个我也没用过。 Earduino 发表于 2022-8-26 08:31
这个上位机是怎么做的
什么是上位机?
SmallLion_114 发表于 2022-8-26 09:03
什么是上位机?
就你上边这个app吧。应该是app吧 ESP32集合了气体传感器+蜂鸣器+温湿度传感器(最新版)
页:
[1]
2