RT-Thread Sensor框架使用 - 1

RT-Thread Sensor框架使用 - 1

  • 简介
    • Sensor框架结构
    • 函数说明
      • rt_device_find
      • rt_device_open
      • rt_device_read

简介

使用气体传感器,对接到sensor框架中使用。

Sensor框架结构

device框架 --》sensor框架 --》具体的设备

函数说明

rt_device_find

查找设备时的名称为sensor.c文件中的sensor_name_str变量定义的头部分。

static char *const sensor_name_str[] =
{"none","acce_",     /* Accelerometer     */"gyro_",     /* Gyroscope         */"mag_",      /* Magnetometer      */"temp_",     /* Temperature       */"humi_",     /* Relative Humidity */"baro_",     /* Barometer         */"li_",       /* Ambient light     */"pr_",       /* Proximity         */"hr_",       /* Heart Rate        */"tvoc_",     /* TVOC Level        */"noi_",      /* Noise Loudness    */"step_",     /* Step sensor       */"forc_",     /* Force sensor      */"dust_",     /* Dust sensor       */"eco2_",     /* eCO2 sensor       */"gnss_",     /* GPS/GNSS sensor   */
//    "tof_",      /* TOF sensor        */
//    "spo2_"      /* SpO2 sensor       */"ch4_"       /* CH4  sensor       */
};

在注册的时候,将后半部分的名称写入进去

result = rt_hw_sensor_register(sensor_temp,"gas", RT_DEVICE_FLAG_RDONLY, RT_NULL);

在该函数中通过调用初始化的时候的设备类型地址,对设备名称的前部分进行查表注册。

sensor_name = sensor_name_str[sensor->info. Type];#define RT_SENSOR_CLASS_NONE           (0)
#define RT_SENSOR_CLASS_ACCE           (1)  /* Accelerometer     */
#define RT_SENSOR_CLASS_GYRO           (2)  /* Gyroscope         */
#define RT_SENSOR_CLASS_MAG            (3)  /* Magnetometer      */
#define RT_SENSOR_CLASS_TEMP           (4)  /* Temperature       */
#define RT_SENSOR_CLASS_HUMI           (5)  /* Relative Humidity */
#define RT_SENSOR_CLASS_BARO           (6)  /* Barometer         */
#define RT_SENSOR_CLASS_LIGHT          (7)  /* Ambient light     */
#define RT_SENSOR_CLASS_PROXIMITY      (8)  /* Proximity         */
#define RT_SENSOR_CLASS_HR             (9)  /* Heart Rate        */
#define RT_SENSOR_CLASS_TVOC           (10) /* TVOC Level        */
#define RT_SENSOR_CLASS_NOISE          (11) /* Noise Loudness    */
#define RT_SENSOR_CLASS_STEP           (12) /* Step sensor       */
#define RT_SENSOR_CLASS_FORCE          (13) /* Force sensor      */
#define RT_SENSOR_CLASS_DUST           (14) /* Dust sensor       */
#define RT_SENSOR_CLASS_ECO2           (15) /* eCO2 sensor       */
#define RT_SENSOR_CLASS_GNSS           (16) /* GPS/GNSS sensor   */
#define RT_SENSOR_CLASS_CH4            (17) /* CH4 sensor        */

rt_device_open

该参数通过sensor,c中的下列函数实现的

/* RT-Thread Device Interface */
static rt_err_t rt_sensor_open(rt_device_t dev, rt_uint16_t oflag)
{rt_sensor_t sensor = (rt_sensor_t)dev;RT_ASSERT(dev != RT_NULL);rt_err_t res = RT_EOK;rt_err_t (*local_ctrl)(struct rt_sensor_device *sensor, int cmd, void *arg) =  local_control;if (sensor->module){/* take the module mutex */rt_mutex_take(sensor->module->lock, RT_WAITING_FOREVER);}if (sensor->module != RT_NULL && sensor->info.fifo_max > 0 && sensor->data_buf == RT_NULL){/* Allocate memory for the sensor buffer */sensor->data_buf = rt_malloc(sizeof(struct rt_sensor_data) * sensor->info.fifo_max);if (sensor->data_buf == RT_NULL){res = -RT_ENOMEM;goto __exit;}}if (sensor->ops->control != RT_NULL){local_ctrl = sensor->ops->control;}sensor->config.mode = RT_SENSOR_MODE_POLLING;if (oflag & RT_DEVICE_FLAG_RDONLY && dev->flag & RT_DEVICE_FLAG_RDONLY){/* If polling mode is supported, configure it to polling mode */local_ctrl(sensor, RT_SENSOR_CTRL_SET_MODE, (void *)RT_SENSOR_MODE_POLLING);}else if (oflag & RT_DEVICE_FLAG_INT_RX && dev->flag & RT_DEVICE_FLAG_INT_RX){/* If interrupt mode is supported, configure it to interrupt mode */if (local_ctrl(sensor, RT_SENSOR_CTRL_SET_MODE, (void *)RT_SENSOR_MODE_INT) == RT_EOK){/* Initialization sensor interrupt */rt_sensor_irq_init(sensor);sensor->config.mode = RT_SENSOR_MODE_INT;}}else if (oflag & RT_DEVICE_FLAG_FIFO_RX && dev->flag & RT_DEVICE_FLAG_FIFO_RX){/* If fifo mode is supported, configure it to fifo mode */if (local_ctrl(sensor, RT_SENSOR_CTRL_SET_MODE, (void *)RT_SENSOR_MODE_FIFO) == RT_EOK){/* Initialization sensor interrupt */rt_sensor_irq_init(sensor);sensor->config.mode = RT_SENSOR_MODE_FIFO;}}else{res = -RT_EINVAL;goto __exit;}/* Configure power mode to normal mode */if (local_ctrl(sensor, RT_SENSOR_CTRL_SET_POWER, (void *)RT_SENSOR_POWER_NORMAL) == RT_EOK){sensor->config.power = RT_SENSOR_POWER_NORMAL;}__exit:if (sensor->module){/* release the module mutex */rt_mutex_release(sensor->module->lock);}return res;
}

