Linux人工智能開發(fā)實例 課件 3.2 城市揚塵監(jiān)測系統(tǒng)開發(fā)案例_第1頁
Linux人工智能開發(fā)實例 課件 3.2 城市揚塵監(jiān)測系統(tǒng)開發(fā)案例_第2頁
Linux人工智能開發(fā)實例 課件 3.2 城市揚塵監(jiān)測系統(tǒng)開發(fā)案例_第3頁
Linux人工智能開發(fā)實例 課件 3.2 城市揚塵監(jiān)測系統(tǒng)開發(fā)案例_第4頁
Linux人工智能開發(fā)實例 課件 3.2 城市揚塵監(jiān)測系統(tǒng)開發(fā)案例_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第3章城市環(huán)境采集Linux開發(fā)案例

3.2城市揚塵監(jiān)測系統(tǒng)開發(fā)案例城市環(huán)境采集Linux開發(fā)案例項目采用Web服務(wù)器BOA提供服務(wù),通過字符設(shè)備驅(qū)動獲取氣體傳感器采集數(shù)據(jù)值,最終軟件界面使用WEB框架實現(xiàn),根據(jù)功能需求分析,城市揚塵監(jiān)測系統(tǒng)主要分為兩個功能界面,分別如下:1)運營首頁頁面:將TVOC氣體傳感器采集的數(shù)據(jù),通過儀表盤以及曲線圖顯示在界面上。2)環(huán)境數(shù)據(jù)頁面:城市PM2.5:環(huán)境數(shù)據(jù)動態(tài)分布圖。3.2.1軟件界面框架分析城市揚塵監(jiān)測系統(tǒng)運營首頁環(huán)境數(shù)據(jù)揚塵天氣揚塵曲線城市綜合信息展示城市環(huán)境采集Linux開發(fā)案例Web頁面總體上采用bootstrap框架實現(xiàn),通過fusioncharts圖表庫設(shè)計儀表盤以及曲線圖。主界面分為左右兩部分,左邊用于顯示一級導航,右邊用于顯示二級導航以及主體內(nèi)容。主體內(nèi)容通過柵格系統(tǒng)進行布局顯示城市揚塵監(jiān)測系統(tǒng)功能界面。3.2.1軟件界面框架分析div.headul.side-navul.top-navdiv.contentdiv.maincontainer-fluiddiv.col-lg-6col-md-6col-sm-6col-xs-6div.col-lg-6col-md-6col-sm-6col-xs-6div.rowdiv.row城市環(huán)境采集Linux開發(fā)案例1)內(nèi)核采用工業(yè)I/O子系統(tǒng)來控制ADC,該子系統(tǒng)主要為AD轉(zhuǎn)換或者DA轉(zhuǎn)換的傳感器設(shè)計。下面以SAR-ADC為例子,介紹ADC的基本配置方法。2)SAR-ADC設(shè)備樹配置方法如下:RK3399SAR-ADC的DTS節(jié)點在kernel/arch/arm64/boot/dts/rockchip/rk3399.dtsi文件中定義,如下所示:3.2.2TVOCLinux驅(qū)動開發(fā)ADC設(shè)備驅(qū)動開發(fā)(程序源碼詳細請查看文檔)saradc:saradc@ff100000{compatible="rockchip,rk3399-saradc";reg=<0x00xff1000000x00x100>;interrupts=<GIC_SPI62IRQ_TYPE_LEVEL_HIGH0>;#io-channel-cells=<1>;clocks=<&cruSCLK_SARADC>,<&cruPCLK_SARADC>;clock-names="saradc","apb_pclk";status="disabled";};城市環(huán)境采集Linux開發(fā)案例ADC驅(qū)動已經(jīng)被編譯到缺省內(nèi)核中,不需要使用insmod方式加載。TVOC傳感器ADC驅(qū)動測試通過sysfs方式進行操作,首先調(diào)用open函數(shù)打開設(shè)備文件“/sys/devices/platform/ff100000.saradc/iio:device0”,接著在adcReadRaw中調(diào)用設(shè)備文件的read函數(shù)讀取ADC接口原始電壓數(shù)據(jù),讀取的數(shù)據(jù)在adcReadCh0Volage函數(shù)轉(zhuǎn)換成有效TVOC檢測數(shù)據(jù)。3.2.2TVOCLinux驅(qū)動開發(fā)TVOC應(yīng)用程序(程序源碼詳細請查看文檔)intadcReadRaw(intch){ intret=-1; if(ch>=0&&ch<=5){ charbuf[128]; snprintf(buf,128,DEVDIR"/in_voltage%d_raw",ch); intfd=open(buf,O_RDONLY); if(fd>0){ ret=read(fd,buf,128); if(ret>0){ buf[ret]='\0'; ret=atoi(buf); } close(fd); } } returnret;}城市環(huán)境采集Linux開發(fā)案例GPIO(GeneralPurposeInputOutput,GPIO是微處理器的通用輸入/輸出接口。微處理器可以通過向GPIO控制寄存器寫入數(shù)據(jù)來控制GPIO的模式,實現(xiàn)對某些設(shè)備的控制或信號采集功能。GPIO在工作時有3種工作模式,即輸入、輸出和高阻態(tài),這三種狀態(tài)的使用和功能都有所不同,在設(shè)置時需要根據(jù)實際的外接設(shè)備來對引腳進行配置。下面對GPIO的這三種狀態(tài)進行簡單的概述。(1)輸入模式。輸入模式是指GPIO被配置為接收外接電平信息的模式,通常讀取的信息為電平信息,即高電平為1,低電平為0。這時讀取的高低電平是根據(jù)微處理器的電源高低來劃分的,相對于5V電源的微處理器,判斷為高電平時的檢測電壓為3.3~5V;小于2V時則微處理器判斷為低電平。相對于3.3V電源的微處理器,判斷為高電平時的檢測電壓為2~3.3V;小于0.8V時則微處理器判斷為低電平。3.2.3LEDLinux驅(qū)動開發(fā)GPIO驅(qū)動開發(fā)基礎(chǔ)城市環(huán)境采集Linux開發(fā)案例(2)輸出模式。輸出模式是指GPIO被配置為主動向外部輸出電壓的模式,通過向外輸出電壓可以實現(xiàn)對一般開關(guān)類設(shè)備的實時主動控制。當程序中向相應(yīng)引腳寫1時,GPIO會向外輸出高電平,通常這個電平為微處理器的電源電壓;當程序中向相應(yīng)引腳寫0時,GPIO會向外輸出低電平,通常這個低電平為電源地的電壓。(3)高阻態(tài)模式。高阻態(tài)模式是指GPIO引腳內(nèi)部電阻的阻值無限大,大到幾乎占有外接輸出的全部電壓。這種模式通常在微處理器采集外部模擬電壓時使用,通過將相應(yīng)GPIO引腳配置為高阻態(tài)模式和輸入模式,通過配合微處理器的ADC可以實現(xiàn)準確的模擬量電平讀取。GPIO驅(qū)動是Linux驅(qū)動開發(fā)中最基礎(chǔ)、常用的驅(qū)動。例如要驅(qū)動一個LED燈、鍵盤掃描、輸出高低電平等等。Linux內(nèi)核在硬件操作層的基礎(chǔ)上封裝了一些統(tǒng)一的GPIO操作接口,也就是GPIO驅(qū)動框架。3.2.3LEDLinux驅(qū)動開發(fā)GPIO驅(qū)動開發(fā)基礎(chǔ)城市環(huán)境采集Linux開發(fā)案例1)設(shè)備樹基本概念ARM內(nèi)核版本3.x之后引入了原來體系架構(gòu)用于描述硬件資源的數(shù)據(jù)結(jié)構(gòu)FlattenedDeviceTree,通過bootloader將硬件資源傳給內(nèi)核,使得內(nèi)核和硬件資源描述相對獨立。3.x之后的內(nèi)核支持設(shè)備樹,除了內(nèi)核編譯時需要打開相對應(yīng)的選項外,bootloader也需要支持將設(shè)備樹的數(shù)據(jù)結(jié)構(gòu)傳給內(nèi)核。DeviceTree描述的信息包括CPU的數(shù)量和類別、內(nèi)存基地址和大小、總線和橋、外設(shè)連接、中斷控制器和中斷使用情況和GPIO使用情況等。2)設(shè)備樹的組成和使用設(shè)備樹包含DTC(devicetreecompiler),DTS(devicetreesource和DTB(devicetreeblob)。其對應(yīng)關(guān)系如圖所示。

設(shè)備樹DTS、DTSIDTBDTC3.2.3LEDLinux驅(qū)動開發(fā)城市環(huán)境采集Linux開發(fā)案例3)DTS和DTSI*.dts文件是一種ASCII文本對DeviceTree的描述,位于內(nèi)核的/arch/arm/boot/dts目錄下,一個*.dts文件對應(yīng)一個ARM處理器,*.dtsi文件作用:一個SOC可能有多個不同的電路板,而每個電路板擁有一個*.dts,為了減少代碼的冗余,設(shè)備樹將這些共同部分提煉保存在*.dtsi文件中,供不同的dts共同使用。*.dtsi的使用方法,類似于頭文件的使用,在dts文件中需要進行包含用到的*.dtsi文件。4)DTC編譯工具DTC可以將.dts文件編譯成.dtb文件。DTC的源代碼位于內(nèi)核的scripts/dtc目錄,內(nèi)核選中CONFIG_OF,編譯內(nèi)核的時候,主機可執(zhí)行程序DTC就會被編譯出來。即scripts/dtc/Makefile中:

設(shè)備樹hostprogs-y:=dtcalways:=$(hostprogs-y)5)DTBDTC編譯*.dts生成的二進制文件(*.dtb),bootloader在引導內(nèi)核時,會預先讀取*.dtb到內(nèi)存,進而由內(nèi)核解析。3.2.3LEDLinux驅(qū)動開發(fā)城市環(huán)境采集Linux開發(fā)案例LED硬件如圖所示。4個LED燈最左側(cè)D1可以用PWM0通道來控制,D2,D3,D4地址分別對應(yīng):gpio29,gpio211,gpio212。LED驅(qū)動開發(fā)3.2.3LEDLinux驅(qū)動開發(fā)城市環(huán)境采集Linux開發(fā)案例1)設(shè)備樹分析:設(shè)備樹位于:gw3399/kernel/arch/arm64/boot/dts/rockchip/x3399-linux.dts由此可知四個LED燈的IO口分別對應(yīng):LED驅(qū)動開發(fā)gpios=<&gpio29GPIO_ACTIVE_LOW>;gpios=<&gpio211GPIO_ACTIVE_LOW>;gpios=<&gpio212GPIO_ACTIVE_LOW>; gpios=<&gpio08GPIO_ACTIVE_LOW>;2)LED配置需要在設(shè)備樹里添加如下內(nèi)容,LED共有四個,所以需要添加四個子節(jié)點,LED配置如下:leds{compatible="gpio-leds";(程序源碼詳細請查看文檔)3.2.3LEDLinux驅(qū)動開發(fā)城市環(huán)境采集Linux開發(fā)案例3)LED驅(qū)動開發(fā)驅(qū)動源代碼位置:gw3399-linux/kernel/drivers/leds/leds-gpio.c。驅(qū)動代碼如下所示:LED驅(qū)動開發(fā)(完整程序源碼詳細請查看文檔)staticstructplatform_drivergpio_led_driver={.probe=gpio_led_probe,.shutdown=gpio_led_shutdown,.driver={.name="leds-gpio",.of_match_table=of_gpio_leds_match,},};staticconststructof_device_idof_gpio_leds_match[]={{.compatible="gpio-leds",},{},};MODULE_DEVICE_TABLE(of,of_gpio_leds_match);3.2.3LEDLinux驅(qū)動開發(fā)城市環(huán)境采集Linux開發(fā)案例3)LED驅(qū)動開發(fā)驅(qū)動源代碼位置:gw3399-linux/kernel/drivers/leds/leds-gpio.c。驅(qū)動代碼如下所示:LED驅(qū)動開發(fā)(完整程序源碼詳細請查看文檔)staticstructplatform_drivergpio_led_driver={.probe=gpio_led_probe,.shutdown=gpio_led_shutdown,.driver={.name="leds-gpio",.of_match_table=of_gpio_leds_match,},};staticconststructof_device_idof_gpio_leds_match[]={{.compatible="gpio-leds",},{},};MODULE_DEVICE_TABLE(of,of_gpio_leds_match);3.2.3LEDLinux驅(qū)動開發(fā)城市環(huán)境采集Linux開發(fā)案例LED驅(qū)動主要實現(xiàn)對硬件設(shè)備的基本控制,具體的功能要由上層應(yīng)用調(diào)用驅(qū)動提供的接口對設(shè)備進行控制。LED應(yīng)用功能函數(shù)說明如表所示。LED應(yīng)用程序(完整LED源碼詳細請查看文檔)3.2.3LEDLinux驅(qū)動開發(fā)函數(shù)名稱參數(shù)說明函數(shù)功能voidledInit(void)無led初始化voidledOn(intleds)leds:led燈參數(shù)LED打開函數(shù)voidledOff(intleds)leds:led燈參數(shù)LED關(guān)閉函數(shù)城市環(huán)境采集Linux開發(fā)案例PWM(PulseWidthModulation,PWM)脈沖寬度調(diào)制技術(shù),通過對一系列脈沖的寬度進行調(diào)制,來等效地獲得所需要波形(含形狀和幅值),根據(jù)設(shè)定的周期和占空比從I/O口輸出控制信號,一般用來控制LED燈亮度或電機轉(zhuǎn)速。占空比:輸出的PWM中,高電平保持的時間與該時鐘周期的時間之比。如圖所示。PWM驅(qū)動開發(fā)概述(完整LED源碼詳細請查看文檔)3.2.4PWMLinux驅(qū)動開發(fā)脈沖時間脈沖時間周期城市環(huán)境采集Linux開發(fā)案例RK3399下PWM的驅(qū)動編寫,依賴于內(nèi)核pwm的API,開發(fā)步驟如下:1)PWM控制的設(shè)備驅(qū)動文件中包含以下頭文件:2)申請PWM使用3)配置PWM的占空比4)使能PWM函數(shù)5)禁止pwm6)釋放PWM資源,比如釋放所申請的pwm7)設(shè)置PWM輸出極性8)內(nèi)核PWM驅(qū)動常見結(jié)構(gòu)體與函數(shù)PWM設(shè)備Linux驅(qū)動開發(fā)(完整程序源碼詳細請查看文檔)3.2.4PWMLinux驅(qū)動開發(fā)城市環(huán)境采集Linux開發(fā)案例LED的PWM驅(qū)動通過sysfs虛擬文件系統(tǒng)方式控制操作,首先調(diào)用pwmLedInit函數(shù),通過以下接口對設(shè)備初始化。

