传感器¶
外接传感器类别中包括了I2C初始化、光线传感器LTR308、气压传感器HP203B、温湿度传感器SHTC3、温湿度传感器AHT21、激光测距仪VL53L0X、SPI初始化、RFID读卡 读取卡号、RFID读卡 读取内容、RFID写卡 写入数据为、风火轮 触摸传感器、风火轮 触摸传感器 获取角度、超声波测距、初始化天气传感器、天气传感器 获取风向、天气传感器 获取风速、天气传感器 获取x秒内的降雨量等指令。
1. IIC初始化¶
1 2 3 4 5 6 7 | import board
import busio
import ltr308al
i2c_extend = busio.I2C(scl=board.IO1, sda=board.IO2, frequency=100000)
xsensor1 = ltr308al.LTR_308ALS(i2c_extend)
|
1.1 描述¶
IIC(Inter-Integrated Circuit)其实是IICBus简称,所以中文应该叫集成电路总线,它是一种串行通信总线。I2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL,所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。
使用IIC通信协议时可在通信线路上同时挂载多个设备,因此这里介绍的I2C指令即用于多个设备与主控器间的数据传输,关于IIC更多信息,请自行网上搜索下。 I2C初始化及使用I2C条指令需同时使用,首先,I2C初始化在实际使用中须关注SCL和SDA的两个参数的设置需要根据所连接的扩展口进行设置,例如,这里连接U1口时,SCL设置为1,SDA设置为2,注意顺序,先小后大;至于初始化后的实例名及频率一般默认即可。 其次,使用I2C时将上面初始化的实例名,并根据实际使用自定义改变“xsensor”这个字符串初始化为对应的传感器型号,以防冲突。
- 综上,需要注意的点有:①SCL、SDA的设置顺序,②xsensor重新命名 尤其使用多种传感器时,③选对目标传感器型号
- 以上三点错一个地方,程序都无法正常运行
以上光线传感器LTR308、气压传感器HP203B、温湿度传感器SHTC3、温湿度传感器AHT21、激光测距仪VL53L0X五种传感器的使用方式相同,都是在IIC初始化为对应的传感器后进行使用。 对于气压传感器HP203B、温湿度传感器SHTC3、温湿度传感器AHT21三种传感器,可根据使用需要进行进一步参数设置,直接单击三角按钮选择即可,此处不再赘述。
1.2 范例1¶
使用IIC通信连接外接一个光线传感器,以获取当前环境光照强度并通过串口每隔1秒打印一次,光线传感器连接至U4,IO11和IO12扩展接口上。
- 根据上面图形代码示例可以看到,②和③所设置及选定的字符,在获取光线传感器数值指令中是对应一致才能正常使用。
- 此外,该范例将xsensor自定义为ltr1,也就是说可在同一主控上接多个相同的传感器。
1.3 范例2¶
使用IIC通信连接外接两个光线传感器,以获取当前环境光照强度并通过串口每隔1秒打印一次,其中一个光线传感器连接至U4,IO11和IO12扩展接口上、另一个光线传感器连接至U1,IO1和IO2扩展接口上。
1.3 范例3¶
使用IIC通信连接外接一个光线传感器和一个气压传感器,以获取当前环境光照强度及气压强度值并通过串口每隔1秒打印一次,其中一个光线传感器连接至U4,IO11和IO12扩展接口上、另一个气压传感器连接至U1,IO1和IO2扩展接口上。
温湿度传感器SHTC3、温湿度传感器AHT21、激光测距仪VL53L0X三种传感器的用法与上相同,此处不再多述。
2. SPI初始化¶
SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,分别为:SCK、MOSI、MISO、CS,更多信息请网上自查。 * 在使用时,这里着重关注SCK、MOSI、MISO、CS四个管脚的设置即可,下面将以RFID外接传感器为例进一步说明SPI的使用。 射频识别(RFID)是 Radio Frequency Identification 的缩写,无线射频识别即射频识别技术(Radio Frequency Identification,RFID),是自动识别技术的一种,通过无线射频方式进行非接触双向数据通信,利用无线射频方式对记录媒体(电子标签或射频卡)进行读写,从而达到识别目标和数据交换的目的,更多信息自行网搜。
2.1 范例1¶
通过串口打印RFID所读取到的卡号。将RFID连接至U1扩展口,此时将SCK、MOSI、MISO、CS四个脚对应设置为1、2、4、5即可,亦可连接至U2(6、7、9、10)。 * 以上内容针对MixGo CE v3.5及以上版本,对于V3.5版本以下的RFID使用直接基于图形块上的管脚使用即可,无需修改管脚即可直接使用5、6、7、35。
1 2 3 4 5 6 7 8 9 10 11 12 | from board import *
import busio
import rc522
import digitalio
import time
spi = busio.SPI(clock=IO1, MOSI=IO2, MISO=IO4)
rfid = rc522.RC522(spi,digitalio.DigitalInOut(IO5))
while True:
print('rfid:', rfid.read_card(0, x="id"))
time.sleep(1)
|
2.2 范例1¶
读取并打印RFC卡某个位置的内容,一般情况下,新买的卡是空卡,所以读取内容之前需要先写入内容,内容存储位置大小,不同卡存在一定差异,根据需要从0位置逐步往上累积存储即可,当状态栏出现“Out of address range”内容时,即已超出可用最大位置。
- 写入和读取到的内容格式都为字符串格式,需要注意这点。
注意
- 超出存储位置报错详情:
- File “rc522.py”, line 247, in write_card
IndexError: Out of address range
3. 超声波测距¶
由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,更多信息自行网搜。
3.1 范例¶
将超声波模块连接至U4扩展口,通过串口每秒打印输出一次超声波测量到的距离数据。
1 2 3 4 5 6 7 8 9 10 | import hcsr04
from board import *
import time
sonar = hcsr04.HCSR04(trigger_pin=IO11, echo_pin=IO12)
while True:
print('distance:', sonar.distance())
time.sleep(1)
|
- 这里连接的是U4扩展口,因此设置tri为IO11、echo为IO12,连接至其他口时,自行修改即可。