使用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温湿度传感器相关推荐

  1. 微信控制树莓派运行python_树莓派笔记07-微信公众号控制树莓派(一)

    微信公众号控制树莓派就是在树莓派上使用itchatmp这个开源的微信公众号接口,这是最简单的使用python调用微信公众号.itchatmp基于tornado框架,支持普通使用.nginx反向代理与w ...

  2. 树莓派i2c python_树莓派2 python i2cPython中chr、unichr、ord字符函数之间的对比

    chr.unichr.ord在Python中都可以被用作字符类型转换,这里我们就来浅谈Python中chr.unichr.ord字符函数之间的对比,需要的朋友可以参考下ord是unicode ordi ...

  3. 树莓派32/100 - Pico连接温湿度传感器

    DHT11是一个廉价的温湿度传感器,它只有1平方厘米大小,加上一个小转接板,也没多大,接线也简单,除了正负极之外,只需再接一根信号线. 我一开始以为它要用到ADC,所以把信号线接到了Pico的GP26 ...

  4. 嵌入式设计与开发项目-DHT11温湿度传感器程序设计

    嵌入式设计与开发项目-DHT11温湿度传感器程序设计 一.实现的功能 二.根据功能实现代码 1.主文件main.c 2.DHT11温湿度的头文件"dht11.h" 3.DHT11温 ...

  5. NodeMCU文档中文翻译 7 DHT温湿度传感器模块

    [转载请注明出处:http://blog.csdn.net/leytton/article/details/76178661] 一.序言 DHT11 温湿度模块传感器 资料下载:http://pan. ...

  6. 基于IIC总线的温湿度传感器,你用过吗

    大家好,我是程序员小哈. 又到了知识分享时间,今天我给大家分享一个温湿度传感器模块,我们之前分享过DHT11和DHT21两款温湿度传感器,它俩是基于单总线输出信号的传感器模块,只需要一个GPIO即可实 ...

  7. 树莓派dht11上云_树莓派使用 DHT11 / DHT22 温湿度传感器

    接线说明 从左到右 3.3V-6V 电源 GPIO接口 NO Connected 接地 依赖库 为了简化工作,我们基于Adafruit_Python_DHT的Python库进行实验 Clone下这个依 ...

  8. 树莓派控制温湿度传感器DHT11

    2019独角兽企业重金招聘Python工程师标准>>> 小π因为好几次断电之前没有关掉系统,导致系统老是起不来.无奈只好重写了SD卡.装好后前天晚上把一个温湿度传感器(DHT11)接 ...

  9. DHT11温湿度传感器(基于树莓派)

    1.DHT11的数据格式 2.工作原理 3.工作流程 第一步:树莓派发送开始信号,从传感器会返回一个相应的信号进行应答 第二步:树莓派信号线拉高准备接受数据 第三步:开始接受数据(一次接收40位) 单 ...

最新文章

  1. IXmaps揭示互联网流量是否被NSA监视
  2. 基于redis的cas集群配置(转)
  3. 3月第3周中国五大顶级域名总量增5.4万 美国减31.5万
  4. 消费流程图_SpringBoot+RabbitMQ ,保证消息100%投递成功并被消费(附源码)
  5. 第十篇 PO核心功能及流程详解
  6. 英语总结系列(二十九):好好学英语
  7. JavaScript随机数的应用
  8. springboot 全局异常处理类
  9. acm集训训练赛(二)D题【并查集】
  10. 三菱plc与西门子plc编程有什么不同?
  11. Arduino 和 TB6612FNG 驱动直流电机
  12. Python 预测 NBA 比赛结果
  13. 卡--配合--读卡器使用 磁卡 CPU卡 IC卡、ID卡、M1卡、射频卡区别 我在项目中使用到的S50卡(M1卡的一种)S50(Mifare 1K)卡简介及存储控制原理
  14. Markdown 中的表格合并单元格
  15. SpringBoot---Eureka
  16. 希尔伯特及其《几何学基础》电子版(英文PDF),
  17. Fabric链码实战(二)公民身份信息
  18. 深度剖析ConcurrentHashMap(转)
  19. eclipse pmd的使用
  20. 第九/十章 导出生产文件-电路板制作

热门文章

  1. centos7 frp内网穿透
  2. 第一次体验python有感
  3. Java中Map, List, Set和Queue的区别和使用场景
  4. sql(join on 和where的执行顺序)
  5. 4. Spring 如何通过 XML 文件配置Bean,以及如何获取Bean
  6. 在ASP.NET Core使用Middleware模拟Custom Error Page功能
  7. UVa 11481 (计数) Arrange the Numbers
  8. 求一个连通图的割点(去掉一个点后图不再连通)
  9. 转载——开阔自己的视野,勇敢的接触新知识
  10. 幼小衔接语言教案上c册_关于幼小衔接,这里有你最想要的解答