温湿度项目--ESP32

  通过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);
}

猜你喜欢

转载自blog.csdn.net/weixin_42854045/article/details/127940961