0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何利用树莓派读取温度传感器MCP9808的数据呢?

得捷电子DigiKey 来源:得捷电子DigiKey 2023-12-28 09:24 次阅读

问:使用Raspberry Pi 从 MCP9808读取温度数据

MCP9808是一款温度传感器,采用I2C通信标准来传输连续轮询温度。它支持报警功能和待机模式,以便在需要时节省电力。在本说明文档中,我们将执行几个python命令来获取传感器的温度。

MCP9808上的I2C

Microchip将0x18用作此板上的主地址,借助芯片上的3个引脚来更改I2C地址冲突时的地址。当调用传感器中的任何寄存器时,该板应写入或获得双字节响应(MSB优先,LSB最后)。我使用的是Adafruit的分线板[1528-1032-ND],其中已经包含一些正偏电阻

需注意的寄存器:

0x010000000X00011111这里的X是配置中的备用位,默认为0,此为连续轮询模式。温度寄存器会不断更新,但存在功耗问题。将此位设为1将停止轮询并节省功耗。

0x05AAASMMMMLLLLLLLL该寄存器包含12位浮点温度,其中“A”为报警信息,“S”为符号位,“M”和“L”分别代表MSB和LSB。最终输出将显示为MMMMLLLL.LLLL。

请注意,在本说明中,我没有设置符号位和报警位,但如果你希望测量零下温度,则需要进行设置。

在Raspberry PI上的实现:

a39961e4-a4b0-11ee-8b88-92fbcf53809c.png

使用Raspberry Pi与I2C接口相连的好处在于Python终端的交互性。我使用的是在Raspbian发行版上启用了I2C的Raspberry Pi 4。确保你的GPIO支持3V3、GND、SDA并且SCL支持MCP9808上的正确引脚。在Raspbian中打开终端并执行以下三个命令:

python
from smbus import SMBus
bus = SMBus(1)

该命令将创建一个待连接的总线对象,该对象将反过来收集我们请求的I2C数据。接下来,向芯片询问它的温度数据:

temp_binary =format(bus.read_word_data(0x18, 0x05),‘016b’)

该bus.read_byte_data(Address, Register)将从传感器检索数据,我们使用封闭的format()函数将信息读取为二进制数,这样是为了使提取这两个字节变得简单。Python通常喜欢使用int或float,但这会造成妨碍,因为会由多个字节返回值。我们将按照[0:8][8:16]顺序将其编制索引,而MSB位于数组的后半部分。

a3be9ad6-a4b0-11ee-8b88-92fbcf53809c.png

计算输出:

我们可以利用以下函数来正确地获取输出值

defword_To_LSB_MSB(word):
return word[0:8], word[12 :16] // note that word indices [8,9,10,11] are notused in this example.

请查看下图,了解我们所需的输出。

a3dbd8b2-a4b0-11ee-8b88-92fbcf53809c.png

最后,将这二者结合在一起,再加上一些浮点运算即可。

LSB, MSB =word_To_LSB_MSB(temp_binary)
float(int(MSB + LSB,2)) / 16

a3f5ed42-a4b0-11ee-8b88-92fbcf53809c.png

除以16可将结果转为MMMMLLLL.LLLL,并获得十进制精度。注意,返回的结果应以摄氏为单位。在上图所示的情况下,我们从二进制浮动数00010111.0101计算出的温度是23.3125摄氏度。

完成后进入省电模式:

如果你希望在完成操作后关闭器件,只需将待机位设置为省电模式:

bus.write_byte_data(0x18,0x01,0b00000001)

由于只需更改MCP9809配置寄存器中的MSB,所以我们写入一个字节,不过我们将字符缩短了,因此不会更改寄存器中的LSB。

要使MCP9808恢复到完全工作功能状态,必须使传感器获得动力循环或使用寄存器的零刷新模式。

Microchip的规格书在此传感器的应用中仍然非常有用,如果你要使用MCP9808,请务必定期查询。注意,本文未涉及此传感器的一些重要功能,例如中断、负温度的符号位和待机工作。

使用的项:

Raspberry Pi:1690-RASPBERRYPI4B/4GB-ND

母头到公头的面包板线:1568-1511-ND

用于MCP9808的Adafruit分线板:1528-1032-ND






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 温度传感器
    +关注

    关注

    48

    文章

    2651

    浏览量

    154329
  • python
    +关注

    关注

    51

    文章

    4678

    浏览量

    83477
  • 树莓派
    +关注

    关注

    113

    文章

    1641

    浏览量

    104757
  • MSB
    MSB
    +关注

    关注

    0

    文章

    13

    浏览量

    8215
  • MCP
    MCP
    +关注

    关注

    0

    文章

    252

    浏览量

    13739

