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.pswp.cn/news/161254.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/161254.shtml
英文地址,請注明出處:http://en.pswp.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; …