【得捷电子Follow me第2期】+基于CircuitPython的温度传感器&光传感器
[复制链接]
本帖最后由 手下败酱 于 2023-10-21 10:55 编辑
温度传感器&光传感器的使用
温度传感器(MCP9808)
这款 I2C 数字温度传感器是我们见过的准确度更高的传感器之一,在传感器的 -40°C 至 +125°C 范围内的典型精度为 ±0.25°C,精度为 +0.0625°C。 它们适用于任何使用标准 i2c 的微控制器。有 3 个地址引脚,因此您最多可以将 8 个地址引脚连接到单个 I2C 总线,而不会发生地址冲突。最重要的是,宽电压范围使2.7V至5.5V电压可用!
- 简单的 I2C 控制
- 单个 I2C 总线上最多 8 个,地址引脚可调
- 在 -40°C 至 125°C 范围内的典型精度为 0.25°C(在 -20°C 至 100°C 范围内保证最大为 0.5°C)
- 0.0625°C 分辨率
- 2.7V至5.5V电源和逻辑电压范围
- 工作电流:200 μA(典型值)
引脚说明:
- VIN (仅接头版本的 VDD) - 这是正电源和逻辑电平引脚。它可以是2.7-5.5VDC,因此适合与3或5V逻辑一起使用。电源 VIN (VDD),具有您计划在 i2c 线路上使用的任何逻辑电平。
- GND - 这是接地电源和逻辑参考引脚。
- SCL - 这是 I2C 时钟引脚。板上已经有一个 10K 上拉,因此请将其直接连接到微控制器上的 i2c 主时钟引脚
- SDA - 这是 I2C 数据引脚。板上已经有一个 10K 上拉,因此请将其直接连接到微控制器上的 i2c 主数据引脚
- Alert - 这是来自MCP9808的中断/警报引脚。芯片具有一定的功能,可以在芯片温度高于或低于设定量时“提醒”您。可以触发此输出以告知你。它是集电极开路,因此如果要从该引脚读取信号,则需要使用上拉电阻。
- A0(以及 A1 和 A2)- 这些是地址选择引脚。由于在 i2c 总线上只能有一个具有给定地址的设备,因此如果要在共享 i2c 总线上放置多个MCP9808,则必须有一种方法来调整地址。A0/A1/A2引脚设置i2c地址的底部三位。电路板上有下拉电阻,因此将它们连接到VDD以将位设置为“1”。它们在通电时读取,因此解除电源并重新通电以重置地址
默认地址0x18,地址可以通过将 A0/A1/A2 “添加”到0x18
A0 设置值为 1 的最低位,A1 设置值为 2 的中间位,A2 设置值为 4 的高位。最终地址是 0x18 + A2 + A1 + A0。
因此,例如,如果 A2 与 VDD 绑定,A0 与 VDD 绑定,则地址为 0x18 + 4 + 1 = 0x1D。
如果只有 A0 绑定到 VDD,则地址为 0x18 + 1 = 0x19
如果只有 A1 绑定到 VDD,则地址为 0x18 + 2 = 0x1A
如果只有 A2 绑定到 VDD,则地址为 0x18 + 4 = 0x1C
接线方式:
那接下来就是代码了
import time #导入延时库
import board #导入板子的资源库
import adafruit_mcp9808 #导入模块的库
i2c = board.I2C() # 使用板载的SDA和SCL
mcp = adafruit_mcp9808.MCP9808(i2c) # 使用默认地址进行初始化:
while True:
tempC = mcp.temperature
tempF = tempC * 9 / 5 + 32 #转换成 F
print("Temperature: {} C {} F ".format(tempC, tempF))
time.sleep(4)
那如果把它添加到我的天气时钟上面呢:由于我往上面哈气,温度飙到了30多°
光传感器(LTR-329)
LTR-329 光传感器是一款简单且流行的低成本 I2C 数字光传感器,易于集成到您的项目中,以实现可靠和广泛的光测量。
LTR-329ALS-01 规格:
- I2C 接口,最高快速模式 @ 400kbit/s,地址0x29(无法更改)
- 超小型芯片LED封装
- 内置温度补偿电路
- 待机模式下的低有功功耗
- 工作温度范围为 -30 C 至 +70 C
- 符合 RoHS 和无卤素标准
- 接近人眼光谱响应的光传感器
- 对红外/紫外线光源的抗扰度
- 自动抑制 50 / 60 Hz 灯光闪烁
- 6 种动态范围,从 0.01 勒克斯到 64k 勒克斯
- 16 位有效分辨率
尺寸:25.4 毫米 x 17.7 毫米 x 4.6 毫米 / 1.0“ x 0.7” x 0.2”
引脚说明
- VIN - 这是电源引脚。要为电路板供电,请为其提供与微控制器逻辑电平相同的功率 - 使用5V。
- 3V - 这是稳压器的 3.3V 输出,如果您愿意,您可以从中获取高达 100mA 的电流。
- GND - GND
- SCL - I2C 时钟引脚,连接到微控制器 I2C 时钟线。该引脚经过电平转换,因此可以使用 3-5V 逻辑,并且该引脚上有一个 10K 上拉。
- SDA - I2C 数据引脚,连接到您的微控制器 I2C 数据线。该引脚经过电平转换,因此可以使用 3-5V 逻辑,并且该引脚上有一个 10K 上拉。
它的使用方法也非常简单
调用LTR329的库,再显示到TFT屏上
import time
import board
from adafruit_ltr329_ltr303 import LTR329 #导入外部库
import displayio
# 导入外部库adafruit_display_text里的lable,用于显示标签
from adafruit_display_text import label
# 导入外部库adafruit_bitmap_font里的lable
from adafruit_bitmap_font import bitmap_font
i2c = board.I2C() # 使用板载的SDA和SCL
time.sleep(0.1) # 传感器需要100毫秒才能“启动”上电
ltr329 = LTR329(i2c)
#使用封装好的TFT驱动
display = board.DISPLAY
#创建显示组
group = displayio.Group()
#加载字体
font = bitmap_font.load_font("/font/MYout-24.bdf")
#用于显示 光强度的参数
Visible_ = label.Label(font, text="00", color=0xFF0707)
Visible_.x = 5
Visible_.y = 18
group.append(Visible_)
#用于显示 红外线的参数
Infrared_ = label.Label(font, text="00", color=0xFF07C5)
Infrared_.x = 5
Infrared_.y = 68
group.append(Infrared_)
while True:
Visible= ltr329.visible_plus_ir_light
Infrared=ltr329.ir_light
Visible_.text="Visible: %d" %(Visible)
Infrared_.text="Infrared: %d" %(Infrared)
print("Visible + IR:", ltr329.visible_plus_ir_light)
print("Infrared :", ltr329.ir_light)
print()
display.show(group)
time.sleep(0.5) # sleep0.5 S
效果视频:
VID_20231020_200339
上面的源码都可以直接使用只不过需要加载相应的库到你的文件里面
|