如何以最简单的方式获取传感器数据?

ZLG致远电子
关注

传感器作为各个领域最重要的设备之一,产品种类之多,应用领域之广,随着“智能时代”的到来,传感器的使用将发挥更加关键的作用。那么,要如何以最简单,最高效的方式使用这些种类繁多,操作复杂的传感器呢?本文将为大家一一介绍。

传感器作为一种检测装置,它的应用早已渗透到诸如工业生产、宇宙探索、海洋探测、环境保护、资源调查、医学诊断、生物工程、甚至文物保护等等极其之广泛的领域。可以毫不夸张地说,从茫茫的太空,到浩瀚的海洋,以及各种复杂的工程系统,几乎每一个现代化项目,都离不开传感器。

目前,市面上已经存在大量各种类型,各种型号,不同厂家生产的各种传感器,例如,温度、湿度、电压、电流、压强、光照、加速度、角速度等等。它们的应用场景、产品参数、使用方法都不尽相同,这往往使许多项目开发人员在使用传感器时举步维艰:添加一个传感器,就要编写对应的驱动,提供一套访问这个传感器的接口。

通常情况下,在一个复杂的系统中,传感器往往不止一个,可能存在几个或几十个甚至更多不同种类的传感器,若这些传感器的使用接口都不相同,那么可想而知,软件方面的工作量和复杂度又会有多大?无形中又增加了很大的开发难度。不仅如此,若基于多种传感器开发的应用程序想跨平台复用,而底层各个传感器的接口却千奇百怪,那么,这样的工作量和复杂度又会上升到什么程度?

为了解决这些问题,AWorks定义了通用的传感器接口,适用于各式各样的传感器,只要是挂载在AWorks系统中的传感器,都可以通过相同的操作接口来访问。同时,只要是基于这些通用接口开发的应用程序,都不会与具体的硬件设备绑定,换句话说,底层更换使用不同型号的传感器,对应用程序不会造成影响,应用程序可以不做任何改动。

从功能上看,传感器实现了对真实世界中某种物理信号(温度、湿度、气压等)的采集,在使用传感器时,最重要的操作就是从传感器中获取出相应的数据。接下来,进一步介绍如何通过接口获取传感器数据。

1、传感器通道ID

在介绍接口的使用方法之前,需要简单了解一个概念,AWorks之所以能够实现使用一套相同的接口访问所有类型的传感器,是因为AWorks对系统中的传感器进行了统一的管理。为了实现对各式各样的传感器进行统一管理,在AWorks中,定义了“传感器通道”的抽象概念,一路传感器通道用于完成一路物理信号的采集,系统为每个传感器通道分配了一个唯一的ID。例如,若此时系统中存在三个传感器,分别为温湿度传感器HTS221(能为系统提供一路温度和一路湿度通道),三轴磁传感器LIS3MDL(能位系统提供X,Y,Z轴三路磁数据通道和一路温度通道)和光照传感器BH1730(能为系统提供一路光照度采集通道),则对应的ID分配范例详见表 1。

表1 传感器通道id分配

按照以上的传感器通道ID分配方式,理论上,系统中可以挂载无数个各种类型的传感器,新加入的传感器通道只需按照以上方式依次向后分配ID即可。通常情况下,该ID号的分配已经由系统完成,无需我们自行分配,我们只需简单知道当前系统中的有效ID号所对应的传感器通道类型即可。例如,当前AWorks系统中存在的传感器如表1所示,有三个传感器,ID号为0~6,下文中函数接口ID的使用将以此为例。

2、获取传感器数据

基于以上对传感器ID的描述,此时若想获取传感器的数据,只需在应用程序中调用获取传感器数据的函数接口即可,获取传感器数据的函数接口如下:

其中,id即为传感器通道ID号,p_val为存放对应ID的传感器数据。此处aw_sensor_val_t类型为一个结构体,只需知道它是一个保存传感器数据的变量即可。

基于此,获取系统中任意传感器通道的数据只需调用该接口即可,例如,每隔500ms获取一次温度采样数据的程序范例如下:

同样,若想获取光照度传感器采样数据,程序范例如下:

以此类推,只需要调用这一个相同的接口,便可以依次获取系统中所有传感器的数据。此时,或许有人会疑问,系统中那么多传感器,一个一个调用该接口,会不会显得繁琐?对于该问题,AWorks系统当然给出了答案,那就是提供同时获取多通道或者所有通道传感器数据的接口,该接口原型如下:

其中,p_ids为指向传感器通道id列表的指针;num表示通道的数目,即id列表的大小;p_buf指向用于存储各通道数据的缓存,缓存大小与num一致。基于该接口,可以同时获取多个或所有系统中传感器的采样数据,例如,每隔500ms获取当前表 1中所有的传感器通道采样数据的程序范例如下:

基于此,AWorks系统的传感器接口已经完美的实现了使用同种接口获取所有传感器采样数据的功能。此时,或许有人又会提出疑问,这两个接口采用的似乎都是轮询的方式获取传感器数据,若在效率要求较高的场合,调用该接口是不是不太好呢?再者说,如今的许多传感器都可以采用中断触发的方式获取数据,这样可以大大提高应用程序的效率,那么能不能实现这种功能呢?当然!AWorks同样提供了这种接口,而且接口的调用非常方便,简洁。接下来将为你一一揭秘。

声明: 本文由入驻OFweek维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。
侵权投诉

下载OFweek,一手掌握高科技全行业资讯

还不是OFweek会员,马上注册
打开app,查看更多精彩资讯 >
  • 长按识别二维码
  • 进入OFweek阅读全文
长按图片进行保存