发 帖  
原厂入驻New
张飞软硬开源基于STM32 BLDC直流无刷电机驱动器开发视频套件, 👉戳此立抢👈

[经验] 【uFun试用体验】迟来的第四帖——连接DHT11温湿度传感器&动态折线图上位机

2019-6-27 22:22:53  1512 ufun 单片机 STM32 上位机
分享
0
本帖最后由 donatello1996 于 2019-6-27 22:23 编辑

         uFun开发板的板载资源少的可怜,连最基本的温湿度传感器都没有,好在板上有个外界引出的PWMCH1引脚,串联了两个1K电阻到PB8,可作为数字通信引脚使用,但是也不是可以直接使用,因为DHT11通信要求足够强的输入电压,因此这两个R48和R49的1K电阻必须去掉,使用电烙铁将R48和R49去掉并短接,使得PWMCH1引脚直连PB8:
15.jpg IMG_20190627_213715.jpg
连接DHT11温湿度传感器,3.3V为J1引脚上的3.3V:
IMG_20190627_213829.jpg
驱动代码不多说,很简单:
  1. #IFndef _DHT11_H
  2. #define _DHT11_H
  3. #include "STM32f1xx.h"

  4. #define DHT11_GPIO GPIOB
  5. #define DHT11_GPIO_CLOEN         __HAL_RCC_GPIOB_CLK_ENABLE()
  6. #define DHT11_PIN GPIO_PIN_8
  7. #define DHT11_PIN_SET HAL_GPIO_WritePin(DHT11_GPIO,DHT11_PIN,1)
  8. #define DHT11_PIN_CLR HAL_GPIO_WritePin(DHT11_GPIO,DHT11_PIN,0)
  9. #define DHT11_PIN_Read HAL_GPIO_ReadPin(DHT11_GPIO,DHT11_PIN)

  10. #define DHT11_PIN_IN()  {DHT11_GPIO->CRH&=0XFFFFFFF0;DHT11_GPIO->CRH|=0X00000008;}
  11. #define DHT11_PIN_OUT() {DHT11_GPIO->CRH&=0XFFFFFFF0;DHT11_GPIO->CRH|=0X00000003;}

  12. GPIO_InitTypeDef GPIO_InitStruct;

  13. unsigned char over_temp,over_humi;

  14. void DHT11_Reset()         
  15. {                 
  16.         DHT11_PIN_OUT();        
  17.         DHT11_PIN_CLR;        
  18.         Delay_ms(20);
  19.         DHT11_PIN_SET;
  20.         Delay_us(30);
  21. }

  22. int DHT11_Check()
  23. {   
  24.         int retry=0;
  25.         DHT11_PIN_IN();
  26.         while (DHT11_PIN_Read&&retry<100)
  27.         {
  28.                 retry++;
  29.                 Delay_us(1);
  30.         };
  31.       
  32.         if(retry>=100)return 1;
  33.         else retry=0;
  34.         while (!DHT11_PIN_Read&&retry<100)
  35.         {
  36.                 retry++;
  37.                 Delay_us(1);
  38.         };
  39.         if(retry>=100)return 2;            
  40.         return 0;
  41. }

  42. int DHT11_Init()
  43. {
  44.         DHT11_GPIO_CLOEN;
  45.   GPIO_InitStruct.Pin=DHT11_PIN;
  46.   GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP;
  47.   GPIO_InitStruct.Pull=GPIO_NOPULL;
  48.   GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_HIGH;
  49.   HAL_GPIO_Init(DHT11_GPIO,&GPIO_InitStruct);
  50.         DHT11_PIN_OUT();
  51.         DHT11_PIN_CLR;
  52.         DHT11_Reset();
  53.         return DHT11_Check();
  54. }

  55. int DHT11_Read_Bit()                          
  56. {
  57.         int retry=0;
  58.         while(DHT11_PIN_Read&&retry<100)
  59.         {
  60.                 retry++;
  61.                 Delay_us(1);
  62.         }
  63.         retry=0;
  64.         while(!DHT11_PIN_Read&&retry<100)
  65.         {
  66.                 retry++;
  67.                 Delay_us(1);
  68.         }
  69.         Delay_us(40);
  70.         if(DHT11_PIN_Read) return 1;
  71.         else return 0;  
  72. }

  73. char DHT11_Read_Byte()   
  74. {        
  75.         char i,dat;
  76.         dat=0;
  77.         for(i=0;i<8;i++)
  78.         {
  79.                    dat<<=1;
  80.             dat|=DHT11_Read_Bit();
  81.   }
  82.       
  83.         return dat;
  84. }

  85. int DHT11_Read_Data(uint8_t *temp,uint8_t *humi)   
  86. {        
  87.         uint8_t buf[5],i;
  88.         DHT11_Reset();
  89.         if(DHT11_Check()==0)
  90.         {
  91.                 for(i=0;i<5;i++)
  92.                 {
  93.                         buf=DHT11_Read_Byte();
  94.                 }
  95.                 if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
  96.                 {
  97.                         *humi=buf[0];
  98.                         *temp=buf[2];
  99.                 }
  100.         }
  101.         else return 1;
  102.         return 0;            
  103. }

  104. #endif
复制代码
然后重点就是温湿度动态数据变化的折线图了,水蓝色为温度,红色为湿度,上方标有实时温湿度数值,折线图谱数据采集间隔为10毫秒,每次取得的新数据都放到最右边的一格中,前面的数据依次平移:
16.jpg
上传开发板工程文件:
STM32F103C8T6-HAL - 主机.zip (959.09 KB, 下载次数: 2)

上传上位机工程文件:
release.zip (20.08 MB, 下载次数: 1)

王栋春 2019-6-27 22:44:35
学习借鉴一下
回复 举报

评论

高级模式
您需要登录后才可以回帖 登录 | 注册
发经验
课程
    关闭

    站长推荐 上一条 /10 下一条

    快速回复 返回顶部 返回列表