通过DHT11获取温湿度数据 通过udp通信上传到服务器端保存
还可以通过lcd现场查看温湿度数据
/*
tft_lcd接线
LCD 电源 3.3V
#define TFT_MISO 19 //未接线
#define TFT_MOSI 23 // SDA D23
#define TFT_SCLK 18 // SCL D18
#define TFT_CS 27 // CS D27
#define TFT_DC 25 // DC D25
#define TFT_RST 26 // RES D26
DHT11温湿度传感器接线
DHT11电源 3.3V
数据接引脚D22
*/
#include <Arduino.h>
#include <WiFi.h> //wifi功能需要的库
#include <WiFiUdp.h> //引用以使用UDP
#include <TFT_eSPI.h> // Graphics and font library for ST7735 driver chip
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include "DHT.h"
#define DHTTYPE DHT11 // DHT 11
#define DHTPIN 22
DHT dht(DHTPIN, DHTTYPE);
#define TFT_GREY 0x5AEB // New colour 定义背景色
#define LCD_SHOW 21 // D21高电平 lcd点亮 低电平 熄灭
const int button = 19; //D19按钮输入 触发中断 用于点亮lcd
TFT_eSPI tft = TFT_eSPI(); // Invoke library, pins defined in User_Setup.h
const int delay_time = 10000;//延时时间
WiFiUDP Udp;//声明UDP对象
const char* ssid="dsx"; //存储AP的名称信息
const char* password ="dsxbs725"; //存储AP的密码信息
unsigned int localUdpPort = 8081; //本地端口号
const char* ycudp_host = "121.4.99.98";
const int ycudp_port = 8081;
// 按钮中断函数 按下按钮 点亮lcd 在下个loop循环熄灭lcd
void IRAM_ATTR isr(){
digitalWrite(LCD_SHOW,HIGH);
}
void wifi_init(){
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (!WiFi.isConnected())
{
delay(500);
tft.print(".");
}
tft.println();
tft.println("WiFi Connected");
tft.println("IP Address:");
tft.println(WiFi.localIP());
Udp.begin(localUdpPort); //启用UDP监听以接收数据
}
void setup() {
Serial.begin(115200);
pinMode(LCD_SHOW,OUTPUT);
digitalWrite(LCD_SHOW,HIGH);
tft.init();
tft.setRotation(0); //0 竖屏 1 横屏
tft.fillScreen(TFT_GREY);
tft.setCursor(0, 0, 2); //使用字体2 从1 开始
tft.setTextColor(TFT_BLUE);
tft.setTextFont(2);
dht.begin();
pinMode(button,INPUT_PULLUP);// 设置按键IO为上拉输入 GPIO19 连接按键,按键另一端接GND
attachInterrupt(digitalPinToInterrupt(button), isr, FALLING);//按键中断 放在setup后面
wifi_init();
delay(delay_time);
}
void loop() {
digitalWrite(LCD_SHOW,LOW); //熄灭lcd
tft.fillScreen(TFT_GREY);
tft.setCursor(0, 0, 2); //使用字体2 从1 开始
tft.setTextColor(TFT_BLUE);
tft.setTextFont(2);
float h = dht.readHumidity();
float t = dht.readTemperature();
float f = dht.readTemperature(true);
if (isnan(h) || isnan(t) || isnan(f)) {
tft.println(F("Failed to read from DHT sensor!"));
return;
}
tft.println("House T && H");
tft.print("Temperature:");
tft.println(t);
tft.print("Humidity:");
tft.println(h);
Udp.beginPacket(ycudp_host, ycudp_port); //准备发送数据 int beginPacket(IPAddress ip, uint16_t port)
String data= "FromEsp32:" + String(t) + ":" + String(h) ;
Udp.print(data); //复制数据到发送缓存
Udp.endPacket();//发送数据
delay(delay_time);
}