一、连接DHT12
DHT12温湿度传感器使用I2C接口进行通信,因此需要使用RVB2601开发板上的I2C接口。默认情况下,板上的I2C接口通过跳线帽连接到了板载的ES7210和ES8156上,因此需要取下跳线帽,I2C、电源和地的位置如下。
二、代码编写
RVB2601提供了I2C的驱动函数。使用时需要引入头文件: __#include <drv/iic.h>__ 。需要用到的函数包括:
- csi_error_t csi_iic_init(csi_iic_t *iic, uint32_t idx),初始化一个I2C设备的句柄,其中iic为用户创建的变量,idx为I2C设备的编号,从0开始,初始化之前记得设置PIN的功能;
- csi_error_t csi_iic_mode(csi_iic_t *iic, csi_iic_mode_t mode),配置I2C设备的工作模式,在这里是做主机使用,因此需配置为 IIC_MODE_MASTER;
- csi_error_t csi_iic_addr_mode(csi_iic_t *iic, csi_iic_addr_mode_t addr_mode),设置I2C通信的地址模式,包括7位地址和10位地址,这里使用7位地址,IIC_ADDRESS_7BIT;
- csi_error_t csi_iic_speed(csi_iic_t *iic, csi_iic_speed_t speed),设置I2C的通信速度,这里使用标准速度,IIC_BUS_SPEED_STANDARD;
- int32_t csi_iic_master_send(csi_iic_t iic,uint32_t devaddr,const void data,uint32_t size,uint32_t timeout),发送数据,这里要注意第二个参数devaddr是7位的地址,比如说DHT12手册上给出的地址0xB8,这个地址是包含最低位读写标志位的,因此需要将0xB8左移一位,得到0x5C;
- int32_t csi_iic_master_receive(csi_iic_t iic, uint32_t devaddr, void data, uint32_t size, uint32_t timeout),读取数据。
操作代码如下:
static csi_iic_t g_iic;
void dht12_init()
{
csi_pin_set_mux(PA8, PA8_IIC0_SCL);
csi_pin_set_mux(PA9, PA9_IIC0_SDA);
csi_iic_init(&g_iic, 0);
csi_iic_mode(&g_iic, IIC_MODE_MASTER);
csi_iic_addr_mode(&g_iic, IIC_ADDRESS_7BIT);
csi_iic_speed(&g_iic, IIC_BUS_SPEED_STANDARD);
}
void dht12_get_data()
{
unsigned char buf[10]={0};
char str_data[50];
csi_iic_master_send(&g_iic,0x5c,buf,1,1000);
csi_iic_master_receive(&g_iic,0x5c,buf,5,1000);
sprintf(str_data,"T:%d.%dtH:%d.%d",buf[2],buf[3],buf[0],buf[1]);
LOGD(TAG,"%s",str_data);
}
下图为显示截图
RVB2601的驱动函数用起来挺简单了,I2C的使用也很简洁。就是在从机地址那里卡了一下,从机地址应该为7位的地址。
|