www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 嵌入式云IOT技術(shù)圈
[導(dǎo)讀]前陣子開(kāi)源了一個(gè)基于TencentOS tiny物聯(lián)網(wǎng)操作系統(tǒng)的危險(xiǎn)氣體探測(cè)儀項(xiàng)目,這次,我們?cè)賮?lái)開(kāi)源一個(gè)新的項(xiàng)目-甲醛檢測(cè)儀,但是做項(xiàng)目之前,有必要了解下接下來(lái)要做的一些模塊以及如何來(lái)進(jìn)行集成。

前陣子開(kāi)源了一個(gè)基于TencentOS tiny物聯(lián)網(wǎng)操作系統(tǒng)的危險(xiǎn)氣體探測(cè)儀項(xiàng)目,這次,我們?cè)賮?lái)開(kāi)源一個(gè)新的項(xiàng)目-甲醛檢測(cè)儀,但是做項(xiàng)目之前,有必要了解下接下來(lái)要做的一些模塊以及如何來(lái)進(jìn)行集成。

1、簡(jiǎn)介

WZ-S型甲醛檢測(cè)模組是英國(guó)達(dá)特公司開(kāi)發(fā)的,是用于將環(huán)境中甲醛的含量轉(zhuǎn)換成濃度值,標(biāo)準(zhǔn)化數(shù)字輸出,便于系統(tǒng)集成。

2、特點(diǎn)

3、典型應(yīng)用場(chǎng)景

4、硬件引腳及技術(shù)指標(biāo)

5、傳感器通訊協(xié)議

該傳感器采用的是串行通訊方式,也就是我們常用的串口,串口配置參數(shù)如下:

  • 波特率:9600

  • 數(shù)據(jù)位:8位

  • 停止位:1位

  • 校驗(yàn)位:無(wú)

傳感器在出廠后默認(rèn)為主動(dòng)上報(bào),每隔1s上報(bào)一次濃度值,命令行格式如下:

一般情況下我們直接拿來(lái)用即可。

6、軟件編程(以STM32為例)

以下開(kāi)發(fā)板為T(mén)OS_EVB_GO開(kāi)發(fā)板,也就是前陣子TencentOS公眾號(hào)發(fā)表的一篇文章的那個(gè),鏈接如下:

基于TencentOS Tiny接入騰訊連連微信小程序,打造您自己的智能家居產(chǎn)品

TOS_EVB_G0 開(kāi)發(fā)板是由騰訊TencentOS-tiny團(tuán)隊(duì)設(shè)計(jì)的一款物聯(lián)網(wǎng)開(kāi)發(fā)板,板載資源如下:

  • 主控芯片采用STM32G070RB,F(xiàn)lash空間僅有128KB、RAM空間僅有20KB;
  • 板載騰訊云定制固件版ESP8266 WIFI模組;
  • 板載E53傳感器標(biāo)準(zhǔn)接口,方便連接各種E53傳感器;
  • 板載0.91'OLED顯示屏幕;
  • 板載8MB SPI Flash,可用于固件升級(jí);
  • 板載CH340 轉(zhuǎn)串口連接,可以使用一根USB線連接至電腦,查看串口日志;

基于該開(kāi)發(fā)板編寫(xiě)的達(dá)特傳感器驅(qū)動(dòng)例程位于:

https://gitee.com/morixinguan/bear-pi.git

以上拓展模塊是騰訊基于E53接口設(shè)計(jì)的一個(gè)傳感器模塊,所以小熊派也是支持的,如下:


由于在小熊派上使用比較順手,所以現(xiàn)在我已經(jīng)對(duì)它愛(ài)不釋手了,無(wú)論是工作做實(shí)驗(yàn)還是平時(shí)練習(xí),以下配置、編程基于小熊派開(kāi)發(fā)板。

6.1、STM32CubeMX關(guān)于傳感器的配置

配置DMA接收,個(gè)人習(xí)慣DMA+空閑中斷的方式。

6.2、其它配置
6.2.1 時(shí)鐘

6.2.2 SWD調(diào)試口

6.2.3 調(diào)試串口

6.2.4 SPI OLED配置

其余的部分直接復(fù)用之前文章的一些接口即可,然后生成工程:

6.3 程序編寫(xiě)

在程序編寫(xiě)之前先來(lái)了解一些基本的概念,有助于我們后面產(chǎn)品的實(shí)現(xiàn)。

(1)ppm、ppb、ppt是什么?

表達(dá)溶液的濃度時(shí),1ppm=1ug/mL;表達(dá)固體中成分含量時(shí),1ppm即為1ug/g或1g/t。