原文标题:攻略来了:用树莓派读取温度传感器MCP9808的数据

文章出处:【微信号:得捷电子DigiKey,微信公众号:得捷电子DigiKey】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    #硬声创作季 #树莓 树莓教程-18 数字温度传感器实验讲解

    数字温度传感器树莓
    水管工
    发布于 :2022年10月09日 03:13:27

    树莓3通过串口连接温度传感器求助!!!

    实验:将温度传感器VCCGND RXD TXD连接到树莓派上面的VCCGND TXD RXD, 通过Python编写的程序无法读取温度,
    发表于 10-03 22:07

    树莓 怎么读取串口数据

    各路大神们,请问一下,树莓怎么读取传感器的端口数据啊,用的是Python语言
    发表于 03-29 14:51

    树莓可以做什么?

    最大的一点就是可扩展性很强,用户可以在此基础上加上各种传感器。比如利用温度传感器来实现监控温度,单纯的检测
    发表于 05-02 17:20

    如何开发MCP9808温度传感器代码?

    你好,我试过几种方法来开发一个MCP9808温度传感器的代码,我有一个PIC 18 Pics的工作代码,所以我认为这对aPIC32来说没什么大不了的,但它确实如此。在我发送0x05读取
    发表于 08-07 13:20

    MCP9808温度数据显示在终端所需的转换例程

    你好!我目前与MCP9808通讯并读取温度。我把温度数据放入一个8位的名为Temperature的变量中。我想把温度数据(8位值)显示给终端
    发表于 03-12 13:59

    基于嵌入式树莓的远程温度监测系统设计

    摘 要:该文设计了基于嵌入式树莓为核心控制的远程温度监测系统,并通过温度传感器DS18B20
    发表于 12-20 06:56

    如何利用单总线去读取18B20温度传感器的ROM ID号

    如何利用单总线去读取18B20温度传感器的ROM ID号?求解
    发表于 02-16 07:49

    在Uno、Mega、ESP8266和ESP32上运行各种温度传感器,哪个温度传感器给出真实(实际)值?

    )、BME280 (3x)、TSYS01 (1x)、MCP9808 (1x),数据记录在 ThingsSpeak。传感器安装在室外,彼此靠近并防止日晒雨淋。附近没有热源或其他来源。传感器
    发表于 05-25 09:14

    树莓传感器教程

    树莓传感器教程
    发表于 10-07 07:13

    MCP9808最大精度的数字温度传感器

    Microchip Technology Inc.’s MCP9808 digital temperature sensor converts temperatures between -20
    发表于 09-28 15:59 13次下载
    <b class='flag-5'>MCP9808</b>最大精度的数字<b class='flag-5'>温度</b><b class='flag-5'>传感器</b>

    Microchip温度传感器系列产品

    Microchip是业界能提供最丰富温度传感器产品的供应商之一。本视频就Microchip各类温度传感器,着重介绍了 1)逻辑输出系列—MCP
    的头像 发表于 06-07 13:46 4802次阅读
    Microchip<b class='flag-5'>温度</b><b class='flag-5'>传感器</b>系列产品

    基于MCP9808带有±0.5°C 最高精度数字温度传感器

    Microchip Technology Inc. 的 MCP9808 数字温度传感器 可将-20°C和+100°C之间的温度转换为±0.25°C/±0.5°C (典型值 / 最大
    发表于 06-28 09:23 24次下载
    基于<b class='flag-5'>MCP9808</b>带有±0.5°C 最高精度数字<b class='flag-5'>温度</b><b class='flag-5'>传感器</b>

    高精度数字温度传感器的工作原理说明

    著名开源硬件商DFRobot新推出使用广泛的Fermion:MCP9808高精度数字温度传感器。它可检测-40°C和+125°C之间的温度,提供±0.25°C/±0.5°C(典型值 /
    的头像 发表于 03-17 16:10 3311次阅读
    高精度数字<b class='flag-5'>温度</b><b class='flag-5'>传感器</b>的工作原理说明

    树莓派 Pico内置温度传感器的应用

    树莓派 Pico 的 RP2040 微控制器内置了温度传感器,它可以通过第四个模拟数字转换器通道读取。像电位器一样,传感器的输出是一个可变的
    发表于 09-11 10:14 378次阅读