FastBond2阶段2-基于esp32的温湿度监测装置设计
基于乐鑫科技的esp32无线SoC和DHT22温湿度传感器,0.96寸OLED显示屏设计了温湿度监测装置。
标签
ESP32
FastBond第二季
电子垃圾佬
更新2023-11-10
741

一、前言

上回FastBond2阶段1的文档中,展示了使用Scheme-it绘制的原理图,介绍了基于esp32和DHT22温湿度监测设计的原理,也说明了项目中所使用到的活动规定厂家的芯片-乐鑫ESP32。

想了解阶段1的具体内容可以通过链接跳转:https://www.eetree.cn/project/detail/2045

本文的内容将介绍使用kicad绘制原理图及PCB,成品的调试和程序的说明。

二、原理图及PCB介绍

流程图及原理图初步设计都是由Scheme-it网页绘制,十分方便,使用了FastBond活动中要求的厂商的芯片-乐鑫的无线SoC ESP32。

这里是分享链接:https://www.digikey.cn/schemeit/project/基于esp32的温湿度监测设计-611354ccaaf94243be44dcc91b84cce1

如框图所示,esp32通过单个IO驱动温湿度传感器DHT22,DHT22也称AM2302,是一款含有已校准数字信号输出的温湿度复合传感器,湿度量程范围0~99.9%RH,精度±2%RH,而温度量程范围是-40℃~80℃,精度±0.5℃。

Fi3c8kDzmfGDbSPcEzXGcPmp8ygx

通过I2C接口驱动OLED12864。

DHT22是单总线通信的,驱动它只需三根线:电源线、信号线和地线,因此其电路也很简单,esp32外部只需在EN脚连接上电复位电阻电容就能工作,IO0是下载控制脚,上电时如果是低电平就会进入串口下载模式。

DHT22连接到了IO4;

OLED12864连接到了默认的I2C接口GPIO21和GPIO22;

串口0用于下载程序和打印日志;

整个系统的供电通过排针VCC进行,需要的电压是3.3V;

Ft1ZESB6n9XDY24VvRjBJGUaEjLJ

 

设计的PCB如下,需要注意的是esp32的天线下面不能铺铜,使用kicad很流畅,自带了很多元件的库:

FtiTSEFQ0NULg1eSxBzPtSo-Lkrk

三、板子功能调试

板子焊接好如下,12864液晶通过排针插到上面,DHT22也通过排针插到上面,esp32跑起来最小只需一个电阻和一个电容,十分简单。

Fga_GDvVyk6-liPNw5EVtKwtG9ZA

下载的时候需要先断电,将IO0通过跳冒短接到GND,arduino提示正在下载的时候上电,这样就能进入下载模式了。

 

四、程序功能说明

使用arduino开发十分简单,只需要下载安装dht22和oled12864的驱动库,以及esp32的库支持。

程序中首先初始化串口打印、GPIO模式配置、12864驱动配置等功能。

定义了DHT22温度传感器使用的管脚,使用默认的i2c管脚无需额外定义管脚。

然后在主循环中读取温湿度传感器的数据后送到液晶上面显示。

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>

#define SCREEN_WIDTH 128 // 液晶像素宽度
#define SCREEN_HEIGHT 64 // 液晶像素高度

//定义ssd1306对象
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

#define DHTPIN 4     // 定义DHT22传感器管脚

#define DHTTYPE    DHT22     // DHT 22 (AM2302)

//定义DHT22对象
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(115200);//初始化串口

  dht.begin();//初始DHT22传感器

  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  delay(2000);
  display.clearDisplay();
  display.setTextColor(WHITE);
}

void loop() {
  delay(5000);

  //读取温湿度数据
  float t = dht.readTemperature();
  float h = dht.readHumidity();
  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
  }

  display.clearDisplay();
  
  //显示温度
  display.setTextSize(1);
  display.setCursor(0,0);
  display.print("Temperature: ");
  display.setTextSize(2);
  display.setCursor(0,10);
  display.print(t);
  display.print(" ");
  display.setTextSize(1);
  display.cp437(true);
  display.write(167);
  display.setTextSize(2);
  display.print("C");
  
  //显示湿度
  display.setTextSize(1);
  display.setCursor(0, 35);
  display.print("Humidity: ");
  display.setTextSize(2);
  display.setCursor(0, 45);
  display.print(h);
  display.print(" %"); 
  
  display.display(); 
}

以上就是主要程序的说明,实现的一个简单的传感器数据读取和显示。

五、活动总结

感谢硬禾学堂举办的FastBond2活动,让我有机会进行DIY并分享给大家,希望明年的FastBond3更加精彩。

附件下载
fastbond2_esp32.zip
arduino程序
esp32.zip
kicad工程
团队介绍
电子垃圾佬
团队成员
电子垃圾佬
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号