<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 物聯(lián)網(wǎng)與傳感器 > 設計應用 > 如何以最簡(jiǎn)單的方式獲取傳感器數據?

如何以最簡(jiǎn)單的方式獲取傳感器數據?

作者:ZLG致遠電子 時(shí)間:2019-03-13 來(lái)源:電子產(chǎn)品世界 收藏

  作為各個(gè)領(lǐng)域最重要的設備之一,產(chǎn)品種類(lèi)之多,應用領(lǐng)域之廣,隨著(zhù)“智能時(shí)代”的到來(lái),的使用將發(fā)揮更加關(guān)鍵的作用。那么,要如何以最簡(jiǎn)單,最高效的方式使用這些種類(lèi)繁多,操作復雜的呢?本文將為大家一一介紹。

本文引用地址:http://dyxdggzs.com/article/201903/398464.htm

  傳感器作為一種檢測裝置,它的應用早已滲透到諸如工業(yè)生產(chǎn)、宇宙探索、海洋探測、環(huán)境保護、資源調查、醫學(xué)診斷、生物工程、甚至文物保護等等極其之廣泛的領(lǐng)域??梢院敛豢鋸埖卣f(shuō),從茫茫的太空,到浩瀚的海洋,以及各種復雜的工程系統,幾乎每一個(gè)現代化項目,都離不開(kāi)傳感器。

  目前,市面上已經(jīng)存在大量各種類(lèi)型,各種型號,不同廠(chǎng)家生產(chǎn)的各種傳感器,例如,溫度、濕度、電壓、電流、壓強、光照、加速度、角速度等等。它們的應用場(chǎng)景、產(chǎn)品參數、使用方法都不盡相同,這往往使許多項目開(kāi)發(fā)人員在使用傳感器時(shí)舉步維艱:添加一個(gè)傳感器,就要編寫(xiě)對應的驅動(dòng),提供一套訪(fǎng)問(wèn)這個(gè)傳感器的接口。

  通常情況下,在一個(gè)復雜的系統中,傳感器往往不止一個(gè),可能存在幾個(gè)或幾十個(gè)甚至更多不同種類(lèi)的傳感器,若這些傳感器的使用接口都不相同,那么可想而知,軟件方面的工作量和復雜度又會(huì )有多大?無(wú)形中又增加了很大的開(kāi)發(fā)難度。不僅如此,若基于多種傳感器開(kāi)發(fā)的應用程序想跨平臺復用,而底層各個(gè)傳感器的接口卻千奇百怪,那么,這樣的工作量和復雜度又會(huì )上升到什么程度?

  為了解決這些問(wèn)題,定義了通用的傳感器接口,適用于各式各樣的傳感器,只要是掛載在系統中的傳感器,都可以通過(guò)相同的操作接口來(lái)訪(fǎng)問(wèn)。同時(shí),只要是基于這些通用接口開(kāi)發(fā)的應用程序,都不會(huì )與具體的硬件設備綁定,換句話(huà)說(shuō),底層更換使用不同型號的傳感器,對應用程序不會(huì )造成影響,應用程序可以不做任何改動(dòng)。

  從功能上看,傳感器實(shí)現了對真實(shí)世界中某種物理信號(溫度、濕度、氣壓等)的采集,在使用傳感器時(shí),最重要的操作就是從傳感器中獲取出相應的數據。接下來(lái),進(jìn)一步介紹如何通過(guò)接口獲取傳感器數據作。

  1、傳感器通道ID

  在介紹接口的使用方法之前,需要簡(jiǎn)單了解一個(gè)概念,之所以能夠實(shí)現使用一套相同的接口訪(fǎng)問(wèn)所有類(lèi)型的傳感器,是因為AWorks對系統中的傳感器進(jìn)行了統一的管理。為了實(shí)現對各式各樣的傳感器進(jìn)行統一管理,在A(yíng)Works中,定義了“傳感器通道”的抽象概念,一路傳感器通道用于完成一路物理信號的采集,系統為每個(gè)傳感器通道分配了一個(gè)唯一的ID。例如,若此時(shí)系統中存在三個(gè)傳感器,分別為溫濕度傳感器HTS221(能為系統提供一路溫度和一路濕度通道),三軸磁傳感器LIS3MDL(能位系統提供X,Y,Z軸三路磁數據通道和一路溫度通道)和光照傳感器BH1730(能為系統提供一路光照度采集通道),則對應的ID分配范例詳見(jiàn)表 1。

  表1 傳感器通道id分配

  按照以上的傳感器通道ID分配方式,理論上,系統中可以?huà)燧d無(wú)數個(gè)各種類(lèi)型的傳感器,新加入的傳感器通道只需按照以上方式依次向后分配ID即可。通常情況下,該ID號的分配已經(jīng)由系統完成,無(wú)需我們自行分配,我們只需簡(jiǎn)單知道當前系統中的有效ID號所對應的傳感器通道類(lèi)型即可。例如,當前AWorks系統中存在的傳感器如表1所示,有三個(gè)傳感器,ID號為0~6,下文中函數接口ID的使用將以此為例。

  2、獲取傳感器數據

  基于以上對傳感器ID的描述,此時(shí)若想獲取傳感器的數據,只需在應用程序中調用獲取傳感器數據的函數接口即可,獲取傳感器數據的函數接口如下:

  其中,id即為傳感器通道ID號,p_val為存放對應ID的傳感器數據。此處aw_sensor_val_t類(lèi)型為一個(gè)結構體,只需知道它是一個(gè)保存傳感器數據的變量即可。

  基于此,獲取系統中任意傳感器通道的數據只需調用該接口即可,例如,每隔500ms獲取一次溫度采樣數據的程序范例如下:

  同樣,若想獲取光照度傳感器采樣數據,程序范例如下:

  以此類(lèi)推,只需要調用這一個(gè)相同的接口,便可以依次獲取系統中所有傳感器的數據。此時(shí),或許有人會(huì )疑問(wèn),系統中那么多傳感器,一個(gè)一個(gè)調用該接口,會(huì )不會(huì )顯得繁瑣?對于該問(wèn)題,AWorks系統當然給出了答案,那就是提供同時(shí)獲取多通道或者所有通道傳感器數據的接口,該接口原型如下:

  其中,p_ids為指向傳感器通道id列表的指針;num表示通道的數目,即id列表的大小;p_buf指向用于存儲各通道數據的緩存,緩存大小與num一致?;谠摻涌?,可以同時(shí)獲取多個(gè)或所有系統中傳感器的采樣數據,例如,每隔500ms獲取當前表 1中所有的傳感器通道采樣數據的程序范例如下:

  基于此,AWorks系統的傳感器接口已經(jīng)完美的實(shí)現了使用同種接口獲取所有傳感器采樣數據的功能。此時(shí),或許有人又會(huì )提出疑問(wèn),這兩個(gè)接口采用的似乎都是輪詢(xún)的方式獲取傳感器數據,若在效率要求較高的場(chǎng)合,調用該接口是不是不太好呢?再者說(shuō),如今的許多傳感器都可以采用中斷觸發(fā)的方式獲取數據,這樣可以大大提高應用程序的效率,那么能不能實(shí)現這種功能呢?當然!AWorks同樣提供了這種接口,而且接口的調用非常方便,簡(jiǎn)潔。接下來(lái)將為你一一揭秘。

  3、觸發(fā)方式獲取傳感器數據

  如今大多數傳感器內部都支持了通過(guò)中斷觸發(fā)的方式通知應用程序獲取傳感器數據的功能,應用程序只需檢測觸發(fā)類(lèi)型做相應的處理即可,這樣大大提高了應用程序的執行效率,避免了以查詢(xún)這種耗時(shí)的方式主動(dòng)獲取傳感器數據的操作。

  傳感器具有的觸發(fā)方式一般由傳感器本身決定。例如,溫濕度傳感器HTS221具有的可配置觸發(fā)方式只有數據準備就緒觸發(fā);三軸磁傳感器LIS3MDL具有的可配置觸發(fā)方式有數據準備就緒觸發(fā)和上下門(mén)限值觸發(fā)。接下來(lái)將只以數據準備就緒觸發(fā)方式,講解如何高效的獲取傳感器數據。

  在A(yíng)Works中,要實(shí)現通過(guò)觸發(fā)方式獲取傳感器通道數據,只需要兩步操作即可,第一步是配置傳感器通道的觸發(fā)回調函數,第二步則是打開(kāi)該通道的觸發(fā)。

  首先,配置傳感器通道觸發(fā)模式的函數原型如下:

  其中,id為傳感器通道的編號,flags參數為配置的觸發(fā)模式對應的宏(此處只以數據準備就緒觸發(fā)舉例,其所對應的宏在A(yíng)Works中定義為AW_SENSOR_TRIGGER_DATA_READY,直接傳入即可),pfn_cb為觸發(fā)回調函數,p_arg為用戶(hù)觸發(fā)回調函數參數。觸發(fā)回調函數的類(lèi)型為aw_sensor_trigger_cb_t,定義如下:

  其中,p_arg為用戶(hù)觸發(fā)回調函數參數,trigger_src為存放的觸發(fā)類(lèi)型。例如,此時(shí)要配置三軸磁傳感器LIS3MDL的X軸采集通道(表1通道2)的數據準備就緒觸發(fā),程序范例如下:

  當以上程序完成通道的觸發(fā)方式的配置后,接下來(lái),只需打開(kāi)該通道的觸發(fā)即可,該函數接口的定義如下:

  該函數接口只需傳入id即可。注意,aw_sensor_trigger_on函數接口必須在aw_sensor_trigger_cfg接口之后調用,先后順序不能顛倒。

  此時(shí),要通過(guò)觸發(fā)方式獲取三軸磁傳感器LIS3MDL的X軸采集數據的完整程序范例如下:

  通過(guò)以上的接口,完美的實(shí)現了一種接口訪(fǎng)問(wèn)所有傳感器數據的功能,并且這些接口可以在任何運行AWorks操作系統的平臺上使用,且無(wú)論平臺中的傳感器類(lèi)型和數目如何變化,只需要知道該平臺傳感器通道的ID信息,則都可以使用這些通用接口來(lái)進(jìn)行訪(fǎng)問(wèn)。只要是基于該通用接口開(kāi)發(fā)的應用程序,只要是在A(yíng)Works系統中,應用程序能實(shí)現“零”修改的移植。在軟件意義上,真正實(shí)現了“一次編程、終生使用、跨平臺”的歷史難題。

  4、總結

  AWorks是ZLG歷時(shí)12年開(kāi)發(fā)的下一代開(kāi)源嵌入式開(kāi)發(fā)平臺,將MCU和OS的共性高度抽象為統一接口,支持平臺組件“可插拔、可替換、可配置”,與硬件無(wú)關(guān)、與操作系統種類(lèi)無(wú)關(guān)的方式設計,用戶(hù)只需修改相應的頭文件,即可實(shí)現“一次編程、終生使用、跨平臺”。

  并且ZLG推出了一系列搭載AWorks操作系統的Cortex-M0/3/4/7、Coterx-A7/8/9、ARM7/9、DSP等常用內核的核心板。使用這些核心板,即可在A(yíng)Works平臺上快速完成產(chǎn)品開(kāi)發(fā)。



關(guān)鍵詞: AWorks 傳感器

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>