dht11传感器c语言程序,树莓派 DHT11 温湿度传感器读取 C 语言版
我们之前介绍过三种读取 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 语言版相关推荐
- 总结——调试STM32F103ZET6及外围传感器_电路图设计问题+SHT10温湿度传感器
总结--调试STM32F103ZET6及外围传感器_电路图设计问题+SHT10温湿度传感器http://blog.csdn.net/gsh_hello_world/article/details/53 ...
- DSB算法C语言程序,单片机中使用DSB温度传感器C语言程序.doc
单片机中使用DSB温度传感器C语言程序 单片机中使用DS18B20温度传感器C语言程序(参考1) /************************************************** ...
- 树莓派控制温湿度传感器DHT11
2019独角兽企业重金招聘Python工程师标准>>> 小π因为好几次断电之前没有关掉系统,导致系统老是起不来.无奈只好重写了SD卡.装好后前天晚上把一个温湿度传感器(DHT11)接 ...
- 树莓派采集温湿度传感器Si7021
文章目录 1.前言 2.Si7021 3.在树莓派移植Si7021库 1.前言 Si7021是一款微型数字温湿度传感器,其通过IIC与外部处理器通信,常用于采集环境信息..本文首先介绍Si7021芯片 ...
- c语言程序执行时无法输入字符串,C语言程序设计中键盘输入数据的方法分析
1. 引言 C语言程序设计是一门实践性很强的语言课程,在程序设计过程中经常需要从键盘输入所需要的数据.C语言没有专门的输入语句,可以调用C语言编译系统提供的函数库中的库函数来实现.有些程序虽然调试成功 ...
- c语言程序竞赛,2015年江西理工大学C语言程序设计竞赛(初级组)
JankTao相亲记 解法:排序 #include #include #include #include #include #include #include #include using names ...
- c语言程序课程设计问题,矩形问题-C语言程序课程设课程设计(论文).doc
矩形问题-C语言程序课程设课程设计(论文) PAGE PAGE \* MERGEFORMAT 20课程设计(论文)题 目 名 称 矩形问题 课 程 名 称 C语言程序课程设计 学 生 姓 名 xxx ...
- 在c语言程序中无论是整数还是实数,C语言基础题及参考答案
C 第一单元程序设计和C语言 一.选择题 1.C语言的基本构成单位是: A . A. 函数 B. 函数和过程 C. 超文本过程 D. 子程序 2.一个C语言程序总是从 B 开始执行. A. 主过程 B ...
- c语言程序女设计教学效果分析,C语言程序设计的教学论文
C语言程序设计的教学论文 1C语言程序设计教学方法研究 1.1理论教学 对于大多数课程而言,从宏观上将课程知识点及其关联讲授给学生非常必要,这便于学生更加系统深刻地理解所学内容.作为教材讲解C语言程序 ...
- c语言程序可以从任何函数开始执行,C语言-基本选择题及参考答案
精品文档 . 计算机程序设计基础(C语言) 单项选择练习题 一.基本概念 1. C语言程序是由 C 构成的. A)一些可执行语言 B)main函数 C)函数 D)包含文件中的第一个函数 2.(A)是构 ...
最新文章
- 第四范式变“硬”,联手浪潮推出AI一体机,挑战BAT
- Java的Json解析包FastJson使用
- 青岛大学计算机专硕和学硕,【2020】【青岛大学】【学硕646】复习经验
- 用Git向gitHub上传项目
- 图片插入mysql数据库_图片如何存入数据库?
- 【Elasticsearch】Elasticsearch自定义评分的N种方法
- 当点击ListView的列头时,对ListView排序
- bzoj 4017: 小Q的无敌异或(线段树)
- 2013计算机应用基础试题及答案,《计算机应用基础》2013年9月统考模拟练习题(完整试卷版含答案)...
- git submodule使用的笔记
- Node.js的require()的工作原理
- 【BZOJ 2243 SDOI2011】染色【树链剖分】
- python写Bicubic方法,跑数据集Set5和Set14,保存PSNR和SSIM的值
- 使用Web3j(JAVA)开发ETH钱包-1
- 计算机表格折线图添加图例,怎么用EXCEL表格数据做折线图-如何用excel做折线图添加系列...
- “空城计”不灵了,产城融合才有未来
- alertmanager集群搭建
- 微信邮箱怎么弄怎么写?手机可以移动办公吗?
- 基于TTP223金属触摸开关电路模块原理图和PCB工程文件
- 【全局盘点】华为云政企全栈技术创新能力图谱
热门文章
- 苏州企业如何免费办理软件著作权
- 终于把AI换脸的原理搞清了
- 点云匹配介绍与ICP算法
- 怎么在bios里设置光驱启动 bios设置光驱启动图文教程
- 什么是 NAS? 为什么要用 NAS?有什么好玩的功能?
- python tcp socket.connect() [Errno 56] Socket is already connectedconnect
- Pyke 逻辑编程入门(16):知识库之“问题库”
- python learning note
- IOS 13陀螺仪监控
- java导出可运行文件格式,|java导出excel,excel打不开,报文件格式无效,怎么解决!...