2439浏览
查看: 2439|回复: 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号口;
SHT31-F+python-smbus-温湿度测试仪图1

三、测试程序



附件为模块参数文档(中、英文版)
下载附件SHT3x.rar




您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail