在学习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;