本篇內(nèi)容主要講解“LiteOS怎么使用”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“LiteOS怎么使用”吧!
創(chuàng)新互聯(lián)公司是一家專(zhuān)業(yè)從事做網(wǎng)站、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)的品牌網(wǎng)絡(luò)公司。如今是成都地區(qū)具影響力的網(wǎng)站設(shè)計(jì)公司,作為專(zhuān)業(yè)的成都網(wǎng)站建設(shè)公司,創(chuàng)新互聯(lián)公司依托強(qiáng)大的技術(shù)實(shí)力、以及多年的網(wǎng)站運(yùn)營(yíng)經(jīng)驗(yàn),為您提供專(zhuān)業(yè)的成都網(wǎng)站建設(shè)、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)及網(wǎng)站設(shè)計(jì)開(kāi)發(fā)服務(wù)!
E53接口標(biāo)準(zhǔn)的E取自擴(kuò)展(Expansion)的英文首字母,板子的尺寸為5×3cm,故采用E53作為前綴來(lái)命名尺寸為 5×3cm 類(lèi)型的案例擴(kuò)展板,任何一款滿(mǎn)足標(biāo)準(zhǔn)設(shè)計(jì)的開(kāi)發(fā)板均可直接適配E53擴(kuò)展板。
E53擴(kuò)展板是根據(jù)不同的應(yīng)用場(chǎng)景來(lái)設(shè)計(jì)的,以最大的程度在擴(kuò)展板上還原真實(shí)應(yīng)用場(chǎng)景,不同案例的擴(kuò)展板根據(jù)不同的應(yīng)用場(chǎng)景來(lái)命名后綴。例如:E53_SC1,SC是智慧城市(Smart City)的縮寫(xiě),SC1表示的是智慧城市中的智慧路燈,再比如SC2則表示的是智慧城市中的智慧井蓋。
E53擴(kuò)展接口在電氣特性上,包含了常用的物聯(lián)網(wǎng)感知層傳感器通信接口,比如5V、3.3V、GND、SPI、UART、IIC、ADC、DAC等等,可以適配各種傳感器,還留有4個(gè)普通GPIO,如圖:
E53_IA1擴(kuò)展板采用了E53標(biāo)準(zhǔn)接口,包含了一個(gè)補(bǔ)光燈,一個(gè)BH1750光照強(qiáng)度傳感器,一個(gè)小的貼片電機(jī),一個(gè)溫濕度傳感器SHT30,一個(gè)其中補(bǔ)光燈和貼片電機(jī)使用普通GPIO控制,BH1750和SHT30使用IIC接口通信。
如果你對(duì)該擴(kuò)展板板載的BH1750光照強(qiáng)度和溫濕度傳感器驅(qū)動(dòng)不熟悉,請(qǐng)先閱讀嵌入式基礎(chǔ)教程
E53_IA1擴(kuò)展板上的 BH1750 光照強(qiáng)度傳感器和SHT30溫濕度傳感器使用的是 IIC 通信接口,所以除了復(fù)制 STM32CubeMX 生成的i2c.h
和i2c.h
文件,還需要在此基礎(chǔ)上復(fù)制包含了 BH1750 傳感器驅(qū)動(dòng)和SHT30傳感器驅(qū)動(dòng)的 E53_IA1 擴(kuò)展板驅(qū)動(dòng)文件。
在復(fù)制文件的時(shí)候,按照上一篇文章中所說(shuō)的,復(fù)制i2c.h
到Inc 文件夾,復(fù)制i2c.c
到 Src 文件夾,再?gòu)?fù)制自己編寫(xiě)的驅(qū)動(dòng)文件E53_IA1.c
、E53_IA1.h
到 Hardware文件夾。
IoT-Studio中提供的默認(rèn)工程已經(jīng)復(fù)制好了這些文件,無(wú)需再次添加,如圖:
因?yàn)?LiteOS 的整個(gè)項(xiàng)目工程使用 make 構(gòu)建,所以復(fù)制驅(qū)動(dòng)文件之后,需要添加驅(qū)動(dòng)文件的路徑到 makefile 中,加入編譯。
project.mk
文件指明了工程中所有文件的路徑:
在該文件中:
C文件路徑
HARDWARE_SRC:對(duì)應(yīng)Hardware文件夾下的Src文件夾
USER_SRC:對(duì)應(yīng)Src文件夾
頭文件路徑
HARDWARE_INC:對(duì)應(yīng)Hardware文件夾下的Inc文件夾
USER_INC:對(duì)應(yīng)Inc文件夾
如下,E53_IA1 驅(qū)動(dòng)的底層 I2C 接口代碼i2c.c
路徑添加到USER_SRC中:
E53_IA1 驅(qū)動(dòng)的底層 I2C 接口代碼i2c.h
路徑添加到USER_INC中:
因?yàn)镾C1和IA1的驅(qū)動(dòng)中都包含BH1750的驅(qū)動(dòng),所以添加的時(shí)候需要注意去掉E53_SC1 的驅(qū)動(dòng)文件
E53_SC1.c
和E53_SC1.h
,否則會(huì)引起沖突。
基于 I2C 驅(qū)動(dòng)的 E53_IA1 驅(qū)動(dòng)文件E53_IA1.c
添加到HARDWARE_SRC中(默認(rèn)未添加,需要手動(dòng)添加):
基于 I2C 驅(qū)動(dòng)的 E53_IA1 驅(qū)動(dòng)文件E53_IA1
添加到 HARDWARE_INC 中(默認(rèn)未添加,需要手動(dòng)添加):
至此,復(fù)制文件到LiteOS工程中,并將新復(fù)制的文件路徑添加到makefile中,加入工程編譯,就完成了驅(qū)動(dòng)的移植。
在第一篇文章中詳細(xì)的講述了在LiteOS中初始化設(shè)備的兩種方式:
在系統(tǒng)啟動(dòng)調(diào)度之前初始化:設(shè)備在系統(tǒng)中隨時(shí)可被任意任務(wù)使用
在任務(wù)中初始化:設(shè)備一般只在該任務(wù)中被使用
本文中移植的 E53_IA1 擴(kuò)展板驅(qū)動(dòng),不需要多個(gè)任務(wù)去操作,只需要傳感器數(shù)據(jù)采集任務(wù)操作即可,所以初始化放在數(shù)據(jù)采集任務(wù)中。
接下來(lái)首先創(chuàng)建一個(gè)文件夾(如果已有,不用再次創(chuàng)建),用于存放本系列教程實(shí)驗(yàn)的代碼:
在該文件夾中創(chuàng)建一個(gè)文件:
編寫(xiě)代碼:
#include#include "lcd.h" #include "E53_IA1.h" /* 存放E53_IA1擴(kuò)展板傳感器數(shù)據(jù),可在E53_IA1.h中查看定義 */ E53_IA1_Data_TypeDef E53_IA1_Data; /* 用于數(shù)據(jù)采集和數(shù)據(jù)處理任務(wù)間同步的信號(hào)量 */ osal_semp_t sync_semp; /* 數(shù)據(jù)采集任務(wù)-低優(yōu)先級(jí) */ static int data_collect_task_entry() { /* 初始化擴(kuò)展板 */ Init_E53_IA1(); while (1) { /* 讀取擴(kuò)展板板載數(shù)據(jù),存到數(shù)據(jù)結(jié)構(gòu)體E53_IA1_Data中 */ E53_IA1_Read_Data(); /* 數(shù)據(jù)讀取完畢,釋放信號(hào)量,喚醒數(shù)據(jù)處理任務(wù) */ osal_semp_post(sync_semp); /* 任務(wù)睡眠2s */ osal_task_sleep(2*1000); } } /* 數(shù)據(jù)處理任務(wù)-高優(yōu)先級(jí) */ static int data_deal_task_entry() { /* lux- 當(dāng)次數(shù)據(jù),old-lux-上次數(shù)據(jù) */ int lux = 0, old_lux = 0; int temperature = 0, old_temperature = 0;; int humidity; /* LCD清屏,防止干擾顯示 */ LCD_Clear(WHITE); while (1) { /* 等待信號(hào)量,未等到說(shuō)明數(shù)據(jù)還未采集,阻塞等待 */ osal_semp_pend(sync_semp, cn_osal_timeout_forever); /* 信號(hào)量等待,被喚醒,開(kāi)始處理數(shù)據(jù) */ //處理光照強(qiáng)度 old_lux = lux; lux = (int)E53_IA1_Data.Lux; printf("BH1750 Value is %d\r\n", lux); LCD_ShowString(10, 100, 200, 16, 16, "BH1750 Value is:"); LCD_ShowNum(140, 100, lux, 5, 16); /* 光照閾值為1000,自動(dòng)點(diǎn)亮或者熄滅路燈 */ if(old_lux < 1000 && lux > 1000) { HAL_GPIO_WritePin(IA1_Light_GPIO_Port, IA1_Light_Pin, GPIO_PIN_RESET); printf("Light OFF!\r\n"); } else if(old_lux > 1000 && lux < 1000) { HAL_GPIO_WritePin(IA1_Light_GPIO_Port, IA1_Light_Pin, GPIO_PIN_SET); printf("Light ON!\r\n"); } //處理濕度數(shù)據(jù) humidity = E53_IA1_Data.Humidity; printf("Humidity is %d\r\n", humidity); LCD_ShowString(10, 120, 200, 16, 16, "Humidity: "); LCD_ShowNum(140, 120, humidity, 5, 16); //處理溫度數(shù)據(jù) old_temperature = temperature; temperature = E53_IA1_Data.Temperature; printf("Temperature is %d\r\n", temperature); LCD_ShowString(10, 140, 200, 16, 16, "Temperature: "); LCD_ShowNum(140, 140, temperature, 5, 16); /* 溫度閾值為30,自動(dòng)開(kāi)啟或者關(guān)閉電機(jī) */ if(old_temperature < 30 && temperature >= 30) { HAL_GPIO_WritePin(IA1_Motor_GPIO_Port, IA1_Motor_Pin, GPIO_PIN_SET); printf("Motor ON!\r\n"); } else if(old_temperature >= 30 && temperature < 30) { HAL_GPIO_WritePin(IA1_Motor_GPIO_Port, IA1_Motor_Pin, GPIO_PIN_RESET); printf("Motor OFF!\r\n"); } } } /* 標(biāo)準(zhǔn)demo啟動(dòng)函數(shù),函數(shù)名不要修改,否則會(huì)影響下一步實(shí)驗(yàn) */ int standard_app_demo_main() { /* 創(chuàng)建信號(hào)量 */ osal_semp_create(&sync_semp, 1, 0); /* 數(shù)據(jù)處理任務(wù)的優(yōu)先級(jí)應(yīng)高于數(shù)據(jù)采集任務(wù) */ osal_task_create("data_collect",data_collect_task_entry,NULL,0x400,NULL,3); osal_task_create("data_deal",data_deal_task_entry,NULL,0x400,NULL,2); return 0; }
然后按照之前的方法,在 user_demo.mk 中將e51_ia1_driver_demo.c
文件添加到makefile中,加入編譯:
最后在.sdkconfig
中配置開(kāi)啟宏定義:
編譯,燒錄,即可看到實(shí)驗(yàn)現(xiàn)象。
LCD屏幕上顯示當(dāng)前傳感器采集的亮度值,溫度值,濕度值,并且每2s更新一次。
當(dāng)亮度值低于1000時(shí),E53_IA1擴(kuò)展板的補(bǔ)光燈自動(dòng)點(diǎn)亮:
當(dāng)亮度值高于1000時(shí),E53_IA1擴(kuò)展板的補(bǔ)光燈自動(dòng)熄滅:
在調(diào)節(jié)溫度的時(shí)候,可以用手按著SHT30溫濕度傳感器,天干物燥,務(wù)必提前觸摸一下金屬物體,釋放靜電,防止靜電破壞傳感器!
當(dāng)溫度上升到30°的時(shí)候,電機(jī)自動(dòng)啟動(dòng),當(dāng)溫度降低到30°以下時(shí),電機(jī)自動(dòng)關(guān)閉。
另外,打開(kāi)IoT-Studio自帶的串口終端,可以查看到串口輸出的工作信息:
linkmain:V1.2.1 AT 10:40:09 ON Dec 5 2019 BH1750 Value is 237 Humidity is 19 Temperature is 28 WELCOME TO IOT_LINK SHELL LiteOS:/>BH1750 Value is 1074 Light OFF! Humidity is 19 Temperature is 29 BH1750 Value is 14086 Humidity is 20 Temperature is 30 Motor ON! BH1750 Value is 284 Light ON! Humidity is 21 Temperature is 30 BH1750 Value is 303 Humidity is 21 Temperature is 29 Motor OFF! ……
到此,相信大家對(duì)“LiteOS怎么使用”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!