2586| 0
|
SHT31-F+python-smbus-温湿度测试仪 |
文接上文SHT31-F+树莓派4B---1初识IIC,硬件与上篇文章相同。 https://mc.dfrobot.com.cn/thread-305721-1-1.html (出处: DF创客社区 - 分享创造的喜悦) 本次作品为温湿度测试仪 一、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 2.参考代码 [mw_shl_code=python,false] # -*- 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, [0x06]) 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[0] * 256 + data[1] cTemp = -45 + (175 * temp / 65535.0) fTemp = -49 + (315 * temp / 65535.0) humidity = 100 * (data[3] * 256 + data[4]) / 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()[/mw_shl_code] 二、硬件连接 打印机USB连接树莓派;树莓派插扩展板;SHT31接IIC口;按钮接5号口; 三、测试程序 附件为模块参数文档(中、英文版) SHT3x.rar |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed