Python之adafruit-circuitpython-mcp9808包语法、参数和实际应用案例
adafruit-circuitpython-mcp9808 是一个用于与 MCP9808 温度传感器通信的 CircuitPython 库,MCP9808 是一款高精度数字温度传感器。
·
Python 库 adafruit-circuitpython-mcp9808 详解
1. 功能介绍
adafruit-circuitpython-mcp9808 是一个用于与 MCP9808 温度传感器通信的 CircuitPython 库。MCP9808 是一款高精度数字温度传感器,具有以下特点:
- 测量范围:-40°C 至 +125°C
- 精度:±0.25°C(-20°C 至 +100°C 范围内)
- 支持 I2C 通信协议
- 低功耗设计,适合电池供电设备
该库提供了简单易用的接口,用于读取传感器数据、配置传感器参数(如分辨率、报警阈值等)。
2. 安装方法
通过 pip 安装:
pip install adafruit-circuitpython-mcp9808
对于 CircuitPython 设备(如 micro:bit、ESP32 等),需将库文件复制到设备的 lib 目录中。

3. 基本语法与参数
初始化传感器
import board
import adafruit_mcp9808
# 初始化 I2C 总线
i2c = board.I2C() # 使用默认 I2C 引脚
# 或指定特定引脚: i2c = board.STEMMA_I2C()
# 初始化 MCP9808 传感器
sensor = adafruit_mcp9808.MCP9808(i2c)
主要方法与属性
temperature: 读取当前温度(摄氏度)shutdown_wakeup(enable_shutdown): 进入/退出低功耗模式set_temp_limit(limit_type, temperature): 设置温度报警阈值limit_type: 可选MCP9808.UPPER_TEMP_LIMIT、MCP9808.LOWER_TEMP_LIMIT或MCP9808.CRITICAL_TEMP_LIMIT
resolution: 设置温度测量分辨率(0-3,对应 0.5°C 至 0.0625°C)
4. 实际应用案例
案例 1: 基础温度读取
import board
import adafruit_mcp9808
import time
i2c = board.I2C()
sensor = adafruit_mcp9808.MCP9808(i2c)
while True:
temp_c = sensor.temperature
temp_f = temp_c * 9 / 5 + 32
print(f"温度: {temp_c:.2f}°C / {temp_f:.2f}°F")
time.sleep(1)
案例 2: 调整测量分辨率
import board
import adafruit_mcp9808
i2c = board.I2C()
sensor = adafruit_mcp9808.MCP9808(i2c)
# 设置最高分辨率 (0.0625°C)
sensor.resolution = 3 # 0-3 可选,数值越大分辨率越高
print(f"当前分辨率: {0.5 / (2 ** sensor.resolution):.4f}°C")
print(f"温度: {sensor.temperature:.4f}°C")
案例 3: 温度报警阈值设置
import board
import adafruit_mcp9808
import time
i2c = board.I2C()
sensor = adafruit_mcp9808.MCP9808(i2c)
# 设置温度阈值
sensor.set_temp_limit(adafruit_mcp9808.MCP9808.UPPER_TEMP_LIMIT, 25.0) # 上限 25°C
sensor.set_temp_limit(adafruit_mcp9808.MCP9808.LOWER_TEMP_LIMIT, 20.0) # 下限 20°C
while True:
temp = sensor.temperature
print(f"温度: {temp:.2f}°C")
# 检查是否超出阈值
if sensor.temperature > sensor.upper_temp_limit:
print("警告: 温度超过上限!")
elif sensor.temperature < sensor.lower_temp_limit:
print("警告: 温度低于下限!")
time.sleep(1)
案例 4: 低功耗模式使用
import board
import adafruit_mcp9808
import time
i2c = board.I2C()
sensor = adafruit_mcp9808.MCP9808(i2c)
while True:
# 从低功耗模式唤醒
sensor.shutdown_wakeup(False)
# 等待传感器准备好
time.sleep(0.25)
# 读取温度
print(f"温度: {sensor.temperature:.2f}°C")
# 进入低功耗模式
sensor.shutdown_wakeup(True)
print("进入低功耗模式...")
# 休眠 10 秒
time.sleep(10)
案例 5: 数据记录到文件
import board
import adafruit_mcp9808
import time
from datetime import datetime
i2c = board.I2C()
sensor = adafruit_mcp9808.MCP9808(i2c)
# 记录数据到 CSV 文件
with open("temperature_log.csv", "a") as f:
# 写入表头(如果是新文件)
f.write("时间,温度(°C)\n")
try:
while True:
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
temp = sensor.temperature
log_entry = f"{now},{temp:.2f}\n"
f.write(log_entry)
print(log_entry.strip())
f.flush() # 确保数据立即写入文件
time.sleep(60) # 每分钟记录一次
except KeyboardInterrupt:
print("记录已停止")
案例 6: 多个传感器使用(不同 I2C 地址)
import board
import adafruit_mcp9808
import time
i2c = board.I2C()
# 假设两个传感器分别连接到地址 0x18 和 0x19
sensor1 = adafruit_mcp9808.MCP9808(i2c, address=0x18)
sensor2 = adafruit_mcp9808.MCP9808(i2c, address=0x19)
while True:
print(f"传感器 1: {sensor1.temperature:.2f}°C")
print(f"传感器 2: {sensor2.temperature:.2f}°C")
print("---")
time.sleep(2)
案例 7: 与 Raspberry Pi 结合的 Web 服务器
from flask import Flask
import board
import adafruit_mcp9808
app = Flask(__name__)
i2c = board.I2C()
sensor = adafruit_mcp9808.MCP9808(i2c)
@app.route('/')
def temperature():
temp_c = sensor.temperature
temp_f = temp_c * 9 / 5 + 32
return f"""
<h1>当前温度</h1>
<p>{temp_c:.2f} °C</p>
<p>{temp_f:.2f} °F</p>
"""
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080)
案例 8: 温度控制风扇
import board
import adafruit_mcp9808
import digitalio
import time
i2c = board.I2C()
sensor = adafruit_mcp9808.MCP9808(i2c)
# 假设风扇连接到 D5 引脚
fan = digitalio.DigitalInOut(board.D5)
fan.direction = digitalio.Direction.OUTPUT
fan.value = False # 初始关闭
THRESHOLD = 28.0 # 启动风扇的温度阈值
while True:
temp = sensor.temperature
print(f"温度: {temp:.2f}°C")
# 根据温度控制风扇
if temp > THRESHOLD and not fan.value:
fan.value = True
print("风扇已启动")
elif temp < THRESHOLD - 2 and fan.value: # 滞后 2°C 防止频繁开关
fan.value = False
print("风扇已关闭")
time.sleep(2)
5. 常见错误与解决方法
-
I2C 通信错误
- 错误信息:
OSError: [Errno 121] Remote I/O error - 可能原因: 接线错误、传感器未供电、I2C 地址冲突
- 解决方法: 检查接线、确保传感器供电正常、使用
i2cdetect命令确认设备地址
- 错误信息:
-
传感器未响应
- 错误信息:
RuntimeError: MCP9808 not found - 可能原因: 传感器未正确连接、地址不正确
- 解决方法: 重新检查硬件连接,确认使用正确的 I2C 地址
- 错误信息:
-
温度读数异常
- 可能原因: 传感器损坏、电磁干扰、分辨率设置不当
- 解决方法: 更换传感器、增加屏蔽、调整分辨率设置
-
导入错误
- 错误信息:
ModuleNotFoundError: No module named 'adafruit_mcp9808' - 解决方法: 确保已正确安装库,对于 CircuitPython 设备需将库文件放入
lib目录
- 错误信息:
6. 使用注意事项
-
接线规范
- 确保 VCC 电压正确(通常为 3.3V,部分模块支持 5V)
- SDA 和 SCL 引脚需正确连接到对应 I2C 总线引脚
- 建议在 I2C 总线上添加 4.7kΩ 上拉电阻
-
电源管理
- 在电池供电设备中,使用
shutdown_wakeup()方法减少功耗 - 避免传感器长时间工作在高温环境下
- 在电池供电设备中,使用
-
精度考虑
- 传感器需要预热时间才能达到最高精度
- 避免将传感器安装在热源附近或阳光直射处
- 高分辨率模式下测量时间更长
-
地址冲突
- MCP9808 默认地址为 0x18,可通过硬件引脚修改
- 多个传感器共存时需确保地址唯一
通过上述内容,你可以全面了解 adafruit-circuitpython-mcp9808 库的使用方法,并在实际项目中灵活应用 MCP9808 温度传感器。
《AI提示工程必知必会》为读者提供了丰富的AI提示工程知识与实战技能。《AI提示工程必知必会》主要内容包括各类提示词的应用,如问答式、指令式、状态类、建议式、安全类和感谢类提示词,以及如何通过实战演练掌握提示词的使用技巧;使用提示词进行文本摘要、改写重述、语法纠错、机器翻译等语言处理任务,以及在数据挖掘、程序开发等领域的应用;AI在绘画创作上的应用,百度文心一言和阿里通义大模型这两大智能平台的特性与功能,以及市场调研中提示词的实战应用。通过阅读《AI提示工程必知必会》,读者可掌握如何有效利用AI提示工程提升工作效率,创新工作流程,并在职场中脱颖而出。
更多推荐


所有评论(0)