2154|3

330

帖子

5

TA的资源

纯净的硅(中级)

楼主
 

【行空板 Python编程学习主控板】行空板+SCI 采集模块双剑合璧读取并呈现传感器数据 [复制链接]

DFrobot秋季发布会上,发布了一款新的设备,就是SCI采集模块,可以用于采集多种DFRobot出品的传感器的数据,而不用任何编程。

官方介绍:

SCI采集模块是一款多功能数据采集模块,可连接温湿度、大气压等常见的20余种传感器,并能将采集到的数据显示在板载屏幕中,此外SCI采集模块还集成了传感器自动识别、数据存储、RTC时钟、数据处理等探究实验中的常用功能。传感器数据可通过板载的屏幕进行显示和查看,板载16M存储空间,可将传感器数据实时存储下来,通过RTC时钟可为每条存储的数据打上精确时间标签,最后,SCI采集模块会将输出的数据格式标准化,接入任意传感器时,UNO等主控都可以使用同一个代码获取到传感器的数据。SCI采集模块极大的降低了传感器数据的获取难度,助力老师们更好的进行跨学科项目教学。

 

也就是说,SCI采集模块可以负责进行传感器的数据采集,然后对外能够以标准化的形式提供数据,而不用我们队传感器挨个进行处理了。

有这等好事?

试试就知道了。

在行空板上一试,果然好用,现在分享给大家。

 

一、认识SCI采集模块

首先,看一看这个SCI模块长啥样:

 

 

背面没啥好看的,主要看正面。

中间的OLED屏,可以显示读取的数据,左边是三个传感器接口,有三针AD的,也有4针用于I2C、UART的。右边是I2C接口,用于和其他控制板连接。上面的接口,是锂电池接口和Type-C接口。

 

这个模块的具体设备说明:

 

 

 

 

二、实物连线

然后,使用DFRobot提供的专用数据线(PH2.0转2.54),接上几个模块:

  • 土壤潮湿度传感器:接到3针模拟接口,Port1
  • SHT31数字温湿度传感器:接到I2c接口,Port2
  • 氧气浓度传感器:接到I2C接口,Port3

并将SCI模块的I2C数据输出接口,连接到行空板的I2C接口:

 

三、通电查看数据

给行空板上电,等行空板启动后,就会自动给SCI模块供电了,然后SCI模块启动,自动读取传感器的数据,并在OLED显示屏上呈现出来。

拉近一点镜头,详细看一下:

列出来的数据,具体如下:

  • 土壤潮湿度:实际读取值与潮湿度是成反比关系的
  • 温度(空气)
  • 湿度(空气)
  • 氧气浓度

到这里,可以看到,是不是非常的简单,方便,一接上,数据就出来了。

 

四、行空板读取数据

终于到行空板出场了!!!

要想在行空板上面,通过SCI模块读取数据,需要先安装DFRobot提供的专用数据读取库。

具体步骤如下:

# 升级pip
/usr/bin/python3 -m pip install --upgrade pip

# 升级pinpong库到最新版本,能够支持SCI采集模块
pip install -U pinpong

# 下载支持库
cd /root/
git clone https://gitee.com/liliang9693/ext-sci.git

# 拷贝sci扩展库
mkdir sci_test
cp ext-sci/python/libraries/dfrobot_rp2040_suab.py sci_test/

 

现在,专用库准备好了,就需要写程序来实际调用了。

参考官方提供的行空板读取SCI数据的例子:SCI采集模块,根据上面实际接入的传感器,最终的代码如下:

#  -*- coding: UTF-8 -*-

# Python
from dfrobot_rp2040_suab import *
from pinpong.board import Board
import time

Board().begin()
SCI1 = DFRobot_SUAB_IIC(addr=0x21)
while SCI1.begin() != 0:
    print("Initialization Sensor Universal Adapter Board failed.")
    time.sleep(1)
print("Initialization Sensor Universal Adapter Board done.")


while True:
    print("SCI数据读取:")
    O2 = SCI1.get_value0("O2").strip()
    O2_unit = SCI1.get_unit0("O2").strip()
    print("氧气浓度: %s %s" % (O2, O2_unit))

    Moisture = SCI1.get_value1(SCI1.eAD,"Moisture").strip()
    Moisture_unit = SCI1.get_unit1(SCI1.eAD,"Moisture").strip()
    print("土壤潮湿度:%s %s %%" % (Moisture, Moisture_unit))

    Temp_Air = SCI1.get_value1(SCI1.eI2C_UART1,"Temp_Air").strip()
    Temp_Air_unit = SCI1.get_unit1(SCI1.eI2C_UART1,"Temp_Air").strip()
    print("温度:%s %s ℃" % (Temp_Air, Temp_Air_unit))

    Humi_Air = SCI1.get_value1(SCI1.eI2C_UART1,"Humi_Air").strip()
    Humi_Air_unit = SCI1.get_unit1(SCI1.eI2C_UART1,"Humi_Air").strip()
    print("湿度:%s %s %%" % (Humi_Air, Humi_Air_unit))

    print("")
    # time.sleep(1)

 