所以1ppb=1ppm的千分之一,ppm即百萬(wàn)分之一,ppb即1億分之一,ppt即千億分之一。

所以ppm是10的-6次方,ppb是10的-9次方,ppt是10的-12次方

(2)濃度及濃度單位換算

1ppm = 1000ppb

1ppb ?= 1000ppt

ppm 即:mg/L(毫克/升)

ppm 即:mg/L(毫克/升)

ppm 即:mg/L(毫克/升)

6.3.1 達(dá)特傳感器通訊協(xié)議解析

由于達(dá)特甲醛傳感器出廠時(shí)固定是發(fā)9個(gè)字節(jié),所以我們可以直接用下面這個(gè)結(jié)構(gòu)體來(lái)表示:

/*甲醛傳感器協(xié)議*/
typedef?struct
{
?/*起始位*/
?uint8_t?start_bit?;
?/*氣體名稱(chēng)*/
?uint8_t?gas_name??;
?/*單位*/
?uint8_t?unit?;
?/*小數(shù)位數(shù)*/
?uint8_t?decimal_places?;
?/*氣體濃度高位*/
?uint8_t?gas_density_high?;
?/*氣體濃度低位*/
?uint8_t?gas_density_low?;
?/*滿量程高位*/
?uint8_t?full_range_high?;
?/*滿量程低位*/
?uint8_t?full_range_low?;
?/*校驗(yàn)值*/
?uint8_t?checksum_value?;
}Dart_Sensor_Procol_TypeDef?;

針對(duì)以上結(jié)構(gòu)體我們很容易根據(jù)官方手冊(cè)說(shuō)明寫(xiě)出如下解析函數(shù):

Dart_Sensor_Procol_TypeDef?Dart_Sensor_Data_Parse(uint8_t?*Data)
{
?uint16_t?temp?=?0?;
?uint16_t?check_sum?=?0?;
?uint16_t?check_sum_negate?=?0?;
?Dart_Sensor_Procol_TypeDef?dart_sensor?;
??/*將接收到的協(xié)議數(shù)據(jù)直接轉(zhuǎn)到結(jié)構(gòu)體里進(jìn)行存儲(chǔ)*/
?memcpy(&dart_sensor,Data,sizeof(Dart_Sensor_Procol_TypeDef));
??/*計(jì)算校驗(yàn)值*/
?check_sum?=?dart_sensor.gas_name?+?dart_sensor.unit?+??????\
?dart_sensor.gas_density_low?+?dart_sensor.gas_density_high?+???\
?dart_sensor.full_range_high?+?dart_sensor.full_range_low?+?dart_sensor.decimal_places?;
?check_sum_negate?=?~check_sum?;
?temp?=?check_sum_negate?+?1?;
?if((temp?&?0xff)?!=?dart_sensor.checksum_value)?
?{
??memset(&dart_sensor,0,sizeof(Dart_Sensor_Procol_TypeDef));
??return?dart_sensor?;
?}
?return?dart_sensor?;
}

關(guān)于這個(gè)Data是怎么直接轉(zhuǎn)結(jié)構(gòu)體的,可以參考我的一位朋友鄧工最近發(fā)表的一篇文章,里面圖文并茂的說(shuō)明了這種騷操作,文章鏈接如下,點(diǎn)擊即可跳轉(zhuǎn):

【進(jìn)階】"結(jié)構(gòu)體嵌入共聯(lián)體"在協(xié)議解析中的神操作!

在用戶層次,用戶不需要關(guān)心協(xié)議是怎么解析的,所以我們只需要給用戶提供一個(gè)獲取數(shù)據(jù)的結(jié)構(gòu)體和函數(shù)即可,然后通過(guò)頭文件dart_sensor.h提供給用戶,而協(xié)議解析部分直接放在dart_sensor.c文件里就可以了,如下:

#ifndef?__DART_SENSOR_H
#define?__DART_SENSOR_H
#include?
#include?
/*
1ppm?=?1000ppb
1ppb?=?1000ppt

ppm?=?mg/L(毫克/升)
ppb?=?ug/L(微克/升)
ppt?=?ng/L(納克/升)
*/

typedef?struct
{
?/*氣體濃度*/
?float?gas_density?;?//ppm
?/*滿量程*/
?float?full_range?;??
}Dart_Sensor?;


Dart_Sensor?Get_Dart_Sensor_Density(uint8_t?*Data);
#endif?//__DART_SENSOR_H

獲取濃度Get_Dart_Sensor_Density函數(shù)的實(shí)現(xiàn):

