发帖
17 0 0

【Ai-M61-32SU入门】读取DHT11温湿度

lvxinjia123
论坛元老

11

主题

37

回帖

3100

积分

论坛元老

积分
3100
Ai-M61-Kit外设移植教程 1239 17 2024-5-16 20:19:04
DHT11是一款数字温湿度传感器,只用1个GPIO即可完成通讯,通讯协议就不介绍了,网上都能搜到
先放上已经写好的驱动
上传的附件: my_dht11.rar (2.35 KB, 下载次数: 4)

接线
微信截图_20240516200824.png

读数
微信截图_20240516193306.png
接下来介绍如何使用,在代码中包含头文件my_dht11.h实现GPIO控制方法:
  1. #include "my_dht11.h"
  2. //设置输出电平
  3. void gpio_set_lev(MY_GPIO_DEV_Type *io,uint8_t lev)
  4. {
  5.     if(lev)
  6.         bflb_gpio_set(io->gpio, io->pin);
  7.     else
  8.         bflb_gpio_reset(io->gpio, io->pin);
  9. }
  10. //读取输入电平
  11. uint8_t gpio_get_lev(MY_GPIO_DEV_Type *io)
  12. {
  13.     return bflb_gpio_read(io->gpio, io->pin);
  14. }
  15. //更改输入输出
  16. void gpio_inout(MY_GPIO_DEV_Type *io,uint8_t inout)
  17. {
  18.     if(inout == MY_GPIO_ODIN)
  19.     {
  20.         bflb_gpio_init(io->gpio, io->pin, GPIO_INPUT | GPIO_FLOAT | GPIO_SMT_EN | GPIO_DRV_0);
  21.     }
  22.     else
  23.     {
  24.         bflb_gpio_init(io->gpio, io->pin, GPIO_OUTPUT | GPIO_FLOAT | GPIO_SMT_EN | GPIO_DRV_0);
  25.     }
  26. }
复制代码
定义一个MY_DHT11_DEV_Type类型的结构体全局变量,然后按照下面的方法初始化
  1. struct bflb_device_s *gpio;
  2. MY_DHT11_DEV_Type dht11_dev;
  3. void dht11_init()
  4. {
  5.     gpio = bflb_device_get_by_name("gpio");
  6.     dht11_dev.gpio_dat.gpio = gpio;
  7.     dht11_dev.gpio_dat.pin = GPIO_PIN_18;

  8.     dht11_dev.dat_getlev_func = gpio_get_lev;
  9.     dht11_dev.dat_setlev_func = gpio_set_lev;
  10.     dht11_dev.dat_inout_func = gpio_inout;
  11.     dht11_dev.delayus_func = bflb_mtimer_delay_us;

  12.     MY_DHT11_Init(&dht11_dev);
  13. }
复制代码
在main函数中定时调用读取方法,注意读取到的温湿度都是放大10倍的
  1. int main(void)
  2. {
  3.     int16_t tem,hum;
  4.     board_init();
  5.     dht11_init();
  6.     gpio = bflb_device_get_by_name("gpio");
  7.     bflb_gpio_init(gpio, GPIO_PIN_12, GPIO_OUTPUT | GPIO_FLOAT | GPIO_SMT_EN | GPIO_DRV_0);
  8.     while (1) {
  9.         bflb_gpio_set(gpio, GPIO_PIN_12);
  10.         bflb_mtimer_delay_ms(1000);
  11.         bflb_gpio_reset(gpio, GPIO_PIN_12);
  12.         bflb_mtimer_delay_ms(1000);
  13.         if(MY_DHT11_ReadHT(&dht11_dev,&tem,&hum) == MY_DHT11_OK)
  14.             printf("温度:%.1f℃  湿度:%.1f%%\r\n",tem/10.0,hum/10.0);
  15.     }
  16. }
复制代码







──── 0人觉得很赞 ────

使用道具 举报

2024-5-16 23:33:18
我的那个湿温度传感器不知道为什么不会拉低电平了
2024-5-16 23:35:19
学习
2024-5-17 08:30:47
写的真棒
2024-5-17 08:43:26
不错不错!
2024-5-17 08:56:54
2024-5-17 10:22:58
2024-5-17 10:49:02
很详细啊
2024-5-17 11:39:17

2024-5-17 19:25:08
点个赞赞
您需要登录后才可以回帖 立即登录
高级模式
12下一页
统计信息
  • 会员数: 28171 个
  • 话题数: 39985 篇