本次实验测试基于I2C接口的温湿度传感器SHT20模块的读取

树莓派i2c总线使用 及 i2c-tools python-smbus 的安装

1/修改树莓派的配置文件使能I2C,通过nano编辑器修改raspi-blacklist.conf 文件内容

指令:sudo nano /etc/modprobe.d/raspi-blacklist.conf

写入如下:

# blacklist spi and i2c by default (many users don't need them)
blacklist spi-bcm2708
blacklist i2c-bcm2708

 

2/打开/etc/modules ,在文件结尾加上 i2c-devi2c-bcm2708

指令:sudo nano /etc/modules

写入如下:

snd-bcm2835
i2c-bcm2708
i2c-dev

 

3/更新一次包列表

指令:sudo apt-get update

 

4/安装 i2c-tools工具与python-smbus

指令:sudo apt-get install i2c-tools python-smbus

 

i2c-tools包含如下命令:

i2cdetect  i2cdump    i2cget     i2cset

通过raspi-config打开树莓派I2C,执行i2cdetect -l查看:

 

5/之后reboot,重启后千万记得打开i2c接口

否则无法找到i2c地址,出现如下错误: 

Could not open file /dev/i2c-1' or/dev/i2c/1: No such file or director

 

6/查看挂载的I2C设备

指令:sudo i2cdetect -y 1

 

pi@raspberrypi:~ $ sudo i2cdetect -y 1

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f

00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 

10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

70: -- -- -- -- -- -- -- --   

 

打开i2c总线方法:

 

指令:sudo raspi-config

 

选择: 5 Interfacing Options  Configure connections to peripherals         

 

 然后:P5 I2C         Enable/Disable automatic loading of I2C kernel module  

 

最后:Would you like the ARM I2C interface to be enabled?

 

         yes

 
以上I2C的硬件配置好以后 开始Python的软件调试
具体代码如下:
vim SHT20.py
 

#!/usr/bin/python

#-*-coding:utf-8-*-

 

import smbus

import time

 

eSHT2xAddress = 0x40

eTempHoldCmd= 0xE3

eRHumidityHoldCmd= 0xE5

eTempNoHoldCmd= 0xF3

eRHumidityNoHoldCmd= 0xF5

writeUserRegister= 0xE6

readUserRegister= 0xE7

softReset= 0xFE 

bus = smbus.SMBus(1)

 

#******************************************************************************

#* Global Functions

#******************************************************************************/

 

#**********************************************************

#* GetHumidity

#*  Gets the current humidity from the sensor.

#*

#* @return float - The relative humidity in %RH

#**********************************************************/

def getRHumidity():

    return (-6.0 + 125.0 / 65536.0 * float(readSensor(eRHumidityNoHoldCmd)))

 

#**********************************************************

#* GetTemperature

#*  Gets the current temperature from the sensor.

#*

#* @return float - The temperature in Deg C

#**********************************************************/

def getTemperature():

    return (-46.85 + 175.72 / 65536.0 * float(readSensor(eTempNoHoldCmd)))

 

#*****************************************************************************

#* Private Functions

#******************************************************************************/

def readSensor(command):

    bus.write_quick(eSHT2xAddress)

    bus.write_byte(eSHT2xAddress,command)

    time.sleep(0.1)

    result =(bus.read_byte(eSHT2xAddress)<<8)

    result += bus.read_byte(eSHT2xAddress)

    result &= ~0x0003    # clear two low bits (status bits)(0x0003=00000000 00000011 =>~0x0003=11111111 11111100=> &=xxxxxxxx xxxxxx00)

    #print result

    return result

 

HR=getRHumidity()

T=getTemperature()

 

print "H=%0.2f"%(HR)

print "T=%0.2f"%(T)

 

 

SyntaxError: Non-ASCII character '\xe2' in file意思是说,在文件中存在非ASCII字符;(在网络上粘贴复制的时候容易报错)

ASCII是8位即一个字符,一共256个字符,随着计算机的发展,现在已经用到2个或者4个字符;

建议在文件头追加:

 

#!/usr/bin/python

 

#-*-coding:utf-8-*-

 

最后执行:

pi@raspberrypi:~/Desktop $ python SHT20.py 

H=24.25

T=22.87

 

测试通过