传感器

作为各个领域最重要的设备之一,产品种类之多,应用领域之广,随着“智能时代”的到来,传感器

的使用将发挥更加关键的作用。那么,要如何以最简单,最高效的方式使用这些种类繁多,操作复杂的传感器

呢?本文将为大家一一介绍。本文引用地址:http://www.eepw.com.cn/article/201903/398464.htm

传感器

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

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

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

为了解决这些问题,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同样提供了这种接口,而且接口的调用非常方便,简洁。接下来将为你一一揭秘。

3、触发方式获取传感器数据

如今大多数传感器内部都支持了通过中断触发的方式通知应用程序获取传感器数据的功能,应用程序只需检测触发类型做相应的处理即可,这样大大提高了应用程序的执行效率,避免了以查询这种耗时的方式主动获取传感器数据的操作。

传感器具有的触发方式一般由传感器本身决定。例如,温湿度传感器HTS221具有的可配置触发方式只有数据准备就绪触发;三轴磁传感器LIS3MDL具有的可配置触发方式有数据准备就绪触发和上下门限值触发。接下来将只以数据准备就绪触发方式,讲解如何高效的获取传感器数据。

在AWorks中,要实现通过触发方式获取传感器通道数据,只需要两步操作即可,第一步是配置传感器通道的触发回调函数,第二步则是打开该通道的触发。

首先,配置传感器通道触发模式的函数原型如下:

其中,id为传感器通道的编号,flags参数为配置的触发模式对应的宏(此处只以数据准备就绪触发举例,其所对应的宏在AWorks中定义为AW_SENSOR_TRIGGER_DATA_READY,直接传入即可),pfn_cb为触发回调函数,p_arg为用户触发回调函数参数。触发回调函数的类型为aw_sensor_trigger_cb_t,定义如下:

其中,p_arg为用户触发回调函数参数,trigger_src为存放的触发类型。例如,此时要配置三轴磁传感器LIS3MDL的X轴采集通道(表1通道2)的数据准备就绪触发,程序范例如下:

当以上程序完成通道的触发方式的配置后,接下来,只需打开该通道的触发即可,该函数接口的定义如下:

该函数接口只需传入id即可。注意,aw_sensor_trigger_on函数接口必须在aw_sensor_trigger_cfg接口之后调用,先后顺序不能颠倒。

此时,要通过触发方式获取三轴磁传感器LIS3MDL的X轴采集数据的完整程序范例如下:

通过以上的接口,完美的实现了一种接口访问所有传感器数据的功能,并且这些接口可以在任何运行AWorks操作系统的平台上使用,且无论平台中的传感器类型和数目如何变化,只需要知道该平台传感器通道的ID信息,则都可以使用这些通用接口来进行访问。只要是基于该通用接口开发的应用程序,只要是在AWorks系统中,应用程序能实现“零”修改的移植。在软件意义上,真正实现了“一次编程、终生使用、跨平台”的历史难题。

4、总结

AWorks是ZLG历时12年开发的下一代开源嵌入式开发平台,将MCU和OS的共性高度抽象为统一接口,支持平台组件“可插拔、可替换、可配置”,与硬件无关、与操作系统种类无关的方式设计,用户只需修改相应的头文件,即可实现“一次编程、终生使用、跨平台”。

并且ZLG推出了一系列搭载AWorks操作系统的Cortex-M0/3/4/7、Coterx-A7/8/9、ARM7/9、DSP等常用内核的核心板。使用这些核心板,即可在AWorks平台上快速完成产品开发。

