继上一篇调通串口和OLED后,这次我们开始加传感器,这次的传感器是温湿度传感器DHT11。
DHT11 器件采用简化的单总线通信。单总线即只有一根数据线,系统中的数据交换、控制均由单总线完成。设备(主机或从机)通过一个漏枀开路或三态端口连至该数据线,以允许设备在不发送数据时能够释放总线,而让其它设备使用总线;单总线通常要求外接一个约 4.7kΩ 的上拉电阻,这样,当总线闲置时,其状态为高电平。由于它们是主从结极,只有主机呼叫从机时,从机才能应答,因此主机访问器件都必须严格遵循单总线序列,如果出现序列混乱,器件将不响应主机。
DATA 用于微处理器与 DHT11 之间的通讯和同步,采用单总线数据格式,一次传送 40 位数据,高位先出。
数据格式:
8bit 湿度整数数据 + 8bit 湿度小数数据 + 8bit 温度整数数据 + 8bit 温度小数数据 + 8bit 校验位。

准备工作
连接好环境,DHT11的DAT引脚与GPIO 301相连接,在e2studio上配置相关信息,将获取到的温湿度信息通过OLED和串口显示出来


IDE设置如下:

在原有基础上增加DHT11相关代码信息

部分代码如下:
void hal_entry(void)
{
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_03_PIN_01, BSP_IO_LEVEL_HIGH);
R_BSP_SoftwareDelay(1000U, BSP_DELAY_UNITS_MILLISECONDS);
UART9_Init();
LED_Init();
OLED_Init();
OLED_Clear() ;
OLED_ShowCHinese(0,0,9);
OLED_ShowCHinese(16,0,10);
OLED_ShowString(32,0,"RA6M4",16);
OLED_ShowString(0,2,"TEMP",16);
OLED_ShowNum(64,2,temp_integer,2,16);
OLED_ShowString(0,4,"HUMD",16);
OLED_ShowNum(64,4,humdity_integer,2,16);
R_BSP_SoftwareDelay(2, BSP_DELAY_UNITS_SECONDS);
printf("这是一个串口和OLED RA6M4\r\n");
while(1)
{
LED1_ON;
LED2_ON;
R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_SECONDS);
LED1_OFF;
LED2_OFF;
R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_SECONDS);
DHT11_Read();
printf("hum=%d temp=%d\n",humdity_integer,temp_integer);
OLED_ShowNum(64,2,temp_integer,2,16);
OLED_ShowNum(64,4,humdity_integer,2,16);
}
#if BSP_TZ_SECURE_BUILD
R_BSP_NonSecureEnter();
#endif
}