欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于树莓派3B DHT11温湿度模块 bcm2835 GPIO控制

程序员文章站 2024-02-26 09:57:16
...

现在网上有很多使用python脚本或者使用wiringPi库的DHT11数据获取的方法。但是很少有bcm2835 GPIO控制的方式获取DHT11数据。这篇文章也只是丰富这块的空缺。不多说,直接内容。



连线方式:

树莓派3b的引脚图:

关于树莓派3B DHT11温湿度模块 bcm2835 GPIO控制


DHT11三个接口 VCC(电源)、GND (地线)、DATA (控制和读取时间端口)

本文如上图 DATA 连接的是第7接口GPIO 4,VCC连接3.3V板载电源,GND连接板载GND。


准备工作:

bcm2835库的下载,把bcm2835库安装到树莓派上,怎么安装,自己百度下。这边不做陈述。已经安装过的不需要再安装。


C代码:

下面直接上代码。

int readDHT(int pin){  
	int laststate = HIGH;
	int index = 0;
	int data[5];
	memset(data, 0, 5*sizeof(int));
	bcm2835_gpio_fsel(pin, BCM2835_GPIO_FSEL_OUTP);
	bcm2835_gpio_write(pin, HIGH);
	usleep(500000); // 500ms 
	bcm2835_gpio_write(pin, LOW); 
	usleep(20000);  // 20ms 

	bcm2835_gpio_fsel(pin, BCM2835_GPIO_FSEL_INPT);
	//接收DHT11的响应信号、准备信号
	while(bcm2835_gpio_lev(pin) == 1){
		continue;
	}
	while(bcm2835_gpio_lev(pin) == 0){
		continue;
	}
	while(bcm2835_gpio_lev(pin) == 1){
		continue;
	}
	//读取数据信号
	while (index<40){	
		long umcount = 0;
		while(bcm2835_gpio_lev(pin) == 0){
			continue;
		}
		while(bcm2835_gpio_lev(pin) == 1){
			umcount++;
			if(umcount>=1000)
				break;
		}
		if(umcount >= 1000)
			break;
		data[index/8] <<= 1;
		if (umcount>200){
			data[index/8] |= 1;
		}
		index++;
	}
	//验证数据是否正确
	if (data[4] == ((data[0]+data[1]+data[2])+data[3]) & 0xFF){
		printf("Temp = %d.%d *C, Hum = %d.%d \%\n",data[2],data[3],data[0],data[1]);
		return 1;
	}
	
	return 0;  
}

编译方法:

gcc xxx.c -o xxx -l bcm2835 编译的时候因为使用了bcm2835库所以一定要带上。

源码地址:http://download.csdn.net/download/danwufeiyang/9965344


结果显示:

关于树莓派3B DHT11温湿度模块 bcm2835 GPIO控制


上一篇: Yii2主题(Theme)用法详解

下一篇: