功能: ①:初始化LED、软件定时器
②:3秒重复定时
③:每3秒读取一次DHT11温湿度
④:温度超过30℃,LED亮
⑤:串口、OLED显示温湿度
DHT11原理图
这里用oled来显示dht11温湿度
oled是用8266的iic驱动的
// OLED显示初始化
OLED_Init(); // OLED初始化
OLED_ShowString(0,0,"Humidity:"); // 湿度
OLED_ShowString(0,4,"Temperature:"); // 温度
在dht11.c文件中我们首先定义了一个dht11数据数组
DH111_Data _Array[0] == 湿度_整数_部分
DH111_Data _Array[1] == 湿度_小数_部分
DH111_Data _Array[2] == 温度_整数_部分
DH111_Data _Array[3] == 温度_小数_部分
DH111_ Data_ArrayL4] == 校验字节 //用来判断读到的温度湿度有无差错
DH111_Data _Array[5] == 【1:温度>=0℃】 【0:温度<=0℃】 //表示当前温度是否剖大于0℃的标志位
将GPIO_5(DHT11信号线)设为输出模式,并输出参数对应的电平
void ICACHE_FLASH_ATTR DHT11_Signal_Output(u8 Value_Vol)
{
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO5_U, FUNC_GPIO5); // GPIO5设为IO口
GPIO_OUTPUT_SET(GPIO_ID_PIN(5),Value_Vol); // IO5设为输出=X
}
将GPIO_5(DHT11信号线)设为输入模式
void ICACHE_FLASH_ATTR DHT11_Signal_Input(void)
{
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO5_U, FUNC_GPIO5); // GPIO5设为IO口
GPIO_DIS_OUTPUT(GPIO_ID_PIN(5)); // GPIO5失能输出(输入)
}
GPIO5输出起始信号并等待接收dht11的响应信号
DHT11:输出起始信号->接收响应信号
//-----------------------------------------------------
返回值: 0 成功
1 失败:规定时间内未接收到响应信号
2 失败:响应信号的低电平时长超时
u8 ICACHE_FLASH_ATTR DHT11_Start_Signal_JX(void)
{
u8 C_delay_time = 0; // 延时计时
// IO5抬高
//--------------------------------------------------------
DHT11_Signal_Output(1); // DHT