可以看到实际上,开启函数是对control函数进行的控制,实现的开启和关闭。

rt_device_read

该函数的输入参数是struct rt_sensor_data data;

struct rt_sensor_data
{rt_uint32_t         timestamp;          /* The timestamp when the data was received */rt_uint8_t          type;               /* The sensor type of the data */rt_uint8_t          state;              /* The sensor state*/union{struct sensor_3_axis acce;          /* Accelerometer.       unit: mG          */struct sensor_3_axis gyro;          /* Gyroscope.           unit: mdps        */struct sensor_3_axis mag;           /* Magnetometer.        unit: mGauss      */struct coordinates   coord;         /* Coordinates          unit: degrees     */float                temp;          /* Temperature.         unit: dCelsius    */float                humi;          /* Relative humidity.   unit: permillage  */rt_int32_t           baro;          /* Pressure.            unit: pascal (Pa) */rt_int32_t           light;         /* Light.               unit: lux         */rt_int32_t           proximity;     /* Distance.            unit: centimeters */rt_int32_t           hr;            /* Heart rate.          unit: bpm         */rt_int32_t           tvoc;          /* TVOC.                unit: permillage  */rt_int32_t           noise;         /* Noise Loudness.      unit: HZ          */rt_uint32_t          step;          /* Step sensor.         unit: 1           */rt_int32_t           force;         /* Force sensor.        unit: mN          */rt_uint32_t          dust;          /* Dust sensor.         unit: ug/m3       */rt_uint32_t          eco2;          /* eCO2 sensor.         unit: ppm         */rt_uint8_t           ch4;           /* CH4  sensor.         unit: LEL         */} data;
};

在实际使用的时候,根据具体的传感器选择具体的数据类型进行选择。在编写底层对接函数的时候,在获取数据部分也需要同步将数据写入到相同的传感器类型的数据中去。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/161254.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Docker】从零开始:6.配置镜像加速器

【Docker】从零开始:5.配置镜像加速器 什么是镜像加速器?为什么要配置docker镜像加速器?常见的Docker镜像加速器有哪些?如何申请Docker镜像加速器如何配置Docker镜像加速器 什么是镜像加速器? 镜像加速器是一个位于Docker Hub之…

vue2.x中使用JS与路由守卫配置、vue2.x中使用TS与路由守卫的配置和vuex的配置以及TS在vue2.x中的使用说明

vue2.x 事件修饰符 <button click.stop.self"handleDelete(item)"></button>在使用 $confirm 时&#xff0c;使用 await 方式时&#xff0c;需要添加 catch 回调&#xff0c;否则无法获取 $confirm 关闭和取消时的标识值&#xff0c;并且后续代码停止执…

腾讯微服务平台TSF学习笔记(二)--如何使用spring cloud zuul实现线上流量复制

需求提了n遍了&#xff0c;好好好&#xff0c;那这个需求就由我测试来做 1.在zuul端配置&#xff1a; ●假设provider-mirror是provider-demo的灰度应用 package com.tencent.tsf.msgw.zuul1.filter;import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.Re…

北航计算机学院 嵌入式系统实验踩坑

今天上课在实验室配置交叉编译环境时&#xff0c;用机房的电脑一次就配成功了&#xff0c;但是下课后用自己的电脑装了一个虚拟机安装了Ubuntu 22.04系统&#xff0c;却怎样也配不成功&#xff0c;后面仔细阅读文档才发现&#xff0c;交叉编译环境arm-linux-gcc居然是32位的&am…

PHP反序列化简单使用

注&#xff1a;比较简陋&#xff0c;仅供参考。 编写PHP代码&#xff0c;实现反序列化的时候魔法函数自动调用计算器 PHP反序列化 serialize(); 将对象序列化成字符串 unserialize(); 将字符串反序列化回对象 创建类 class Stu{ public $name; public $age; public $sex; publi…

智慧储能边缘计算网关应用,提升能源效率

