600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Orange Pi 香橙派 zero h2+ 实现DHT11 温湿度的读取 (附录代码也适用于 树莓派 DHT11)

Orange Pi 香橙派 zero h2+ 实现DHT11 温湿度的读取 (附录代码也适用于 树莓派 DHT11)

时间:2020-09-24 17:13:33

相关推荐

Orange Pi 香橙派 zero h2+  实现DHT11 温湿度的读取 (附录代码也适用于 树莓派 DHT11)

OrangePi 的 26 pin 接口图 13 pin 接口图

以下分5步介绍使用 wiringPi,实现读 DHT11 。

(wiringPi是一个很棒的 IO 控制库,使用C语言开发,提供了丰富的接口:GPIO控制,中断,多线程,等等。)

1.查看 gpio 库的版本号 (如果没有安装 请参考文章末尾说明)

指令 : gpio -v

打印gpio 信息

指令: gpio readall

2. gpio 初始化及使用说明

3.确定下所要使用 gpio

根硬件连接图 选定 使用的 IO 本次测试初始化使用函数 wiringPiSetup () ; wiringPi 引脚编号表 使用的是 7 ,如果改用其他io 只需要改 代码中的宏定义#define DHTPIN 7

4.实例代码

源码下载地址:

/download/wzy15965343032/11459791

#include <wiringPi.h>

#include <stdio.h>

#include <stdlib.h>

#include <stdint.h>

#define DHTPIN 7

uint8_t temperature;

uint8_t humidity;

void DHT11_Rst(void)

{

wiringPiSetup();

pinMode(DHTPIN, OUTPUT); //SET OUTPUT

digitalWrite(DHTPIN, LOW); //拉低DQ

delay(20); //拉低至少18ms

digitalWrite(DHTPIN, HIGH); //DQ=1

delayMicroseconds(35); //主机拉高20~40us

}

//等待DHT11的回应

//返回1:未检测到DHT11的存在

//返回0:存在

uint8_t DHT11_Check(void)

{

uint8_t retry = 0;

pinMode(DHTPIN, INPUT);//SET INPUT

while (digitalRead(DHTPIN) && retry < 100) //DHT11会拉低40~80us

{

retry++;

delayMicroseconds(1);

};

if (retry >= 100)

return 1;

else

retry = 0;

while (!digitalRead(DHTPIN) && retry < 100) //DHT11拉低后会再次拉高40~80us

{

retry++;

delayMicroseconds(1);

};

if (retry >= 100)

return 1;

return 0;

}

//从DHT11读取一个位

//返回值:1/0

uint8_t DHT11_Read_Bit(void)

{

uint8_t retry = 0;

pinMode(DHTPIN, INPUT);

while (digitalRead(DHTPIN) && retry < 100) //等待变为低电平

{

retry++;

delayMicroseconds(1);

}

retry = 0;

while (!digitalRead(DHTPIN) && retry < 100) //等待变高电平

{

retry++;

delayMicroseconds(1);

}

delayMicroseconds(40); //等待40us

if (digitalRead(DHTPIN))

return 1;

else

return 0;

}

//从DHT11读取一个字节

//返回值:读到的数据

uint8_t DHT11_Read_Byte(void)

{

uint8_t i, dat;

dat = 0;

for (i = 0; i < 8; i++)

{

dat <<= 1;

dat |= DHT11_Read_Bit();

}

return dat;

}

//从DHT11读取一次数据

//temp:温度值(范围:0~50°)

//humi:湿度值(范围:20%~90%)

//返回值:0,正常;1,读取失败

uint8_t DHT11_Read_Data(uint8_t *temp, uint8_t *humi)

{

uint8_t buf[5];

uint8_t i;

DHT11_Rst();

if (DHT11_Check() == 0)

{

for (i = 0; i < 5; i++) //读取40位数据

{

buf[i] = DHT11_Read_Byte();

}

if ((buf[0] + buf[1] + buf[2] + buf[3]) == buf[4])

{

*humi = buf[0];

*temp = buf[2];

}else

{

return 0;

}

}

else

return 1;

return 0;

}

int main(void)

