基于树莓派3B SHT20温湿度采样

在学习SHT20温湿度采样之前,我们应该先要了解一下什么是I2C协议,对于I2C的简单介绍,参考我之前写的博客:
https://blog.csdn.net/makunIT/article/details/106996356

一、硬件准备与连接

硬件准备:树莓派3B、SHT20传感器模块、杜邦线4根(母头对母头)
接线方式:
在这里插入图片描述
不懂树莓派引脚的顺序去百度一下,有很多的回答,SHT20的引脚的定义看下图:
在这里插入图片描述
2、使能I2C 的驱动
远程登录树莓派后,输入 sudo raspi-config后,选择5.Interfacing Options 选择P5 I2C 选择 是,如下图所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以上就完成了I2C驱动的使能,接下来我们检查I2C是否开启网络:使用命令 lsmod。

如果列表中出现2c_bcm2835 i2c_dev这两个之后就证明开启成功。如下图。
在这里插入图片描述
在这里插入图片描述
3、测试I2C并确认传感器地址
执行 i2cdetect -y 1 来确认I2C连接传感器是否成功(图中0x40是本人SHT20的地址,每个人的传感器地址不一定相同,这点要注意)
在这里插入图片描述

二、编写c语言采样温湿度程序

/*********************************************************************************
 *      Copyright:  (C) 2020 makun<1394987689@qq.com>
 *                  All rights reserved.
 *
 *       Filename:  sht20.c
 *    Description:  This file 
 *                 
 *        Version:  1.0.0(2020年07月08日)
 *         Author:  makun <1394987689@qq.com>
 *      ChangeLog:  1, Release initial version on "2020年07月08日 23时17分49秒"
 *                 
 ********************************************************************************/

#include <stdio.h> 
#include <fcntl.h> 
#include <unistd.h> 
#include <sys/ioctl.h> 
#include <linux/types.h> 
#include <sys/stat.h> 
#include <linux/i2c.h> 
#include <linux/i2c-dev.h> 
#include <stdio.h> 
#include <stdlib.h>
#include <sys/types.h> 
#include <string.h> 
#include <stdint.h> 
#include <time.h> 
#include <errno.h> 
#include <string.h>
#define SOFTRESET                        0xFE 
#define TRIGGER_TEMPERATURE_NO_HOLD      0xF3   //监测温度
#define TRIGGER_HUMIDITY_NO_HOLD         0xF5   //监测湿度
//#define I2C_API_IOCTL  /* Use I2C userspace driver ioctl API */
 #define I2C_API_RDWR /* Use I2C userspace driver read/write API */
 
static inline void msleep(unsigned long ms); 
static inline void dump_buf(const char *prompt, uint8_t *buf, int size); 
int sht2x_init(void); int sht2x_softreset(int fd); 
int sht2x_get_serialnumber(int fd, uint8_t *serialnumber, int size); 
int sht2x_get_temp_humidity(int fd, float *temp, float *rh); 

int main(int argc, char **argv) 
{
           
        int          fd;        
        float        temp;        
        
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值