智慧储能通过边缘计算网关物联网技术来实现对储能电池等设备的在线监控和远程管理。边缘计算网关可以将储能数据转化为可用的信息&#xff0c;并传输到储能系统中&#xff0c;为储能管理提供优化与调度等数据支持。 边缘计算网关在智慧储能系统中起到了关键的作用。IR4000边缘计…

NSAttributedString设置折行方式NSLineBreakByTruncatingTail,计算高度出错,高度返回异常。

iOS13上&#xff0c;NSAttributedString设置折行方式NSLineBreakByTruncatingTail&#xff0c;计算高度出错&#xff0c;只返回一行的高度。 NSMutableParagraphStyle *style [[NSMutableParagraphStyle alloc]init]; style.hyphenationFactor 1; // 设置每行的最后单词是…

探究Kafka原理-1.初识Kafka

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理&#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44…

音视频项目—基于FFmpeg和SDL的音视频播放器解析(十九)

介绍 在本系列&#xff0c;我打算花大篇幅讲解我的 gitee 项目音视频播放器&#xff0c;在这个项目&#xff0c;您可以学到音视频解封装&#xff0c;解码&#xff0c;SDL渲染相关的知识。您对源代码感兴趣的话&#xff0c;请查看基于FFmpeg和SDL的音视频播放器 如果您不理解本…

Postman API Enterprise 10.18.1 Crack

适合您企业的 Postman API 平台 掌控您的 API 环境。构建更好的 API。加快产品开发。 无论您处于 API 之旅的哪个阶段&#xff0c;Postman 都会为您提供帮助 想让您团队的 API 更容易被发现吗&#xff1f;希望减少开发和质量检查之间的滞后时间&#xff1f;想要更快地让新开发…

在Spring Boot中使用ECharts绘制数据图表

使用ECharts来完成一些花里胡哨的图表吧&#xff0c;一般这种需求我们在我们的客户端不太常见&#xff0c;但是&#xff0c;我们在后端进行各种数据统计的时候就会发现ECharts的优点了&#xff0c;比如我们常常做的柱状图&#xff0c;折线图&#xff0c;雷达图等可视化形式&…

Mac M1 安装Docker打包arm64的python项目的镜像包

1、首先安装Docker&#xff0c;到官网下载&#xff0c;选择apple chip版 Docker中文网 官网 2、双击下载的dmg文件&#xff0c;在弹出框中之间拖拽到右边 3、打开docker&#xff0c;修改国内镜像源&#xff0c;位置在配置-DockerEngine "registry-mirrors": ["…

『亚马逊云科技产品测评』活动征文|AWS 数据库产品类别及其适用场景详细说明

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 目录 前言、AWS 数据库产品类别 01、Amazon Aurora 02、Amazon Docum…

基于STM32的手势识别算法研究与应用

基于STM32的手势识别算法在人机交互和智能设备控制中具有重要的应用价值。本文将介绍基于STM32的手势识别算法的研究原理和实现步骤&#xff0c;并提供相应的代码示例。 1. 手势识别概述 手势识别是一种通过分析人体的手部动作和姿势来识别和理解人的意图的技术。基于STM32的…

YOLOv5 分类模型 数据集加载 3

YOLOv5 分类模型 数据集加载 3 自定义类别 flyfish YOLOv5 分类模型 数据集加载 1 样本处理 YOLOv5 分类模型 数据集加载 2 切片处理 YOLOv5 分类模型的预处理&#xff08;1&#xff09; Resize 和 CenterCrop YOLOv5 分类模型的预处理&#xff08;2&#xff09;ToTensor 和 …

scrapy自定义日志

自定义日志系统 首先&#xff0c;在Scrapy的settings.py文件中添加以下代码&#xff1a; LOG_LEVEL DEBUG # 日志级别 LOG_FILE /path/to/logfile.log # 日志文件路径 LOG_ENABLED True # 是否启用日志 LOG_STDOUT False # 是否输出到标准输出这些设置将指定Scrapy日…

【PHP】PHP生成全年日历

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

5-8输出水仙花数

#include<stdio.h> int main(){int i,j,k;int n;for(n100;n<1000;n){in/100;jn/10-i*10;kn%10;if(ni*i*ij*j*jk*k*k)printf("%d ",n);}printf("\n");return 0; }

Dubbo从入门到上天系列第十八篇:Dubbo引入注册中心简介以及DubboAdmin简要介绍,为后续详解Dubbo各种注册中心做铺垫!

一&#xff1a;Dubbo注册中心引言 1&#xff1a;什么是Dubbo的注册中心&#xff1f; Dubbo注册中心是Dubbo服务治理中极其重要的一个概念。它主要是用于对Rpc集群应用实例进行管理。 对于我们的Dubbo服务来讲&#xff0c;至少有两部分构成&#xff0c;一部分是Provider一部分是…

uniapp开发小程序-如何判断小程序是在手机端还是pc端打开

官方说明 https://developers.weixin.qq.com/miniprogram/dev/devtools/pc-dev.html 小程序如何判断是 PC 平台&#xff1f; 通过 getSystemInfo 官方接口&#xff08;platform 是 windows&#xff09; 通过 UA&#xff08;PC UA 包含 MiniProgramEnv/Windows&#xff09; …