我们之前介绍过三种读取 DHT11 温湿度传感器数值的方法:用系统功能直读、用 Adafruit 的库读取、用 Python 编程读取。

尽管方法很多,但是在不同的树莓派上、使用不同的生产商生产的 DHT11 模块时,可能出现读出的数值无效,或者直接读不出的情况。

那么这边再多提供一种亲测可用的 C 语言版本供大家选择尝试。

传感器连接

Vcc 引脚接 5V

DATA 引脚接 WiringPi 编码 7

GND 引脚接树莓派的 GND

安装 WiringPi

这里使用了 WiringPi 库,如果已经安装过可以跳过这一步。

sudo apt-get update

#如果之前没有安装过 git,执行下面的命令安装一下

sudo apt-get install git-core

#下载 wiringPi

git clone https://github.com/WiringPi/WiringPi

#编译 wiringPi

cd WiringPi

sudo ./build

编程

源代码如下,保存为 dht11.c。

#include

#include

#include

typedef unsigned char uint8;

typedef unsigned int uint16;

typedef unsigned long uint32;

#define HIGH_TIME 32

int pinNumber = 7;

uint32 databuf;

uint8 readSensorData(void)

{

uint8 crc;

uint8 i;

pinMode(pinNumber, OUTPUT); // set mode to output

digitalWrite(pinNumber, 0); // output a high level

delay(25);

digitalWrite(pinNumber, 1); // output a low level

pinMode(pinNumber, INPUT); // set mode to input

pullUpDnControl(pinNumber, PUD_UP);

delayMicroseconds(27);

if (digitalRead(pinNumber) == 0) //SENSOR ANS

{

while (!digitalRead(pinNumber))

; //wait to high

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

{

while (digitalRead(pinNumber))

; //data clock start

while (!digitalRead(pinNumber))

; //data start

delayMicroseconds(HIGH_TIME);

databuf *= 2;

if (digitalRead(pinNumber) == 1) //1

{

databuf++;

}

}

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

{

while (digitalRead(pinNumber))

; //data clock start

while (!digitalRead(pinNumber))

; //data start

delayMicroseconds(HIGH_TIME);

crc *= 2;

if (digitalRead(pinNumber) == 1) //1

{

crc++;

}

}

return 1;

}

else

{

return 0;

}

}

int main(void)

{

printf("PIN:%d\n", pinNumber);

if (-1 == wiringPiSetup()) {

printf("Setup wiringPi failed!");

return 1;

}

pinMode(pinNumber, OUTPUT); // set mode to output

digitalWrite(pinNumber, 1); // output a high level

printf("Starting...\n");

while (1)

{

pinMode(pinNumber, OUTPUT); // set mode to output

digitalWrite(pinNumber, 1); // output a high level

delay(3000);

if (readSensorData())

{

printf("Sensor data read ok!\n");

printf("RH:%d.%d\n", (databuf >> 24) & 0xff, (databuf >> 16) & 0xff);

printf("TMP:%d.%d\n", (databuf >> 8) & 0xff, databuf & 0xff);

databuf = 0;

}

else

{

printf("Sensor dosent ans!\n");

databuf = 0;

}

}

return 0;

}

编译程序并运行

gcc -Wall -o dht11 dht11.c -lwiringPi

sudo ./dht11

忽略编译过程中的警告。运行之后将出现温湿度读数。