gazebo 直接获取传感器数据_如何以最简单的方式获取传感器数据?相关推荐

  1. 最简单的方式获取ELMo得到的词向量

    Introduction 本文的目的就是用最简单的方式获取 elmo 得到的word representation,看了一些其他人的介绍,其实最后对我有用的就这么多了,我只想要他生成的词向量. 简单介 ...

  2. python读取网络端口数据_在Python中从SNMP端口获取数据

    我专门尝试使用PySNMP库从python中的SNMP端口读取数据.我有兴趣仅通过此库获取数据.这是因为我正在从NetSNMP迁移到PySNMP. 这是我为NetSNMP编写的工作代码,它实际上为我提 ...

  3. sql server 中获取前一天日期_图解SQL面试题:如何比较日期数据?

    ​[题目] 下面是某公司每天的营业额,表名为"日销"."日期"这一列的数据类型是日期类型(date). 请找出所有比前一天(昨天)营业额更高的数据.(前一天的意 ...

  4. ts获取服务器数据_在 Angular6 中使用 HTTP 请求服务端数据

    第一步 准备好api接口地址, 例如 https://api.example.com/api/ 第二步 在根组件 app.module.ts 中引入 HttpClientModule 模块. // a ...

  5. python爬取地图数据_高德3地图之python爬取POI数据及其边界经纬度(根据关键字在城市范围内搜索)...

    目前高德的边界没法批量爬取,不过可以采用百度地图的接口来替代,目前用着还可以,参见这里: 为了方便大家,不用再为安装环境,以及运行报错等问题困扰,目前已经将POI数据爬取做成一个在线公开的数工具,地址 ...

  6. python登录网站后爬取数据_用 Python 登录主流网站,我们的数据爬取少不了它

    不论是自然语言处理还是计算机视觉,做机器学习算法总会存在数据不足的情况,而这个时候就需要我们用爬虫获取一些额外数据.这个项目介绍了如何用 Python 登录各大网站,并用简单的爬虫获取一些有用数据,目 ...

  7. 向内存中连续存入数据_实例35_在Excel中按条件筛选数据并存入新的表

    老板想要看去年每月领料数量大于1000的数据.手动筛选并复制粘贴出来,需要重复操作12次,实在太麻烦了,还是让Python来做吧.磨刀不误砍柴工,先整理一下思路: 1. 读取原表,将数量大于1000的 ...

  8. easyui datalist 不显示数据_爬虫练习——豆瓣电影信息爬取及数据可视化

    最近自学了简单的爬虫项目,简单记录下自己的小白学习路径. 本次爬取的是豆瓣电影TOP250数据,主要用到beautifulsoup.re.urllib库.SQLite包,数据可视化方面主要用到flas ...

  9. app怎么调用mysql数据_教你如何拿别人APP中的数据

    开篇之前,我一直考虑这算不算侵权?只是兴趣,如果有人告知侵权的话,立马删除. 我所说的数据不是指拿别人app中的图片资源.而是程序运行所需要的数据. App中的数据无非两种,一种是网络数据,一种是本地 ...

  10. c mysql显示多条数据_用一条mysql语句插入多条数据

    假如有一个数据表A: id name title addtime 如果需要插入n条数据 : $time= time(); $data = array( array( 'name'=>'name1 ...

最新文章

  1. Vivado IP核生成设置
  2. docker 报错 /usr/bin/docker-current: Error response from daemon: driver failed programming external
  3. SVR4/4.3BSD与Linux对待伪终端的不同方式
  4. PDU知识全集,值得收藏!
  5. html自定义工具条,为Autodesk Viewer添加自定义工具条的更好方法
  6. 什么甜食可以代表你的家乡?
  7. 计算机软件大专证,在哪报名大专证怎么报考
  8. NGS系列文章 - 高通量测序原理
  9. 粤嵌gec6818项目设计_西安市幸福林带景观及亮化设计国际竞赛终期评审会顺利举行...
  10. java打印条形码Code128C
  11. java中的执行顺序_Java中的执行顺序
  12. 【网络流24题】分配问题 最小最大费用最大流
  13. es java 模糊查询_java使用elasticsearch进行模糊查询
  14. R语言之dpqr概率函数
  15. 林信良(良葛格)的专栏中的DWR入门好教程
  16. oracle把修改成及联,oracle日常操作命令手册(用户管理)-从零到无
  17. 前端性能优化 之 首屏预渲染
  18. IE浏览器打不开jupyter notebook网页的解决办法
  19. 类似qq新闻提示窗口样码(cpy)
  20. ARFoundation入门到精通 - 1.8 远程调试

热门文章

  1. Oracle建立连接的过程分析
  2. Panabit安装snmp插件
  3. system_Class类说明文档
  4. 一起写框架-控制反转(Ioc)概述(二)
  5. oracle 查询 约束
  6. cxgrid的FINDPANEL编程
  7. SQL语法 之 基本查询
  8. Duanxx的STM32学习:NVIC操作
  9. android利用数字证书对程序签名
  10. [转]asp.net中利用ashx实现图片防盗链