pwmLedPeriod(1000);//設(shè)置1000ns的持續(xù)時間

pwmLedEnable(0);//設(shè)置使能

pwmLedValue(0);//設(shè)置占空比

pwmLedPolarity(0);//設(shè)置正常模式PWM應(yīng)用程序(完整程序源碼詳細請查看文檔)3.2.4PWMLinux驅(qū)動開發(fā)城市環(huán)境采集Linux開發(fā)案例揚塵檢測功能設(shè)計分為web應(yīng)用設(shè)計和ARM擴展板硬件功能設(shè)計兩部分組成。Web應(yīng)用用于顯示揚塵實時采集數(shù)據(jù)以及歷史曲線圖;ARM擴展板硬件功能設(shè)計主要分為三個部分第一:LED燈根據(jù)揚塵梯度顯示燈個數(shù)第二:OLED屏用于顯示TVOC采集數(shù)據(jù)值第三:點陣屏根據(jù)揚塵實時采集數(shù)據(jù)顯示不同笑臉3.2.5揚塵檢測功能設(shè)計1、Web應(yīng)用設(shè)計Web應(yīng)用程序主要是實時顯示TVOC傳感器采集數(shù)據(jù),并通過圖表的形式展現(xiàn)。城市環(huán)境采集界面主要有兩大功能,一是TVOC傳感器采集數(shù)據(jù)實時顯示,二是傳感器采集數(shù)據(jù)歷史曲線展示。2、ARM擴展板硬件功能設(shè)計揚塵監(jiān)測主應(yīng)用程序是系統(tǒng)項目在網(wǎng)關(guān)上運行的核心程序,程序運行流程與功能說明:1)初始化OLED屏、點陣屏、LED燈2)adcReadRaw()讀取TVOC傳感器數(shù)據(jù)3)計算揚塵梯度4)讀取TVOC傳感器數(shù)據(jù)5)OLED屏字符顯示城市環(huán)境采集Linux開發(fā)案例(HTML源碼詳細請查看文檔)3.2.5揚塵檢測功能設(shè)計6)OLED設(shè)備寫數(shù)據(jù)操作,更新屏幕顯示7)點陣屏笑臉顯示8)點陣屏刷新顯示內(nèi)容9)關(guān)閉LED燈,根據(jù)揚塵梯度點亮LED燈10)休眠1秒繼續(xù)到3)步驟進行循環(huán)程序中使用的主要函數(shù)說明城市環(huán)境采集Linux開發(fā)案例(主應(yīng)用程序源碼詳細請查看文檔)3.2.5揚塵檢測功能設(shè)計函數(shù)名稱功能說明voidfontShow16(intx,inty,char*str,void(*df)(int,int,int))OLED屏8*16或16*16字符顯示voidled8x8Face(inti)點陣屏笑臉顯示voidled8x8Point(intx,inty,intst)點陣屏設(shè)置指定坐標數(shù)據(jù)voidoledInit(void)OLED屏初始化voidled8x8Init(void)點陣屏初始化voidledInit(void)LED初始化intadcReadRaw(intch)讀取ADC接口原始電壓數(shù)據(jù)1、ARM擴展模塊硬件連接ARM擴展模塊硬件連接,參考1.1.5開發(fā)實踐:顯示模塊驅(qū)動開發(fā)與測試。2、Boa編譯與安裝1)通過Moba軟件復制boa源碼到邊緣計算網(wǎng)關(guān)2)解壓源碼,運行配置命令./configure。3)修訂源碼4)boa配置城市環(huán)境采集Linux開發(fā)案例(程序源碼詳細請查看文檔)3.2.6開發(fā)實踐:揚塵檢測系統(tǒng)3、城市揚塵監(jiān)測功能測試1)通過Moba軟件復制boa_reference文件到邊緣計算網(wǎng)關(guān)。將boa_reference文件下的www文件拷貝到根目錄。城市環(huán)境采集Linux開發(fā)案例(程序源碼詳細請查看文檔)3.2.6開發(fā)實踐:揚塵檢測系統(tǒng)$sudocp-r/home/

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論