一、硬件介绍
1、主控开发板
使用的是XIAO ESP32S3开发板,集成ESP32S3 32位双核处理器芯片,最高运行频率240MHz,板载8MB PSRAM和8MB FLASH

功能引脚示意图

2、扩展底板
一款支持XIAO系列的功能扩展板,具有丰富的外设:包括OLED、RTC、可扩展内存、无源蜂鸣器、RESET/用户按钮、5V舵机连接器等;

主要特性

功能引脚示意图

3、Grove Creator Kit 器件
在本次开发中,使用到的 `Grove Creator Kit 套件` 中的器件如下:
Grove - Temperature & Humidity Sensor (DHT11)
这款温湿度传感器提供预校准的数字输出,独特的电容式传感器元件测量相对湿度,温度通过负温度系数 (NTC) 热敏电阻测量;

主要特性

Grove - Light Sensor
Grove - 光传感器集成了一个光敏电阻来检测光强度,当光强度增加时,光敏电阻的阻值会减小,板载的双运放芯片LM358产生与光强度相对应的电压;
输出信号是模拟值,光线越亮,数值越大;

主要特性

Grove - Temperature Sensor
Grove - 温度传感器使用热敏电阻来检测环境温度,当环境温度降低时,热敏电阻的阻值会增加;
检测范围:-40 - 125ºC;
精度: ±1.5ºC;

主要特性
电压:3.3 ~ 5V
25℃时最大功率额定值:300mW
零功率电阻:10 KΩ
工作温度范围:-40 ~ +125 ℃
二、功能实现
1、硬件搭建
将光传感器、温湿度传感器、温度传感器模块,通过Grove接口连接到开发板对应的引脚上;

实物搭建效果:

2、功能效果
分别通过温湿度传感器、温度传感器、光传感器模块检测室内环境的湿度、温度、光照强度等信息;
并将检测到的数值分别显示到扩展板的OLED屏幕上;
三、代码编写
主要相关代码
> 温度、光照强度数值每500ms更新一次;
> 湿度数值每2s更新一次;
#include <DHT11.h>
#include <U8x8lib.h>
#include <Wire.h>
#define LIGHT_PIN A1
#define HUM_PIN D7 //DHT11 只读湿度
#define TEM_PIN A0 //NTC热敏电阻温度
U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE, /* clock=*/ SCL, /* data=*/ SDA );
DHT11 dht11(HUM_PIN);
int lightValue = 0;
int lightPercent = 0;
float temperature = 0.0;
int humidity = 0;
const int B = 3975; //NTC B值
const float R0 = 10000.0; //25℃标称电阻10k
unsigned long timerLT = 0;
const unsigned long intervalLT = 500; //光照、温度 500ms
unsigned long timerHum = 0;
const unsigned long intervalHum = 2000; //DHT11湿度 2000ms
void setup()
{
u8x8.begin();
u8x8.setFlipMode(0);
u8x8.setFont(u8x8_font_7x14_1x2_r);
pinMode(HUM_PIN, INPUT);
pinMode(TEM_PIN, INPUT);
pinMode(LIGHT_PIN, INPUT);
delay(500);
u8x8.clear();
}
void loop()
{
unsigned long now = millis();
// 光照/NTC温度:500ms更新
if(now - timerLT >= intervalLT)
{
timerLT = now;
lightValue = analogRead(LIGHT_PIN);
lightPercent = map(lightValue, 0, 4095, 0, 100);
lightPercent = constrain(lightPercent,0,100); // 转换为百分比
int temValue = analogRead(TEM_PIN);
float resistance = (float)(4095 - temValue) * R0 / temValue;
temperature = 1.0 / (log(resistance / R0) / B + 1.0 / 298.15) - 273.15;
}
// DHT11湿度:2s更新
if(now - timerHum >= intervalHum)
{
timerHum = now;
humidity = dht11.readHumidity();
}
// 屏幕显示
u8x8.setCursor(3,1);
u8x8.print("Light:");
u8x8.print(lightPercent);
u8x8.print("% ");
u8x8.setCursor(3,3);
u8x8.print("Temp:");
u8x8.print(temperature,1);
u8x8.print("C ");
u8x8.setCursor(3,5);
u8x8.print("Humi:");
if (humidity != DHT11::ERROR_CHECKSUM && humidity != DHT11::ERROR_TIMEOUT)
{
u8x8.print(humidity);
u8x8.print("% ");
}
else
{
u8x8.print("-- ");
}
}四、程序烧录
1、连接USB数据线至开发板;
2、选择端口号对应的开发板;
3、点击 `上传` 烧录程序到开发板上;

五、效果演示

我要赚赏金
