随着智能时代的到来,传感器的使用将发挥更关键的作用,作为各个领域最重要的设备之一。那么,如何以最简单、最有效的方式使用这些复杂的传感器呢?本文将逐一介绍。
传感器作为一种检测装置,已经渗透到工业生产、宇宙探索、海洋探测、环境保护、资源调查、医学诊断、生物工程甚至文物保护等极其广泛的领域。毫不夸张地说,几乎每一个现代化的项目都离不开传感器,从广阔的空间到广阔的海洋和各种复杂的工程系统。
目前,市场上有大量的传感器,如温度、湿度、电压、电流、压力、光、加速度、角速度等。它们的应用场景、产品参数、使用方法都不同,这往往使许多项目开发人员在使用传感器时感到困难:添加传感器,编写相应的驱动器,并提供一套接口来访问传感器。
通常,在一个复杂的系统中,通常有不止一个传感器,可能有几个或几十个或更多不同类型的传感器。如果这些传感器的接口不同,可以想象软件的工作量和复杂性会有多大?它实际上增加了发展的难度。不仅如此,如果基于各种传感器开发的应用程序想要跨平台重用,而底层传感器的接口是奇怪的,那么工作量和复杂性会上升到多大程度呢?
要解决这些问题,AWorks定义了适用于各种传感器的通用传感器接口,只要是挂载的AWorks可通过相同的操作接口访问系统中的传感器。同时,基于这些通用接口开发的应用程序不会与特定的硬件设备绑定。换句话说,使用不同类型的传感器更换底层不会影响应用程序,应用程序不能更改。
在功能方面,传感器收集了现实世界中的物理信号(温度、湿度、气压等)。使用传感器时,最重要的操作是从传感器中获取相应的数据。接下来,进一步介绍如何通过接口获取传感器数据。
1.传感器通道ID
在介绍界面的使用方法之前,需要简单地理解一个概念,AWorks使用相同接口访问所有类型的传感器的原因是AWorks统一管理系统中的传感器。为实现各种传感器的统一管理,在AWorks在中间,定义了传感器通道的抽象概念。一路传感器通道用于收集一路物理信号。该系统为每个传感器通道分配了唯一的信号ID。例如,如果系统中有三个传感器,即温湿度传感器HTS三轴磁传感器(可为系统提供一路温度和湿度通道)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一致性。基于此接口,可以同时获取系统中多个或所有传感器的采样数据,例如每500个ms获取当前表
1中所有的传感器通道采样数据的程序范例如下:
基于此,AWorks该系统的传感器接口完美地实现了使用相同接口获取所有传感器采样数据的功能。此时,有些人可能会问,这两个接口似乎都是通过轮询获取传感器数据的。如果在效率要求高的情况下,调用接口不是很好吗?此外,许多传感器可以通过中断触发获取数据,这可以大大提高应用程序的效率。这个功能能能实现吗?当然!AWorks这种接口也提供了,接口调用非常方便简单。接下来将为你一一揭秘。