上述代码逻辑如下:

  • 初始化板子:Board().begin()
  • 初始化SCI的I2C:SCI1 = DFRobot_SUAB_IIC(addr=0x21),此处0x21的地址,来自于SCI屏幕顶部显示的地址,需要对应正确
  • 启动SCI的I2C数据通讯:SCI1.begin()
  • 读取特定接口的数据:
    • SCI1.get_value0("O2"):直接读取指定数据标签的数据,需要是全局唯一的

    • SCI1.get_value1(SCI1.eAD,"Moisture"),读取指定传感器接口上,指定标签的数据,这里的eAD,表示模拟传感器接口

    • SCI1.get_value1(SCI1.eI2C_UART1,"Temp_Air").strip(),读取制定传感器接口上,指定标签的数据,这里的eI2C_UART1,表示I2C接口

    • SCI1.get_unit0("O2"):表示获取对应数值的单位符号

  • 打印读取的数据

将上述代码,保存为sci_test1.py,然后执行,即可读取到数据了:

注意:如果PinPong库没有更新,就不能正确读取数据,会出错。

 

另外,上述代码,也可以在在线管理界面的Jupyter中编写执行。

 

五、在行空板的屏幕上呈现传感器数据

光在命令行显示读取到的数据,还是不过瘾的,我们还要呈现从屏幕上。

结合行空板自身所带的Python扩展库提供的图形界面操作功能,可以非常方便的实现:

#  -*- coding: UTF-8 -*-

# MindPlus
# Python
from dfrobot_rp2040_suab import *
from pinpong.board import Board
from unihiker import GUI   #导入包
import time

gui=GUI()  #实例化GUI类

Board().begin()
SCI1 = DFRobot_SUAB_IIC(addr=0x21)
while SCI1.begin() != 0:
    print("Initialization Sensor Universal Adapter Board failed.")
    time.sleep(1)
print("Initialization Sensor Universal Adapter Board done.")

x_max = 240
y_max = 320
gui.draw_text(x=60, y=20, text='SCI数据读取')
gui.draw_text(x=0, y=80, text='氧气浓度:')
gui.draw_text(x=0, y=120, text='土壤湿度:')
gui.draw_text(x=0, y=160, text='温度:')
gui.draw_text(x=0, y=200, text='湿度:')

t1 = gui.draw_text(x=100, y=80, text='0')
t2 = gui.draw_text(x=100, y=120, text='0')
t3 = gui.draw_text(x=100, y=160, text='0')
t4 = gui.draw_text(x=100, y=200, text='0')

t5 = gui.draw_text(x=20, y=260, text='')

while True:
    print("SCI数据读取:")
    O2 = SCI1.get_value0("O2").strip()
    O2_unit = SCI1.get_unit0("O2").strip()
    print("氧气浓度: %s %s" % (O2, O2_unit))
    t1.config(text = "%s%%" % O2)

    Moisture = SCI1.get_value1(SCI1.eAD,"Moisture").strip()
    Moisture_unit = SCI1.get_unit1(SCI1.eAD,"Moisture").strip()
    print("土壤潮湿度:%s %s %%" % (Moisture, Moisture_unit))
    t2.config(text = "%s%%" % Moisture)

    Temp_Air = SCI1.get_value1(SCI1.eI2C_UART1,"Temp_Air").strip()
    Temp_Air_unit = SCI1.get_unit1(SCI1.eI2C_UART1,"Temp_Air").strip()
    print("温度:%s %s ℃" % (Temp_Air, Temp_Air_unit))
    t3.config(text = "%s℃" % Temp_Air)

    Humi_Air = SCI1.get_value1(SCI1.eI2C_UART1,"Humi_Air").strip()
    Humi_Air_unit = SCI1.get_unit1(SCI1.eI2C_UART1,"Humi_Air").strip()
    print("湿度:%s %s %%" % (Humi_Air, Humi_Air_unit))
    t4.config(text = "%s%%" % Humi_Air)

    t5.config(text = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))

    print("")
    # time.sleep(1)

 

在之前的代码中,我们添加了GUI操作的调用,涉及到的操作如下:

  • 引入GUI库:from unihiker import GUI
  • 实例化GUI对象:gui=GUI()
  • 输出各个数据标签的名称:gui.draw_text(x=60, y=20, text='SCI数据读取')
  • 输出各个数据的默认值并保留操作对象:t1 = gui.draw_text(x=100, y=80, text='0')
  • 更新数据操作对象的值为读取到的传感器的数据:t1.config(text = "%s%%" % O2)
  • 更新最底部的事件信息的值

将以上代码保存为sci_test2.py,然后执行,实际显示效果如下:

 
六、总结

通过以上的使用过程,可以看到,SCI模块真得非常有用,与行空板做搭档,真的是绝配,从此不用花费时间在怎么读取传感器数据上,让开发效率成倍的提升!!!

最新回复

感谢乔老师,这么有趣味的分享,涨见识了。  详情 回复 发表于 2022-11-8 14:53
点赞 关注

回复
举报

169

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

都是DF生态,连接起来就是方便啊

点评

对呀,不用多余的操心,专心专注具体事情的完成就好。  详情 回复 发表于 2022-11-11 11:51
 
 

回复

7044

帖子

11

TA的资源

版主

板凳
 
感谢乔老师,这么有趣味的分享,涨见识了。
 
 
 

回复

330

帖子

5

TA的资源

纯净的硅(中级)

4
 
jinyi7016 发表于 2022-11-8 10:58 都是DF生态,连接起来就是方便啊

对呀,不用多余的操心,专心专注具体事情的完成就好。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表