传感器

外接传感器类别中包括了I2C初始化、光线传感器LTR308、气压传感器HP203B、温湿度传感器SHTC3、温湿度传感器AHT21、激光测距仪VL53L0X、SPI初始化、RFID读卡 读取卡号、RFID读卡 读取内容、RFID写卡 写入数据为、风火轮 触摸传感器、风火轮 触摸传感器 获取角度、超声波测距、初始化天气传感器、天气传感器 获取风向、天气传感器 获取风速、天气传感器 获取x秒内的降雨量等指令。

../../../_images/sensor2.png

1. IIC初始化

../../../_images/iic.png
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重新命名 尤其使用多种传感器时,③选对目标传感器型号
  • 以上三点错一个地方,程序都无法正常运行
../../../_images/sensor_iics.png

以上光线传感器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初始化

../../../_images/spi.png

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。

../../../_images/spi_rf.png
 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”内容时,即已超出可用最大位置。

../../../_images/nfc_1.png
  • 写入和读取到的内容格式都为字符串格式,需要注意这点。

注意

超出存储位置报错详情:
File “rc522.py”, line 247, in write_card

IndexError: Out of address range

3. 风火轮 触摸传感器

该传感器位于3.5版本以下的扩展板上(待测试)。

../../../_images/fhl.png

3. 超声波测距

../../../_images/distance.png

由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,更多信息自行网搜。

3.1 范例

将超声波模块连接至U4扩展口,通过串口每秒打印输出一次超声波测量到的距离数据。

../../../_images/distance_1.png
 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,连接至其他口时,自行修改即可。

4.天气信息获取

该模块指令待测试完善~

../../../_images/weather.png