前面分别实现了串口和I2C驱动Gravity模块语音播报,本篇接入DHT11传感器,采集温湿度数据,使用Gravity模块播报出来。
一.硬件准备
将DHT11传感器接入FireBeetle 2 ESP32-C5开发板上,DAT引脚接GPIO12引脚,Gravity模块仍选择I2C接口驱动。准备好后硬件如下
二.代码实现
1.DHT11驱动
(1)首先安装“DHT sensor library”库,如下:
(2)DHT11宏定义初始化
宏定义如下
// 定义DHT11引脚和类型
#define DHTPIN 12 // 数据引脚连接至GPIO12
#define DHTTYPE DHT11
// 初始化DHT传感器
DHT dht(DHTPIN, DHTTYPE);
在setup()函数内加入如下DHT11初始化函数
void setup() {
Serial.begin(115200);
dht.begin();
Serial.println("DHT11温湿度传感器");
/*略*/
}
(3)温湿度读取
// 读取湿度(百分比)
float humidity = dht.readHumidity();
// 读取温度(摄氏度)
float temperature = dht.readTemperature();
// 检查读取是否失败
if (isnan(humidity) || isnan(temperature)) {
Serial.println("读取传感器失败");
return;
}
2.温湿度串口打印
// 输出温湿度数据
Serial.print("温度: ");
Serial.print(temperature);
Serial.print("°C\t\t"); // 两个制表符增加间距
Serial.print("湿度: ");
Serial.print(humidity);
Serial.println("%");
3.温度与湿度播报处理
char speakBuffer[50];
// 播报温度
snprintf(speakBuffer, sizeof(speakBuffer), "当前温度[n2]%.1f摄氏度", temperature);
ss.speak(speakBuffer);
// 播报湿度
snprintf(speakBuffer, sizeof(speakBuffer), "当前湿度百分之[n2]%.1f", humidity);
ss.speak(speakBuffer);
这里查阅资料在数字前加[n2],语音播报时以数值播报。
至此,代码准备完毕。
三.测验
编译烧录后,打开串口如下
同时音频语音播报如下视频
至此实现使用Gravity模块实现语音动态播报温湿度的应用。