python+树莓派+红外测温

本文介绍了如何在树莓派上配置和使用IIC总线,连接并检测MLX90614红外传感器。通过安装i2c-tools和python-smbus库,开启I2C接口,读取传感器的温度数据。提供了MLX90614类的Python代码示例,用于获取环境和物体温度。
摘要由CSDN通过智能技术生成

【只作为资源备份,无其他用途】
【原文链接:https://blog.csdn.net/Hao_ge_666/article/details/117170782】

IIC(Inter-Integrated Circuit)其实是IICBus简称,所以中文应该叫集成电路总线。
包括两个SDA和SCL,SDA是串行数据线,SCL是串行时钟线,IIC工作方式为半双工。
可以看到MLX90614有四个引脚,vcc接3.3v,GND接地,SDA和SCL分别对应树莓派相应接口(见下图)。

在这里插入图片描述

接好线之后

首先安装IIC库(这个一般树莓派操作系统自带)

sudo apt install i2c-tools
再装专门为python的smbus

sudo apt install python-smbus
安完上面两个,就可以打开IIC

sudo raspi-config
选择5 interface options,然后选择P5 I2C,打开这一项

之后就可以查看模块的地址了(下面代码如果运行不了,自己加管理员权限sudo)

i2cdetect -y -a 1
如果树莓派SDA和SCL接的是SDA.1和SCL.1,那么模块地址就是0*5a,如图

这样就说明检测到了模块,地址为0*5a

代码:

import smbus
from time import sleep

class MLX90614():

MLX90614_RAWIR1=0x04
MLX90614_RAWIR2=0x05
MLX90614_TA=0x06
MLX90614_TOBJ1=0x07
MLX90614_TOBJ2=0x08

MLX90614_TOMAX=0x20
MLX90614_TOMIN=0x21
MLX90614_PWMCTRL=0x22
MLX90614_TARANGE=0x23
MLX90614_EMISS=0x24
MLX90614_CONFIG=0x25
MLX90614_ADDR=0x0E
MLX90614_ID1=0x3C
MLX90614_ID2=0x3D
MLX90614_ID3=0x3E
MLX90614_ID4=0x3F

comm_retries = 5
comm_sleep_amount = 0.1

def __init__(self, address=0x5a, bus_num=1):
    self.bus_num = bus_num
    self.address = address
    self.bus = smbus.SMBus(bus=bus_num)

def read_reg(self, reg_addr):
    err = None
    for i in range(self.comm_retries):
        try:
            return self.bus.read_word_data(self.address, reg_addr)
        except IOError as e:
            err = e
            #"Rate limiting" - sleeping to prevent problems with sensor
            #when requesting data too quickly
            sleep(self.comm_sleep_amount)
    #By this time, we made a couple requests and the sensor didn't respond
    #(judging by the fact we haven't returned from this function yet)
    #So let's just re-raise the last IOError we got
    raise err

def data_to_temp(self, data):
    temp = (data*0.02) - 273.15
    return temp

def get_amb_temp(self):
    data = self.read_reg(self.MLX90614_TA)
    return self.data_to_temp(data)

def get_obj_temp(self):
    data = self.read_reg(self.MLX90614_TOBJ1)
    return self.data_to_temp(data)

if name == “main”:
sensor = MLX90614()
print(sensor.get_amb_temp())
print(sensor.get_obj_temp())

测试example.py

from mlx90614 import MLX90614
thermometer_address = 0x5a
thermometer = MLX90614(thermometer_address)
print thermometer.get_amb_temp()
print thermometer.get_obj_temp()

  • 2
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值