树莓派dht11 python_树莓派使用DHT11温湿度传感器
使用wiringpi编写C程序:
如下程序借鉴了网上一老外的程序,忘了原帖地址在哪。
#include
#include
#include
#include
#define MAX_TIME 85
#define DHT11PIN 7
#define ATTEMPTS 5 //retry 5 times when no response
int dht11_val[5]={0,0,0,0,0};
int dht11_read_val(){
uint8_t lststate=HIGH; //last state
uint8_t counter=0;
uint8_t j=0,i;
for(i=0;i<5;i++)
dht11_val[i]=0;
//host send start signal
pinMode(DHT11PIN,OUTPUT); //set pin to output
digitalWrite(DHT11PIN,LOW); //set to low at least 18ms
delay(18);
digitalWrite(DHT11PIN,HIGH); //set to high 20-40us
delayMicroseconds(40);
//start recieve dht response
pinMode(DHT11PIN,INPUT); //set pin to input
for(i=0;i
{
counter=0;
while(digitalRead(DHT11PIN)==lststate){ //read pin state to see if dht responsed. if dht always high for 255 + 1 times, break this while circle
counter++;
delayMicroseconds(1);
if(counter==255)
break;
}
lststate=digitalRead(DHT11PIN); //read current state and store as last state.
if(counter==255) //if dht always high for 255 + 1 times, break this for circle
break;
// top 3 transistions are ignored, maybe aim to wait for dht finish response signal
if((i>=4)&&(i%2==0)){
dht11_val[j/8]<<=1; //write 1 bit to 0 by moving left (auto add 0)
if(counter>16) //long mean 1
dht11_val[j/8]|=1; //write 1 bit to 1
j++;
}
}
// verify checksum and print the verified data
if((j>=40)&&(dht11_val[4]==((dht11_val[0]+dht11_val[1]+dht11_val[2]+dht11_val[3])& 0xFF))){
printf("RH:%d,TEMP:%d\n",dht11_val[0],dht11_val[2]);
return 1;
}
else
return 0;
}
int main(void){
int attempts=ATTEMPTS;
if(wiringPiSetup()==-1)
exit(1);
while(attempts){ //you have 5 times to retry
int success = dht11_read_val(); //get result including printing out
if (success) { //if get result, quit program; if not, retry 5 times then quit
break;
}
attempts--;
delay(2500);
}
return 0;
} 上述程序保存为.c文件后编译成可执行文件,运行后会在屏幕打印温度和湿度。
程序中的数据接收处理部分细节如下:
if((i>=4)&&(i%2==0)){ //前3次分别是:1低电平,2高电平(即响应信号),3低电平(即数据第一个低电平)
//i%2==0 是因为每次都是循环读取低电平和高电平,每次要循环2次才读出一个bit处理
dht11_val[j/8]<<=1; //读到后,j/8可以限制一个数的8个位,左移1位自动补0,相当于读出0
if(counter>16) //counter计数如果超过16,则高电平长,应读1.
dht11_val[j/8]|=1; //故再将上面数与1位或,使最后一位变成1
j++; //j++8个换成下一个数据
}
if((j>=40)&&(dht11_val[4]==((dht11_val[0]+dht11_val[1]+dht11_val[2]+dht11_val[3])& 0xFF))){
//这其中(dht11_val[0]+dht11_val[1]+dht11_val[2]+dht11_val[3])& 0xFF)是将5个数相加,和1与。
//目的是防止读出数据都为0,和为0,0和1与后得0,所以if判断条件不成立,返回读取失败码。
//如果读出数据是不为0的正常数据,和1与后还得原数。
树莓派dht11 python_树莓派使用DHT11温湿度传感器相关推荐
- 微信控制树莓派运行python_树莓派笔记07-微信公众号控制树莓派(一)
微信公众号控制树莓派就是在树莓派上使用itchatmp这个开源的微信公众号接口,这是最简单的使用python调用微信公众号.itchatmp基于tornado框架,支持普通使用.nginx反向代理与w ...
- 树莓派i2c python_树莓派2 python i2cPython中chr、unichr、ord字符函数之间的对比
chr.unichr.ord在Python中都可以被用作字符类型转换,这里我们就来浅谈Python中chr.unichr.ord字符函数之间的对比,需要的朋友可以参考下ord是unicode ordi ...
- 树莓派32/100 - Pico连接温湿度传感器
DHT11是一个廉价的温湿度传感器,它只有1平方厘米大小,加上一个小转接板,也没多大,接线也简单,除了正负极之外,只需再接一根信号线. 我一开始以为它要用到ADC,所以把信号线接到了Pico的GP26 ...
- 嵌入式设计与开发项目-DHT11温湿度传感器程序设计
嵌入式设计与开发项目-DHT11温湿度传感器程序设计 一.实现的功能 二.根据功能实现代码 1.主文件main.c 2.DHT11温湿度的头文件"dht11.h" 3.DHT11温 ...
- NodeMCU文档中文翻译 7 DHT温湿度传感器模块
[转载请注明出处:http://blog.csdn.net/leytton/article/details/76178661] 一.序言 DHT11 温湿度模块传感器 资料下载:http://pan. ...
- 基于IIC总线的温湿度传感器,你用过吗
大家好,我是程序员小哈. 又到了知识分享时间,今天我给大家分享一个温湿度传感器模块,我们之前分享过DHT11和DHT21两款温湿度传感器,它俩是基于单总线输出信号的传感器模块,只需要一个GPIO即可实 ...
- 树莓派dht11上云_树莓派使用 DHT11 / DHT22 温湿度传感器
接线说明 从左到右 3.3V-6V 电源 GPIO接口 NO Connected 接地 依赖库 为了简化工作,我们基于Adafruit_Python_DHT的Python库进行实验 Clone下这个依 ...
- 树莓派控制温湿度传感器DHT11
2019独角兽企业重金招聘Python工程师标准>>> 小π因为好几次断电之前没有关掉系统,导致系统老是起不来.无奈只好重写了SD卡.装好后前天晚上把一个温湿度传感器(DHT11)接 ...
- DHT11温湿度传感器(基于树莓派)
1.DHT11的数据格式 2.工作原理 3.工作流程 第一步:树莓派发送开始信号,从传感器会返回一个相应的信号进行应答 第二步:树莓派信号线拉高准备接受数据 第三步:开始接受数据(一次接收40位) 单 ...
最新文章
- IXmaps揭示互联网流量是否被NSA监视
- 基于redis的cas集群配置(转)
- 3月第3周中国五大顶级域名总量增5.4万 美国减31.5万
- 消费流程图_SpringBoot+RabbitMQ ,保证消息100%投递成功并被消费(附源码)
- 第十篇 PO核心功能及流程详解
- 英语总结系列(二十九):好好学英语
- JavaScript随机数的应用
- springboot 全局异常处理类
- acm集训训练赛(二)D题【并查集】
- 三菱plc与西门子plc编程有什么不同?
- Arduino 和 TB6612FNG 驱动直流电机
- Python 预测 NBA 比赛结果
- 卡--配合--读卡器使用 磁卡 CPU卡 IC卡、ID卡、M1卡、射频卡区别 我在项目中使用到的S50卡(M1卡的一种)S50(Mifare 1K)卡简介及存储控制原理
- Markdown 中的表格合并单元格
- SpringBoot---Eureka
- 希尔伯特及其《几何学基础》电子版(英文PDF),
- Fabric链码实战(二)公民身份信息
- 深度剖析ConcurrentHashMap(转)
- eclipse pmd的使用
- 第九/十章 导出生产文件-电路板制作
热门文章
- centos7 frp内网穿透
- 第一次体验python有感
- Java中Map, List, Set和Queue的区别和使用场景
- sql(join on 和where的执行顺序)
- 4. Spring 如何通过 XML 文件配置Bean,以及如何获取Bean
- 在ASP.NET Core使用Middleware模拟Custom Error Page功能
- UVa 11481 (计数) Arrange the Numbers
- 求一个连通图的割点(去掉一个点后图不再连通)
- 转载——开阔自己的视野,勇敢的接触新知识
- 幼小衔接语言教案上c册_关于幼小衔接,这里有你最想要的解答