【FireBeetle 2 ESP32-C5】IIC驱动SHT40
要实现智能家居的HomeAssistant的数据传输,我们首先要找一个数据来源,这个就是本次测试使用的传感器模块,主要基于的是SHT40传感器,这类模块也有很多,各大厂家也都有对应的模块。SHT4x是一个数字传感器平台,用于测量不同精度等级的相对湿度和温度。其I2C接口提供多个预配置的I2C地址,同时保持超低功耗预算(0.4 μW)。电源修剪的内部加热器可以在三个加热级别使用,从而使传感器在苛刻的环境中运行。四针双平面无引线封装适用于表面贴装技术(SMT)加工,包括可选的封装上专利PTFE膜或可拆卸的保护罩。根据ISO17025的传感器特定校准证书,可通过唯一序列号识别。
这里也同时测试一下IIC引脚的功能,C5套件中对IIC也进行了引出,这里可以看出IIC所使用的引脚主要是9脚和10脚:
传感器板子上的接口是Qwiic接口,实际上就是SH1.0的4 针 JST 连接器,其中包括以下线路:
3.3 VDC
GND
SDA:串行数据
SCL:串行时钟
我们需要一个SH1.0转杜邦插母的连接线,整体的连接如下:
3.3 VDC
3.3V
GND
GND
SDA
9脚/D
SCL
10脚/C
我们还要确认一下,上拉情况,IIC是必须上拉的:
经过查验C5套装并没有上拉,不过传感器开发板上有引脚电平适配,有上拉,实际连接如下:
接下来我们就开始安装对应的库文件:
测试代码如下:
#include <Wire.h>
#include "Adafruit_SHT4x.h"
int led = 15;
Adafruit_SHT4x sht4;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Wire.begin(9, 10); // GPIO9 为 SDA,GPIO10 为 SCL
Serial.println("I2C initialized");
pinMode(led,OUTPUT);
digitalWrite(led,HIGH);
if (! sht4.begin(&Wire)) {
Serial.println(F("SHT40 sensor not found!"));
while (1) ;
}
else
{
Serial.print(F("SHT40 detected!\t"));
Serial.print(F("Serial number:\t"));
Serial.println(sht4.readSerial(), HEX);
}
sht4.setPrecision(SHT4X_HIGH_PRECISION);
switch (sht4.getPrecision()) {
case SHT4X_HIGH_PRECISION:
Serial.println(F("SHT40 set to High precision"));
break;
case SHT4X_MED_PRECISION:
Serial.println(F("SHT40 set to Medium precision"));
break;
case SHT4X_LOW_PRECISION:
Serial.println(F("SHT40 set to Low precision"));
break;
}
// 6 different heater settings
sht4.setHeater(SHT4X_NO_HEATER);
switch (sht4.getHeater()) {
case SHT4X_NO_HEATER:
Serial.println(F("SHT40 Heater turned OFF"));
break;
case SHT4X_HIGH_HEATER_1S:
Serial.println(F("SHT40 Heater: High heat for 1 second"));
break;
case SHT4X_HIGH_HEATER_100MS:
Serial.println(F("SHT40 Heater: High heat for 0.1 second"));
break;
case SHT4X_MED_HEATER_1S:
Serial.println(F("SHT40 Heater: Medium heat for 1 second"));
break;
case SHT4X_MED_HEATER_100MS:
Serial.println(F("SHT40 Heater: Medium heat for 0.1 second"));
break;
case SHT4X_LOW_HEATER_1S:
Serial.println(F("SHT40 Heater: Low heat for 1 second"));
break;
case SHT4X_LOW_HEATER_100MS:
Serial.println(F("SHT40 Heater: Low heat for 0.1 second"));
break;
}
}
void loop() {
// put your main code here, to run repeatedly:
sensors_event_t humidity, temp;
sht4.getEvent(&humidity, &temp);// populate temp and humidity objects with fresh data
float tem = temp.temperature;
Serial.println("Temp *C = " + String(tem));
float hum = humidity.relative_humidity;
Serial.println("Hum. % = " + String(hum));
delay(5000);
} 在程序里我们首先配置了一下Wire库中IIC对应的引脚,要和引出的引脚对应上,然后进行传感器的初始化测试,通过后进行传感器的相关配置,就可以进行数据的读取了。
串口打印如下:
可以看到虽然今年的寒冷来的比较早,不过封闭的小屋里面还是能够到到24度左右,这个温度还是挺舒适的,不过这个湿度确实挺高的,看着窗户上的挂的冷凝水,这个湿度应该也差不多。
传感器的数据采集是本次测试活动的基础之一,毕竟没有数据对于知智能家居项目来说会显得很苍白。
		页: 
[1]