传感器作为各个领域最重要的设备之一,产品种类之多,应用领域之甚广,随着“智能时代”的来临,传感器的用于将充分发挥更为关键的起到。那么,要如何以最简单,最高效的方式用于这些种类多样,操作者简单的传感器呢?本文将为大家一一讲解。
传感器作为一种检测装置,它的应用于早就渗透到诸如工业生产、宇宙探寻、海洋观测、环境保护、资源调查、医学临床、生物工程、甚至文物保护等等极为之普遍的领域。可以从不滑稽地说道,从茫茫的太空,到浩瀚的海洋,以及各种简单的工程系统,完全每一个现代化项目,都必不可少传感器。目前,市面上早已不存在大量各种类型,各种型号,有所不同厂家生产的各种传感器,例如,温度、湿度、电压、电流、流体、光照、加速度、角速度等等。
它们的应用于场景、产品参数、用于方法都不尽相同,这往往使许多项目开发人员在用于传感器时举步维艰:加到一个传感器,就要撰写对应的驱动,获取一套采访这个传感器的模块。一般来说情况下,在一个简单的系统中,传感器往往好比一个,有可能不存在几个或几十个甚至更加多有所不同种类的传感器,若这些传感器的用于模块都不完全相同,那么可想而知,软件方面的工作量和复杂度又会有多大?无形中又减少了相当大的研发可玩性。不仅如此,若基于多种传感器研发的应用程序想要跨平台适配,而底层各个传感器的模块却千奇百怪,那么,这样的工作量和复杂度又不会下降到什么程度?为了解决问题这些问题,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某种程度获取了这种模块,而且模块的调用十分便利,简练。
接下来将为你一一揭露。
本文来源:beat·365-www.ziranshi.net