合宙ESP32C3+合宙1.8TFT屏幕点亮并获取温湿度和时间信息-Arduino中文社区 - Powered by Discuz! Archiver

SmallLion_114 发表于 2022-7-8 11:21

合宙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);
}


SmallLion_114 发表于 2022-8-26 10:24

Earduino 发表于 2022-8-26 10:20
就你上边这个app吧。应该是app吧

这个APP是Blinker,Arduino社区里有相关教程

Earduino 发表于 2022-7-11 13:16

屏的购买链接能丢一个吗

SmallLion_114 发表于 2022-7-11 14:24

Earduino 发表于 2022-7-11 13:16
屏的购买链接能丢一个吗

https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-24154658004.2.42bf597dpuYr3t&id=560176729178

Earduino 发表于 2022-8-26 08:30

问一下合宙的EINK-1.54它的主控是什么型号?没找到资料

Earduino 发表于 2022-8-26 08:31

这个上位机是怎么做的

SmallLion_114 发表于 2022-8-26 09:03

Earduino 发表于 2022-8-26 08:30
问一下合宙的EINK-1.54它的主控是什么型号?没找到资料

显示屏背板上应该有型号吧,你说的这个我也没用过。

SmallLion_114 发表于 2022-8-26 09:03

Earduino 发表于 2022-8-26 08:31
这个上位机是怎么做的

什么是上位机?

Earduino 发表于 2022-8-26 10:20

SmallLion_114 发表于 2022-8-26 09:03
什么是上位机?

就你上边这个app吧。应该是app吧

SmallLion_114 发表于 2022-8-26 10:32

ESP32集合了气体传感器+蜂鸣器+温湿度传感器(最新版)
页: [1] 2
查看完整版本: 合宙ESP32C3+合宙1.8TFT屏幕点亮并获取温湿度和时间信息