我看過(guò)的大多數(shù)濃度單位標(biāo)識(shí)都是ppm,也就是xxx/mg/L的這種表示方法,所以這個(gè)接口就設(shè)計(jì)成下面這樣。

/*
?獲取氣體濃度
?Data:??傳感器數(shù)據(jù)
?return:?xxx?ppm
*/
Dart_Sensor?Get_Dart_Sensor_Density(uint8_t?*Data)
{
? Dart_Sensor?sensor?;
? Dart_Sensor_Procol_TypeDef?dart_sensor?;
? dart_sensor?=?Dart_Sensor_Data_Parse(Data);
??/*計(jì)算濃度,單位為ppm*/
? sensor.gas_density?=?((dart_sensor.gas_density_high?<??/*當(dāng)前傳感器量程*/
? sensor.full_range??=?((dart_sensor.full_range_high?<? return?sensor?;
}

6.3.2 達(dá)特傳感器通訊庫(kù)封裝

既然用戶不需要關(guān)心過(guò)程,那我們可以給這個(gè)簡(jiǎn)單的解析過(guò)程做一個(gè)lib,這樣就相當(dāng)于一個(gè)模塊,提供.h和.lib即可,接下來(lái)建立一個(gè)STM32L431的工程,然后將.c和.h放在一個(gè)文件夾內(nèi),通過(guò)Keil包含進(jìn)來(lái)


然后在Output下選擇創(chuàng)建庫(kù),接下來(lái)點(diǎn)擊編譯即可生成:

注意,這里建立的這個(gè)庫(kù)僅在該環(huán)境下適用。思考一下,如何做到平臺(tái)通用呢?

6.3.3?案例編寫(xiě)

(1)開(kāi)啟串口空閑中斷

/*開(kāi)啟空閑中斷*/
__HAL_UART_ENABLE_IT(uartHandle,?UART_IT_IDLE);
//開(kāi)啟DMA接收
memset(sensor_handler.SensorU3Buffer,?0,?SENSOR_U3_BUFFER_SIZE);
HAL_UART_Receive_DMA(&huart3,?(uint8_t*)sensor_handler.SensorU3Buffer,?SENSOR_U3_BUFFER_SIZE);

(2)串口空閑中斷處理 串口接收數(shù)據(jù)結(jié)構(gòu):

//固定9個(gè)字節(jié)
#define?SENSOR_U3_BUFFER_SIZE???????9
typedef?struct
{
??/*表示接收到了*/
??uint8_t??BufferReady;
??/*數(shù)據(jù)緩存區(qū)*/
??uint8_t??SensorU3Buffer[SENSOR_U3_BUFFER_SIZE];
}Sensor_HandleTypeDef;
extern?Sensor_HandleTypeDef?sensor_handler?;

以下是數(shù)據(jù)采集過(guò)程,非常簡(jiǎn)單:

/**
??*?@brief?This?function?handles?USART3?global?interrupt.
??*/
void?USART3_IRQHandler(void)
{
??/*?USER?CODE?BEGIN?USART3_IRQn?0?*/
?if(RESET?!=?__HAL_UART_GET_FLAG(&huart3,?UART_FLAG_IDLE))
??{
??????__HAL_UART_CLEAR_IDLEFLAG(&huart3);
???HAL_UART_DMAStop(&huart3);
???sensor_handler.BufferReady?=?1?;
??}
??/*?USER?CODE?END?USART3_IRQn?0?*/
??HAL_UART_IRQHandler(&huart3);
??/*?USER?CODE?BEGIN?USART3_IRQn?1?*/

??/*?USER?CODE?END?USART3_IRQn?1?*/
}

當(dāng)接收到空閑中斷時(shí),代表數(shù)據(jù)已經(jīng)接收到了,此時(shí)sensor_handler.BufferReady置1,代表數(shù)據(jù)已經(jīng)接收完成。

(3)數(shù)據(jù)解析處理與應(yīng)用邏輯 在while循環(huán)中編寫(xiě)如下代碼:

while?(1)
{
????/*接收到一幀數(shù)據(jù)*/
????if(1?==?sensor_handler.BufferReady)
????{
????????/*接收標(biāo)志位清0*/
????????sensor_handler.BufferReady?=?0?;
????????/*判斷包頭數(shù)據(jù)是否正確*/
????????if(sensor_handler.SensorU3Buffer[0]?==?0xFF?&&?sensor_handler.SensorU3Buffer[1]?==?0x17)
????????{
????????????//調(diào)用解析函數(shù)
????????????sensor?=?Get_Dart_Sensor_Density(sensor_handler.SensorU3Buffer);
????????????/*業(yè)務(wù)邏輯開(kāi)始*/
????????????sprintf(display_buf,?"%.3fmg/L",?sensor.gas_density);
????????????LCD_ShowCharStr(70,?100,?170,?display_buf,?BLACK,?WHITE,?24);
????????????/*業(yè)務(wù)邏輯結(jié)束*/
????????????
????????????//重新打開(kāi)DMA繼續(xù)接收新的一幀數(shù)據(jù)
????????????memset(sensor_handler.SensorU3Buffer,?0,?SENSOR_U3_BUFFER_SIZE);
????????????HAL_UART_Receive_DMA(&huart3,?(uint8_t*)sensor_handler.SensorU3Buffer,?SENSOR_U3_BUFFER_SIZE);
????????}
????}
}

如何判斷接收到的這幀數(shù)據(jù)到底對(duì)不對(duì)呢?我們只需要根據(jù)協(xié)議手冊(cè)判斷前兩個(gè)字節(jié)是否為0xff和0x17即可。

7、運(yùn)行結(jié)果

8、指標(biāo)衡量

模塊咱們用起來(lái)了,如何判斷來(lái)衡量甲醛含量的技術(shù)指標(biāo)呢?下面這張圖截的是淘寶上某個(gè)商家對(duì)檢測(cè)標(biāo)準(zhǔn)的說(shuō)明:

9、思考與練習(xí)

前面我開(kāi)源了一個(gè)基于TencentOS tiny的危險(xiǎn)氣體探測(cè)儀項(xiàng)目,是否能在那個(gè)項(xiàng)目上稍微改改,變成一個(gè)新的產(chǎn)品級(jí)項(xiàng)目,讓一個(gè)新項(xiàng)目:甲醛探測(cè)儀迅速開(kāi)發(fā)出來(lái)呢?

淘寶上其實(shí)已經(jīng)有很多優(yōu)秀的產(chǎn)品案例,如下所示,界面做得相當(dāng)漂亮了:

是否能做出一個(gè)跟以上界面類(lèi)似的開(kāi)源項(xiàng)目呢?

如下圖所示,小熊派開(kāi)源生態(tài)社區(qū)工作小組的阿正大佬已經(jīng)做出來(lái)了一個(gè)類(lèi)似的作品,給他點(diǎn)贊!

同時(shí)也希望更多熱愛(ài)開(kāi)源的小伙伴加入我們的小熊派開(kāi)源生態(tài)社區(qū)工作小組,該工作小組為高質(zhì)量社區(qū),不同于一般群,只玩技術(shù)不閑聊,不接受潛水大佬,所以人不在多而在于精;無(wú)論小伙伴們玩的是什么平臺(tái)(不局限于小熊派),只要是熱愛(ài)開(kāi)源,有創(chuàng)意有想法,樂(lè)于持續(xù)分享,且目前在碼云/Github等社區(qū)有作品的玩家即可(私聊我的微信,拉你入群)

本節(jié)代碼已同步到碼云的代碼倉(cāng)庫(kù)中,獲取方法如下:

1、新建一個(gè)文件夾

2、使用git clone遠(yuǎn)程獲取小熊派例程存放的代碼倉(cāng)庫(kù)

項(xiàng)目開(kāi)源倉(cāng)庫(kù):

https://gitee.com/morixinguan/bear-pi.git


我還將之前做的一些項(xiàng)目以及練習(xí)例程在近期內(nèi)全部上傳完畢,與大家一起分享交流:

公眾號(hào)粉絲福利時(shí)刻

這里我給大家申請(qǐng)到了福利,本公眾號(hào)讀者購(gòu)買(mǎi)小熊派開(kāi)發(fā)板可享受9折優(yōu)惠,有需要購(gòu)買(mǎi)小熊派以及騰訊物聯(lián)網(wǎng)開(kāi)發(fā)板的朋友,淘寶搜索即可,跟客服說(shuō)你是公眾號(hào):嵌入式云IOT技術(shù)圈?的粉絲即可。

往期精彩

C語(yǔ)言將xxx.bin文件轉(zhuǎn)為數(shù)組

開(kāi)源STM32產(chǎn)品:無(wú)線點(diǎn)菜寶使用評(píng)測(cè)

C語(yǔ)言表驅(qū)動(dòng)法編程實(shí)踐(精華帖,建議收藏并實(shí)踐)

分享一個(gè)在Keil開(kāi)發(fā)環(huán)境中配置代碼格式化工具Astyle(美化代碼風(fēng)格)

覺(jué)得本次分享的文章對(duì)您有幫助,隨手點(diǎn)[在看]并轉(zhuǎn)發(fā)分享,也是對(duì)我的支持。

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱(chēng),數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱(chēng)"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