{

int tole_time = 0;

printf("Raspberry Pi wiringPi DHT11 Temperature test program\n");

if (wiringPiSetup() == -1)

{

printf("ERROR exit0 /r/n ");

exit(0);

}

while (tole_time < 10)

{

printf("read ONE time\r\n ");

if( DHT11_Read_Data(&temperature,&humidity) == 0 ) //读取温湿度值

{

printf("\r\n temp: %d humi: %d \r\n", temperature, humidity )

delay(1000);

tole_time++;

}

}

return 0;

}

5.编译:

# 编译 dth11.cgcc -Wall -o dht11_2 dht11_2.c -lwiringPi -lpthread# 设置环境变量export WIRINGPI_DEBUG=TRUEunset WIRINGPI_DEBUG

运行结果:

GPIO 驱动库相关说明:

没有找到 H2+ 的这个 h3 的也可以用

编译GPIO的H5的驱动

git clone /kazukioishi/WiringOP.git -b h3cd WiringOPchmod +x ./buildsudo ./build

查看: gpio -v

root@orangepizero:~# gpio -vgpio version: 2.20Copyright (c) - Gordon HendersonThis is free software with ABSOLUTELY NO WARRANTY.For details type: gpio -warrantyBanana Pro Details:Type: Banana Pro, Revision: 1.2, Memory: 1024MB, Maker: LeMakerroot@orangepizero:~# gpio readall+-----+-----+----------+------+---+-Orange Pi+---+---+------+---------+-----+--+| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name| wPi | BCM |+-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+|||3.3v || | 1 || 2 | || 5v |||| 12 | 8 | SDA.0 | ALT3 | 0 | 3 || 4 | || 5V |||| 11 | 9 | SCL.0 | ALT3 | 0 | 5 || 6 | || 0v |||| 6 | 7 | GPIO.7 | ALT3 | 0 | 7 || 8 | 0 | ALT3 | TxD3| 15 | 13 |||| 0v || | 9 || 10 | 0 | ALT3 | RxD3| 16 | 14 || 1 | 0 |RxD2 | ALT3 | 0 | 11 || 12 | 0 | ALT3 | GPIO.1 | 1 | 110 || 0 | 2 |TxD2 | ALT3 | 0 | 13 || 14 | || 0v |||| 3 | 3 |CTS2 | ALT3 | 0 | 15 || 16 | 0 | ALT3 | GPIO.4 | 4 | 68 ||||3.3v || | 17 || 18 | 0 | ALT3 | GPIO.5 | 5 | 71 || 64 | 12 |MOSI | ALT3 | 0 | 19 || 20 | || 0v |||| 65 | 13 |MISO | ALT3 | 0 | 21 || 22 | 0 | ALT3 | RTS2| 6 | 2 || 66 | 14 |SCLK | ALT3 | 0 | 23 || 24 | 0 | ALT3 | CE0| 10 | 67 |||| 0v || | 25 || 26 | 0 | ALT3 | GPIO.11 | 11 | 21 || 19 | 30 | SDA.1 | ALT3 | 0 | 27 || 28 | 0 | ALT3 | SCL.1 | 31 | 18 || 7 | 21 | GPIO.21 | ALT3 | 0 | 29 || 30 | || 0v |||| 8 | 22 | GPIO.22 | ALT3 | 0 | 31 || 32 | 0 | ALT3 | RTS1| 26 | 200 || 9 | 23 | GPIO.23 | ALT3 | 0 | 33 || 34 | || 0v |||| 10 | 24 | GPIO.24 | ALT3 | 0 | 35 || 36 | 0 | ALT3 | CTS1| 27 | 201 || 20 | 25 | GPIO.25 | OUT | 1 | 37 || 38 | 0 | ALT3 | TxD1| 28 | 198 |||| 0v || | 39 || 40 | 0 | ALT3 | RxD1| 29 | 199 |+-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name| wPi | BCM |+-----+-----+----------+------+---+-Orange Pi+---+------+----------+-----+-----+

uint8_t DHT11_Read_Data(uint8_t *temp, uint8_t *humi){uint8_t buf[5];uint8_t i;DHT11_Rst();if (DHT11_Check() == 0){for (i = 0; i < 5; i++) //读取40位数据{buf[i] = DHT11_Read_Byte();}if ((buf[0] + buf[1] + buf[2] + buf[3]) == buf[4]){*humi = buf[0];*temp = buf[2];}else{return 1; //校验失败不返回 0000000000000}}elsereturn 1;return 0;}

参考文章地址:

/p/0ee31099983e

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。