SHT31-F+python-smbus-温湿度测试仪
文接上文SHT31-F+树莓派4B---1初识IIC,硬件与上篇文章相同。
https://mc.dfrobot.com.cn/thread-305721-1-1.html
(出处: DF创客社区 - 分享创造的喜悦)
本次作品为温湿度测试仪
https://v.youku.com/v_show/id_XNDcxMDE2MjMxNg==.html
一、SMBUS小科普:
系统管理总线(SMBus)是一个两线接口。通过它,各设备之间以及设备与系统的其他部分之间可以互相通信。它基于I2C操作原理。SMBus为系统和电源管理相关的任务提供一条控制总线。一个系统利用SMBus可以和多个设备互传信息,而不需使用独立的控制线路。
系统管理总线(SMBus)标准涉及三类设备。从设备,接收或响应命令的设备。主设备,用来发布命令,产生时钟和终止发送的设备。主机,是一种专用的主设备,它提供与系统CPU的主接口。主机必须具有主-从机功能,并且必须支持SMBus通报协议。在一个系统里只允许有一个主机。
SMBUS与IIC的区别
SMBUS总线规范是基于I2C的总线规范。但与I2C总线规范也有一定的区别。
SMBUS与I2C总线之间在时序特性上存在一些差别。首先,SMBUS需要一定数据保持时间,而 I2C总线则是从内部延长数据保持时间。SMBUS具有超时功能,因此当SCL太低而超过35 ms时,从器件将复位正在进行的通信。相反,I2C采用硬件复位。SMBUS具有一种警报响应地址(ARA),因此当从器件产生一个中断时,它不会马上清除中断,而是一直保持到其收到一个由主器件发送的含有其地址的ARA为止。SMBUS工作频率从10kHz到最高100kHz。最低工作频率10kHz是由SMBUS超时功能决定的。
原文链接:https://blog.csdn.net/vito_bin/article/details/52845777
一、安装步骤
1.运行命令安装smbus工具
sudo apt-get updata
sudo apt-get install i2c-tools python-smbus
https://mc.dfrobot.com.cn/data/attachment/album/202006/04/090955wvjajla8o588v8bb.png
2.参考代码
# -*- coding: UTF-8 -*-
#本帖依照SHT30代码调整
from RPi import GPIO
import time
import os
import subprocess
import smbus
import time
#把查询打印功能封装到了函数中方便调用
def GETIIC():
# Get I2C bus
bus = smbus.SMBus(1)
# SHT30 address, 0x45(68);
#此处需注意核实设备的地址,使用前务必先查询;
bus.write_i2c_block_data(0x45, 0x2C, )
time.sleep(0.5)
# SHT30 address, 0x45(68)
# Read data back from 0x00(00), 6 bytes
# Temp MSB, Temp LSB, Temp CRC, Humididty MSB, Humidity LSB, Humidity CRC
data = bus.read_i2c_block_data(0x45, 0x00, 6)
# Convert the data;此处可参考技术文档
temp = data * 256 + data
cTemp = -45 + (175 * temp / 65535.0)
fTemp = -49 + (315 * temp / 65535.0)
humidity = 100 * (data * 256 + data) / 65535.0
#屏幕显示温湿度值
print ("Temperature in Celsius is : %.2f C" %cTemp)
print ("Temperature in Fahrenheit is : %.2f F" %fTemp)
print ("Relative Humidity is : %.2f %%RH" %humidity)
#打印温湿度;os.environ命令把变量赋给echo命令,subprocess.call调用echo实现打印
cs='-----------------------------'
cs2=' '
os.environ['tempc']=str(int(cTemp))
os.environ['tempf']=str(int(fTemp))
os.environ['humidity2']=str(int(humidity))
os.environ['cs']=str(cs)
os.environ['cs2']=str(cs2)
subprocess.call("echo $cs >/dev/ttyUSB0 ",shell=True)
subprocess.call("echo Temperature in Celsius is:$tempc C>/dev/ttyUSB0",shell=True)
subprocess.call("echo Temperature in Fahrenheitis:$tempf F >/dev/ttyUSB0",shell=True)
subprocess.call("echo Relative Humidity is:$humidity2 % >/dev/ttyUSB0",shell=True)
subprocess.call("echo $cs >/dev/ttyUSB0",shell=True)
subprocess.call("echo $cs2 >/dev/ttyUSB0",shell=True)
subprocess.call("echo $cs2 >/dev/ttyUSB0",shell=True)
GPIO.setmode(GPIO.BCM)
# 关闭警告
GPIO.setwarnings(False)
# 设置GPIO输入模式, 使用GPIO内置的下拉电阻, 即开关断开情况下输入为LOW
GPIO.setup(5, GPIO.IN)
try:
while True:
if (GPIO.input(5)==GPIO.LOW):
print('正在輸出打印結果!')
GETIIC()
time.sleep(0.3)
else :
print('請按按鈕開始測溫!')
time.sleep(0.3)
except Exception :
print('erorr')
GPIO.cleanup()
二、硬件连接
打印机USB连接树莓派;树莓派插扩展板;SHT31接IIC口;按钮接5号口;
三、测试程序
https://v.youku.com/v_show/id_XNDcwMDI2MTcyMA==.html?spm=a2hbt.13141534.0.13141534
https://v.youku.com/v_show/id_XNDcwOTQzNDEzNg==.html
附件为模块参数文档(中、英文版)
页:
[1]