wenbo2005.online

学习记录 / STM32

温湿度 DHT11+OLED

STM322024-12-10
//=====================================================================需要定时器

1,配置时针,SYS;

2,开启I2C1,串口1,并开启其中断;

3,开启计时器2,开启中断;(72-1,65535)

4,添加oled文件,引入头文件:

    #include "oled.h"
    #include "DHT11.h"
    #include "stdio.h"
    #include "main.h"

5,全局变量:

    uint16_t    temperature=0;
        uint16_t    humidity=0;
        char dispBuff1[20];
        char dispBuff2[20];

6,串口打印函数:

int fputc(int ch,FILE *f)//===========================================printf打印
{
    size_t count = 1;
    char chtemp = (char)ch;
    HAL_UART_Transmit_IT(&huart1,(uint8_t*)&chtemp,count);
    return count;
}

7,屏幕显示函数:

void DHT11_show(void)//==================================================================显示内容
{
        unsigned int temperature=temperature;
        unsigned int humidity=humidity;
     OLED_ShowString(1,6,(uint8_t*)dispBuff1,20);//=================================字体大小控制无效!!
     OLED_ShowString(1,7,(uint8_t*)dispBuff2,20);//=============左右距离,上下距离
}

8,初始化:

    OLED_Init();
    OLED_Clear();
    uint8_t a[12]="Hello World";

9,只加载一次:

  OLED_ShowCHinese(20,1,7);
  OLED_ShowCHinese(50,1,8);
  OLED_ShowCHinese(80,1,9);
  OLED_ShowString(20,4,a,3);

10,主函数:

     DHT11_OLED();
     HAL_UART_Transmit_IT(&huart1,(uint8_t*)&dispBuff1,20);
     HAL_Delay(200);//===========================================防止串口卡死
     HAL_UART_Transmit_IT(&huart1,(uint8_t*)&dispBuff2,20);//=====================蓝牙间隔发送

11自定义函数:(注意声明)

void DHT11_OLED(void)
{
      printf("Temp:%d.%d degree\r\n",temperature>>8,temperature&0xff);//========蓝牙打印
      printf("Humi:%d.%d% % \r\n",humidity>>8,humidity&0xff);//==========================蓝牙打印
      DHT11_Read_Data(&temperature,&humidity);
      sprintf(dispBuff1,"Temp:%d.%d'",temperature>>8,temperature&0xff);
      sprintf(dispBuff2,"Humi:%d.%d%%",humidity>>8,humidity&0xff);
      HAL_Delay(500);
      DHT11_show();
}

//========================================================================无需定时器

1,选择一个output,高速,默认上拉,重命名为DATA;

2,添加DHT11文件(无需定时器),注意默认是GPIOB;

3,注意没有连接DHT11模块,将导致初始化卡死

uint8_t DHT11_DATA[2];            //存放数组

HAL_Delay(500);
DHT11_Init();
HAL_Delay(1500);

DHT11_ReadData(DHT11_DATA);
printf("Humi:%d  Temp:%d\r\n",DHT11_DATA[0],DHT11_DATA[1]);            //    循环
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);
HAL_Delay(500);