|
本帖最后由 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_BACKLIGHT 11 //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_BACKLIGHT 11 /*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 long gmtOffset_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);
- }
复制代码
Blinker
展示
|
|