dht11传感器c语言程序,树莓派 DHT11 温湿度传感器读取 C 语言版相关推荐

  1. 总结——调试STM32F103ZET6及外围传感器_电路图设计问题+SHT10温湿度传感器

    总结--调试STM32F103ZET6及外围传感器_电路图设计问题+SHT10温湿度传感器http://blog.csdn.net/gsh_hello_world/article/details/53 ...

  2. DSB算法C语言程序,单片机中使用DSB温度传感器C语言程序.doc

    单片机中使用DSB温度传感器C语言程序 单片机中使用DS18B20温度传感器C语言程序(参考1) /************************************************** ...

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

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

  4. 树莓派采集温湿度传感器Si7021

    文章目录 1.前言 2.Si7021 3.在树莓派移植Si7021库 1.前言 Si7021是一款微型数字温湿度传感器,其通过IIC与外部处理器通信,常用于采集环境信息..本文首先介绍Si7021芯片 ...

  5. c语言程序执行时无法输入字符串,C语言程序设计中键盘输入数据的方法分析

    1. 引言 C语言程序设计是一门实践性很强的语言课程,在程序设计过程中经常需要从键盘输入所需要的数据.C语言没有专门的输入语句,可以调用C语言编译系统提供的函数库中的库函数来实现.有些程序虽然调试成功 ...

  6. c语言程序竞赛,2015年江西理工大学C语言程序设计竞赛(初级组)

    JankTao相亲记 解法:排序 #include #include #include #include #include #include #include #include using names ...

  7. c语言程序课程设计问题,矩形问题-C语言程序课程设课程设计(论文).doc

    矩形问题-C语言程序课程设课程设计(论文) PAGE PAGE \* MERGEFORMAT 20课程设计(论文)题 目 名 称 矩形问题 课 程 名 称 C语言程序课程设计 学 生 姓 名 xxx ...

  8. 在c语言程序中无论是整数还是实数,C语言基础题及参考答案

    C 第一单元程序设计和C语言 一.选择题 1.C语言的基本构成单位是: A . A. 函数 B. 函数和过程 C. 超文本过程 D. 子程序 2.一个C语言程序总是从 B 开始执行. A. 主过程 B ...

  9. c语言程序女设计教学效果分析,C语言程序设计的教学论文

    C语言程序设计的教学论文 1C语言程序设计教学方法研究 1.1理论教学 对于大多数课程而言,从宏观上将课程知识点及其关联讲授给学生非常必要,这便于学生更加系统深刻地理解所学内容.作为教材讲解C语言程序 ...

  10. c语言程序可以从任何函数开始执行,C语言-基本选择题及参考答案

    精品文档 . 计算机程序设计基础(C语言) 单项选择练习题 一.基本概念 1. C语言程序是由 C 构成的. A)一些可执行语言 B)main函数 C)函数 D)包含文件中的第一个函数 2.(A)是构 ...

最新文章

  1. 第四范式变“硬”,联手浪潮推出AI一体机,挑战BAT
  2. Java的Json解析包FastJson使用
  3. 青岛大学计算机专硕和学硕,【2020】【青岛大学】【学硕646】复习经验
  4. 用Git向gitHub上传项目
  5. 图片插入mysql数据库_图片如何存入数据库?
  6. 【Elasticsearch】Elasticsearch自定义评分的N种方法
  7. 当点击ListView的列头时,对ListView排序
  8. bzoj 4017: 小Q的无敌异或(线段树)
  9. 2013计算机应用基础试题及答案,《计算机应用基础》2013年9月统考模拟练习题(完整试卷版含答案)...
  10. git submodule使用的笔记
  11. Node.js的require()的工作原理
  12. 【BZOJ 2243 SDOI2011】染色【树链剖分】
  13. python写Bicubic方法,跑数据集Set5和Set14,保存PSNR和SSIM的值
  14. 使用Web3j(JAVA)开发ETH钱包-1
  15. 计算机表格折线图添加图例,怎么用EXCEL表格数据做折线图-如何用excel做折线图添加系列...
  16. “空城计”不灵了,产城融合才有未来
  17. alertmanager集群搭建
  18. 微信邮箱怎么弄怎么写?手机可以移动办公吗?
  19. 基于TTP223金属触摸开关电路模块原理图和PCB工程文件
  20. 【全局盘点】华为云政企全栈技术创新能力图谱

热门文章

  1. 苏州企业如何免费办理软件著作权
  2. 终于把AI换脸的原理搞清了
  3. 点云匹配介绍与ICP算法
  4. 怎么在bios里设置光驱启动 bios设置光驱启动图文教程
  5. 什么是 NAS? 为什么要用 NAS?有什么好玩的功能?
  6. python tcp socket.connect() [Errno 56] Socket is already connectedconnect
  7. Pyke 逻辑编程入门(16):知识库之“问题库”
  8. python learning note
  9. IOS 13陀螺仪监控
  10. java导出可运行文件格式,|java导出excel,excel打不开,报文件格式无效,怎么解决!...