亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Android的車胎監(jiān)測系統(tǒng)軟件的設(shè)計(jì)與實(shí)現(xiàn)

        2019-08-29 08:03:22
        計(jì)算機(jī)測量與控制 2019年8期
        關(guān)鍵詞:車胎胎壓后臺

        (無錫職業(yè)技術(shù)學(xué)院 物聯(lián)網(wǎng)技術(shù)學(xué)院,江蘇 無錫 214121)

        0 引言

        目前車胎監(jiān)測系統(tǒng)實(shí)現(xiàn)方案中,車胎內(nèi)傳感器實(shí)時監(jiān)測胎溫胎壓信息,通過無線發(fā)送到無線接收端,無線接收端通常通過CAN總線傳送到儀表盤的專用的液晶顯示屏進(jìn)行顯示,當(dāng)超過相應(yīng)閾值,在液晶顯示屏進(jìn)行告警提醒并配合聲音告警[1-4]。在目前的車胎監(jiān)測實(shí)現(xiàn)方案中存在以下兩點(diǎn)不足:1)車胎告警閾值由硬件設(shè)定導(dǎo)致使用過程中不能動態(tài)調(diào)整告警閾值;2)液晶顯示屏通常只顯示車胎狀態(tài)異常,并不顯示實(shí)際胎溫和胎壓數(shù)值,因此告警顯示不夠具體、直觀,不便于駕駛員對車胎異常情況的精確判斷。

        由于基于Android的中控大屏由于具有豐富的娛樂功能、方便與手機(jī)和網(wǎng)絡(luò)互聯(lián)的優(yōu)點(diǎn),已經(jīng)成為高端新能源客車的流行配置。在配置Android大屏的客車上,司機(jī)需要同時關(guān)注Android中控大屏和車胎監(jiān)測信息顯示液晶屏,造成操作不方便。此外通過Android大屏進(jìn)行胎溫胎壓的顯示,可以更直觀顯示精確的胎溫胎壓數(shù)值,同時告警閾值為軟件設(shè)定值,可以動態(tài)地進(jìn)行告警閾值調(diào)整,使得駕駛員可以根據(jù)季節(jié)不同來選擇合適的告警閾值。因此有必要通過設(shè)計(jì)轉(zhuǎn)換模塊,并設(shè)計(jì)和實(shí)現(xiàn)相應(yīng)的Android端應(yīng)用軟件,將車胎監(jiān)測信息接到Android中控大屏進(jìn)行顯示,從而省去專用液晶屏,降低系統(tǒng)成本和方便司機(jī)操作,且可自行設(shè)定報(bào)警閾值,車胎監(jiān)測信息展示更直觀便捷。

        本文介紹車胎監(jiān)測Android端應(yīng)用軟件的設(shè)計(jì)和實(shí)現(xiàn),其綜合利用startService和bindService,實(shí)現(xiàn)程序界面前臺運(yùn)行時,實(shí)時接收車胎監(jiān)測報(bào)文并顯示胎溫胎壓實(shí)時值,若超過告警閾值,則相應(yīng)位置的車胎顯示異常告警;當(dāng)程序界面后臺運(yùn)行時,后臺Service持續(xù)接收車胎監(jiān)測報(bào)文,當(dāng)超過相應(yīng)閾值,調(diào)出程序界面進(jìn)行顯示和告警,經(jīng)實(shí)際應(yīng)用滿足了實(shí)時車胎監(jiān)測的功能。

        1 系統(tǒng)硬件結(jié)構(gòu)及原理

        系統(tǒng)硬件結(jié)構(gòu)框圖如圖1所示。上半部分,輪胎模塊和TPMS節(jié)點(diǎn)模塊采用目前市場主流的商用車胎監(jiān)測系統(tǒng)。由于車胎監(jiān)測系統(tǒng)通常接入CAN總線,而Android中控大屏通常使用USB通信接口,因此需要設(shè)計(jì)相應(yīng)轉(zhuǎn)換模塊??紤]到TTL轉(zhuǎn)USB串口(CH340芯片)的模塊較為通用,因此設(shè)計(jì)CAN接口轉(zhuǎn)TTL的模塊和通用的TTL轉(zhuǎn)USB模塊相連接,完成CAN總線接口和USB接口的轉(zhuǎn)換。Android中控大屏支持USB OTG接口,其作為USB主設(shè)備與USB從設(shè)備進(jìn)行USB串口通信。車胎監(jiān)測系統(tǒng)通過轉(zhuǎn)換模塊轉(zhuǎn)成USB接口接到Android系統(tǒng)。

        圖1 系統(tǒng)硬件結(jié)構(gòu)圖

        系統(tǒng)的運(yùn)行原理如下:在車輛行駛時,車輪處于轉(zhuǎn)動狀態(tài),安裝在車輪內(nèi)的監(jiān)測傳感器將被觸發(fā),并每隔100 ms通過無線方式發(fā)送車胎監(jiān)測數(shù)據(jù)。TPMS節(jié)點(diǎn)無線接收模塊收到無線上報(bào)的監(jiān)測數(shù)據(jù),并通過CAN總線接口發(fā)送到CAN總線。利用自行設(shè)計(jì)的轉(zhuǎn)換模塊,從CAN總線接收監(jiān)測數(shù)據(jù),并轉(zhuǎn)變USB串口數(shù)據(jù)向上發(fā)送給Android中控大屏。車胎監(jiān)測系統(tǒng)需要設(shè)計(jì)Android應(yīng)用程序,并安裝部署在中控大屏上。該Android應(yīng)用程序?qū)⑼ㄟ^USB串口接收傳感器周期上報(bào)的每個車胎的胎溫和胎壓數(shù)據(jù)報(bào)文。每個數(shù)據(jù)報(bào)文固定10個字節(jié),格式如圖2所示。

        圖2 胎溫胎壓監(jiān)測報(bào)文格式

        程序根據(jù)報(bào)文計(jì)算胎溫t和胎壓p,計(jì)算公式如下(D[i]表示車胎監(jiān)測報(bào)文除去報(bào)文頭部分中下標(biāo)為i的字節(jié)的8位無符號整數(shù)值):

        t(Kpa)=D[1]*5.5

        (1)

        p(℃)=(D[3]*256+D[2])*0.03125-273

        (2)

        系統(tǒng)軟件定義胎溫上限閾值tH、胎壓下限閾值pL和胎壓上限閾值pH。當(dāng)t>=tH或p<=pL或p>=pH任一條件滿足時,表示車胎狀態(tài)異常,程序產(chǎn)生告警提醒駕駛員。

        2 軟件總體模塊設(shè)計(jì)

        Android中控大屏的車胎監(jiān)測應(yīng)用程序需要持續(xù)接收上報(bào)的USB串口數(shù)據(jù)報(bào)文進(jìn)行胎溫和胎壓的數(shù)據(jù)展示,當(dāng)胎溫或胎壓超過指定閾值時,進(jìn)行相應(yīng)的告警,同時告警閾值可進(jìn)行動態(tài)調(diào)整。本文設(shè)計(jì)的車胎監(jiān)測應(yīng)用程序總體架構(gòu)如圖3所示。

        圖3 胎壓監(jiān)測程序架構(gòu)

        MainActivity 是主操作界面,用來實(shí)時展示傳感器上報(bào)的車輛所有車胎的胎溫胎壓信息。為了滿足主操作界面后臺運(yùn)行時亦能持續(xù)接收胎壓監(jiān)測報(bào)文,通過TireService后臺服務(wù)進(jìn)行USB-OTG串口數(shù)據(jù)接收和胎壓監(jiān)測報(bào)文解析操作,當(dāng)超出相應(yīng)胎溫和胎壓閾值時調(diào)出程序主界面進(jìn)行告警顯示。胎溫和胎壓閾值可手動進(jìn)行調(diào)節(jié),通過點(diǎn)擊設(shè)置按鈕彈出對話框SettingDialog進(jìn)行胎溫和胎壓閾值設(shè)置。

        AutoStartBroadcastReceiver用于實(shí)現(xiàn)當(dāng)Android開機(jī)啟動完成后,自動打開本監(jiān)測程序進(jìn)行接收胎壓胎溫報(bào)文信息。當(dāng)車胎監(jiān)測硬件斷開連接后,監(jiān)測程序應(yīng)當(dāng)結(jié)束運(yùn)行,通過UsbDetachedBroadcastReceiver實(shí)現(xiàn)。

        3 軟件詳細(xì)實(shí)現(xiàn)

        3.1 程序運(yùn)行流程

        程序運(yùn)行流程如圖4所示。系統(tǒng)開機(jī)和轉(zhuǎn)換模塊插入Android系統(tǒng)后,跳轉(zhuǎn)到本程序運(yùn)行。程序運(yùn)行后,啟動后臺服務(wù)TireService,TireService創(chuàng)建USB串口數(shù)據(jù)接收線程ReadThread,在接收線程中打開USB串口設(shè)備,并循環(huán)接收USB串口車胎監(jiān)測報(bào)文,通過Callback回調(diào)機(jī)制更新到Activity界面。

        圖4 程序軟件流程圖

        3.2 USB串口通信編程實(shí)現(xiàn)

        Android系統(tǒng)使用USB Host API與USB接口的轉(zhuǎn)換設(shè)備進(jìn)行通信。主要用到的API類包括UsbManager類(用來管理USB設(shè)備的類)、UsbDevice類(代表一個USB設(shè)備的類)、UsbInterface類(表示USB設(shè)備的一個接口)、UsbEndpoint類(表示一個接口的某個節(jié)點(diǎn))以及UsbConnection類(用連接進(jìn)行發(fā)送和接收數(shù)據(jù))[5-6]。

        與一般USB設(shè)備不同,USB串口設(shè)備還需要配置串口傳輸?shù)牟ㄌ芈?、?shù)據(jù)位、停止位和奇偶校驗(yàn)位等信息[7-8]。本文設(shè)計(jì)的轉(zhuǎn)換模塊采用的TTL和USB轉(zhuǎn)換芯片為CH340芯片,網(wǎng)絡(luò)上可以搜索到該芯片的免驅(qū)動Android USB Host模式的參考代碼,在實(shí)現(xiàn)USB串口通信代碼編程時,可參照進(jìn)行剪裁。

        3.3 程序啟動退出代碼實(shí)現(xiàn)

        1)系統(tǒng)開機(jī)啟動

        AutoStartBroadcastReceiver采用靜態(tài)注冊接收BOOT_COMPLETED,重寫OnReceive()方法,并在該方法中通過startActivity啟動程序[9]。其在AndroidManifest.xml設(shè)置為:

        AutoStartBroadcastReceiver實(shí)現(xiàn)如下:

        public class AutoStartBroadcastReceiver extends BroadcastReceiver {

        @Override

        public void onReceive(Context context, Intent intent) {

        String action = "android.intent.action.MAIN";

        String category = "android.intent.category.LAUNCHER";

        Intent myIntent = new Intent(context, MainActivity.class);

        myIntent.setAction(action);

        myIntent.addCategory(category); myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        context.startActivity(myIntent);

        }

        }

        2)設(shè)備插入啟動

        程序主界面MainActivity采用單例模式singleInstance,并監(jiān)聽轉(zhuǎn)換模塊插入動作USB_DEVICE_ATTACHED,并對USB插入動作設(shè)置過濾條件為對應(yīng)轉(zhuǎn)換模塊的PID和VID[5]。主界面在AndroidManifest.xml中設(shè)置如下:

        android:name=".MainActivity" android:launchMode="singleInstance">

        android:resource="@xml/device_filter" />

        其中device_filter.xml文件定義了轉(zhuǎn)換模塊USB設(shè)備的product-id和vendor-id。

        3)設(shè)備拔出退出

        當(dāng)車胎監(jiān)測USB設(shè)備從安卓拔出時,監(jiān)測程序程序需要停止程序運(yùn)行。因此在程序正常啟動后,通過代碼動態(tài)注冊廣播接收器usbDetachedBroadcastReceiver監(jiān)聽USB設(shè)備拔出動作USB_DEVICE_DETACHED。

        usbDetachedBroadcastReceiver=new UsbDetachedBroadcastReceiver();

        intentFilter = new IntentFilter();

        intentFilter.addAction("android.hardware.usb.action.USB_DEVICE_DETACHED");

        registerReceiver(usbDetachedBroadcastReceiver,intentFilter);

        usbDetachedBroadcastReceiver在代碼實(shí)現(xiàn)時,重寫OnReceive()方法,判斷為轉(zhuǎn)換模塊拔出,則設(shè)置退出標(biāo)記。

        public void onReceive(Context context, Intent intent) {

        UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);//獲取當(dāng)前撥出的USB設(shè)備

        if (device != null)

        {if(device.getProductId()==29987&&device.getVendorId()==6790) {//判斷拔出設(shè)備為車胎監(jiān)測轉(zhuǎn)換模塊,設(shè)置退出標(biāo)記

        Intent myIntent = new Intent(context, MainActivity.class);

        myIntent.putExtra("IsUsbDetached",true);

        context.startActivity(myIntent);

        }

        }

        }

        在MainActivity中重寫onNewIntent()方法,判斷退出標(biāo)志為真,調(diào)用finish方法結(jié)束程序[10]。

        protected void onNewIntent(Intent intent) {

        boolean IsUsbDetached=

        intent.getBooleanExtra("IsUsbDetached",false);

        if(IsUsbDetached)

        {

        //判斷已設(shè)置退出標(biāo)記,則彈出提示框提示設(shè)備斷開,并結(jié)束程序運(yùn)行

        }

        super.onNewIntent(intent);

        }

        3.4 后臺服務(wù)運(yùn)行

        為了保證程序前臺運(yùn)行與否,后臺服務(wù)均需要持續(xù)接收車胎監(jiān)測報(bào)文,采取了下列措施:

        1)后臺服務(wù)Service有兩種啟動方式startService和bindService。bindService啟動服務(wù)后,通過unbindService結(jié)束服務(wù),其啟動的服務(wù)與Activity是捆綁關(guān)系,當(dāng)Activity退出后,Service也會退出。Activity可與綁定服務(wù)通過回調(diào)接口的方式,方便快速進(jìn)行數(shù)據(jù)交互。

        startService啟動服務(wù)后,服務(wù)與Activity是分離的,當(dāng)Activity退出后,服務(wù)繼續(xù)存在,只有調(diào)用stopService,后臺Service才會結(jié)束,但startService啟動的服務(wù)通常只能通過廣播的方式將數(shù)據(jù)發(fā)回界面進(jìn)行顯示。

        這2種模式不是完全分離的,可以同時使用。本程序Activity在OnCreate階段,調(diào)用startService啟動車胎監(jiān)測服務(wù),在onResume階段通過bindService進(jìn)行服務(wù)綁定;在onPause階段調(diào)用unbindService進(jìn)行服務(wù)解綁,在onDestroy階段方調(diào)用stopService進(jìn)行結(jié)束服務(wù)操作。從而達(dá)到程序啟動后,后臺服務(wù)便啟動持續(xù)接收USB車胎監(jiān)測報(bào)文,當(dāng)程序在前臺運(yùn)行時,又可通過綁定服務(wù),簡便實(shí)現(xiàn)與Activity的雙向數(shù)據(jù)交互。

        在bindService進(jìn)行服務(wù)綁定時使用服務(wù)TireService內(nèi)定義的到Binder對象,MainActivity通過Binder對象可以將當(dāng)前設(shè)定的告警閾值以及當(dāng)前是否處于報(bào)警暫停狀態(tài)傳遞到服務(wù)TireService。

        public class Binder extends android.os.Binder{

        //界面?zhèn)鬟f報(bào)警閾值到Service

        public void Sethreshold(float twh,float tpl,float tph)

        {

        TireService.this.tiretempth=twh;

        TireService.this.tirepresstl=tpl;

        TireService.this.tirepressth=tph;

        }

        public void SetShowAlarm(boolean isshowalarm)

        {

        bshowAlarm=isshowalarm;

        }

        public TireService getService()

        {

        return TireService.this;

        }

        }

        在TireService內(nèi)需要定義回調(diào)接口,供服務(wù)中接收到USB車胎監(jiān)測報(bào)文后,通過回調(diào)接口將數(shù)據(jù)更新發(fā)回界面進(jìn)行顯示。

        private Callback callback=null;

        public void setCallback(Callback callback) {

        this.callback = callback;

        }

        public Callback getCallback() {

        return callback;

        }

        public static interface Callback{

        void OnSerialData(tireparam data);

        }

        主界面MainActivity需要實(shí)現(xiàn)ServiceConnection接口,實(shí)現(xiàn)onServiceConnected和onServiceDisconnected方法。

        public void onServiceConnected(ComponentName componentName, IBinder iBinder) {

        isBinded=true;

        binder= (TireService.Binder) iBinder; binder.Sethreshold(tiretempth,tirepresstl,tirepressth);

        binder.getService().setCallback(new TireService.Callback() {

        @Override

        public void OnSerialData(tireparam data) {

        //tvout.setText(data);

        Message msg=new Message();

        msg.obj=data;

        msg.what = IS_PktArr;

        handler.sendMessage(msg);

        }

        });

        }

        @Override

        public void onServiceDisconnected(ComponentName componentName) {

        isBinded=false;

        }

        2)設(shè)置Activity為singleInstance模式,并重寫onKeyDown函數(shù)對返回按鍵KEYCODE_BACK的處理,通過調(diào)用moveTaskToBack方法將Activity移動到后臺運(yùn)行,避免Activity被銷毀。

        public boolean onKeyDown(int keyCode, KeyEvent event) {

        if (keyCode == KeyEvent.KEYCODE_BACK) {//點(diǎn)擊返回按鍵

        if(bIsExit)

        {//如果USB設(shè)備拔出,則結(jié)束Activity和Service

        finish();

        Intent intent= new Intent(this, TireService.class);

        stopService(intent);

        return true;

        }

        moveTaskToBack(true);

        return true;

        }

        return super.onKeyDown(keyCode, event);

        }

        3)為了避免TireService因?yàn)橘Y源不足被系統(tǒng)銷毀或在任務(wù)管理器中被用戶強(qiáng)行關(guān)閉導(dǎo)致無法持續(xù)接收USB車胎監(jiān)測報(bào)文,采用了關(guān)閉重啟的策略。在服務(wù)的onStartCommand中設(shè)置返回START_FLAG_REDELIVERY標(biāo)記,代表service被kill后重新啟動,并攜帶上次啟動參數(shù)輸入?yún)?shù)intent。

        public int onStartCommand(Intent intent, int flags, int startId) {

        flags =flags| Service.START_FLAG_REDELIVERY;

        return super.onStartCommand(intent, flags, startId);

        }

        4) TireService服務(wù)啟動后,啟動讀取線程ReadThread。為了TireService被強(qiáng)行關(guān)閉重啟后仍能持續(xù)接收USB串口車胎監(jiān)測數(shù)據(jù)報(bào)文,因此將USB設(shè)備打開操作在讀取線程中。

        讀取線程ReadThread工作流程如圖5所示,首先枚舉查找USB轉(zhuǎn)換模塊設(shè)備,檢查程序是否被授予操作USB轉(zhuǎn)換模塊設(shè)備的權(quán)限,如果未授權(quán)該USB設(shè)備的操作權(quán)限,則通過PendingIntent申請USB操作權(quán)限。然后打開USB設(shè)備并循環(huán)接收USB車胎監(jiān)測報(bào)文,收到報(bào)文后獲得車胎位置以及相應(yīng)胎溫胎壓信息。當(dāng)程序界面MainActivity處在前臺運(yùn)行時,通過Callback回調(diào)機(jī)制發(fā)回程序界面進(jìn)行顯示,當(dāng)超過閾值進(jìn)行相應(yīng)報(bào)警。當(dāng)程序界面處在后臺運(yùn)行時,如果胎溫胎壓超過相應(yīng)閾值,則通過startActivity將程序界面轉(zhuǎn)到前臺運(yùn)行。

        圖5 ReadThread工作流程

        5)告警閾值處理和告警暫停

        告警閾值需要通過SettingDialog進(jìn)行調(diào)整,該對話框通過Callback機(jī)制將閾值設(shè)置數(shù)值返回主界面。

        當(dāng)用戶在設(shè)置對話框修改了告警閾值時,告警閾值將更新到主界面MainActivity中,并通過綁定服務(wù)時返回的Binder對象傳遞到后臺服務(wù)TireService中。同時為了程序被強(qiáng)行關(guān)閉時,也可獲得正確的告警閾值,在告警閾值更改的同時,將利用SharedPreference保存告警閾值進(jìn)行持久化存儲。在TireService服務(wù)啟動onStartCommand階段,判斷是否為MainActivity正常啟動TireService,還是因此程序被強(qiáng)行關(guān)閉而對服務(wù)的重啟。當(dāng)服務(wù)啟動為程序被強(qiáng)行關(guān)閉而對服務(wù)的重啟時,需要在持久化存儲中讀取保存的告警閾值,否則重啟服務(wù)時告警閾值為局部變量的默認(rèn)初始值0。

        為了避免持續(xù)收到告警車胎監(jiān)測報(bào)文時,持續(xù)調(diào)出程序主界面導(dǎo)致無用轉(zhuǎn)到其他程序執(zhí)行的情況,因此在告警顯示時,將出現(xiàn)告警暫停操作按鈕,點(diǎn)擊該按鈕后,在5分鐘內(nèi)即使收到胎溫或胎壓超過閾值的車胎監(jiān)測報(bào)文,也不會顯示告警情況。當(dāng)告警暫停定時結(jié)束后,程序即又回到接收到異常車胎監(jiān)測報(bào)文,便進(jìn)行正常告警的狀態(tài)。

        4 系統(tǒng)結(jié)果測試

        將車胎監(jiān)測系統(tǒng)安裝在新能源客車上,大客車配備Android顯示屏,通過轉(zhuǎn)換模塊將車胎監(jiān)測數(shù)據(jù)接到Android系統(tǒng),并通過本軟件進(jìn)行展示。由于實(shí)際部署在車輛上時,不便連接調(diào)試和查看調(diào)試信息,因此采用如圖6測試模型,Ginkgo USB-CAN總線適配器連接到PC上作為CAN數(shù)據(jù)發(fā)送源,PC機(jī)通過使用Ginkgo USB-CAN配套軟件按照車胎協(xié)議報(bào)文格式按照周期100 ms不間斷發(fā)送車胎監(jiān)測報(bào)文。作為CAN數(shù)據(jù)源的Ginkgo USB-CAN總線適配器,與車胎監(jiān)測轉(zhuǎn)換模塊連接,從而完成CAN接口報(bào)文轉(zhuǎn)換成USB串口數(shù)據(jù)包接入到Android系統(tǒng)。

        圖6 測試模型連接圖

        當(dāng)Android系統(tǒng)進(jìn)行上電啟動,系統(tǒng)啟動后自動運(yùn)行本應(yīng)用程序主界面MainActivity顯示車胎監(jiān)測胎溫胎壓信息。在測試告警時采用發(fā)送相同的車胎監(jiān)測數(shù)據(jù)報(bào)文,通過閾值設(shè)置對話框調(diào)節(jié)胎壓告警下限閾值超出該車胎特定監(jiān)測報(bào)文的胎壓數(shù)值,則進(jìn)行顯示告警。當(dāng)點(diǎn)擊返回鍵后,MainActivity退到后臺運(yùn)行,并通過后臺Service持續(xù)接收并解析USB串口車胎監(jiān)測報(bào)文,當(dāng)胎溫或胎壓超過指定閾值,則將MainActivity調(diào)到前臺進(jìn)行顯示。當(dāng)從通過任務(wù)管理將程序強(qiáng)行關(guān)閉時,后臺Service將自動重啟并接收解析USB串口車胎監(jiān)測信息,當(dāng)胎溫或胎壓超過指定閾值,則調(diào)出程序界面MainActivity進(jìn)行顯示。

        5 結(jié)束語

        本文設(shè)計(jì)現(xiàn)實(shí)了一個利用Android端進(jìn)行信息展示的車胎監(jiān)測系統(tǒng),系統(tǒng)實(shí)時接收USB接口上報(bào)的車胎監(jiān)測報(bào)文,當(dāng)超過相應(yīng)閾值則進(jìn)行告警顯示。通過利用綜合利用startService和bindService兩種類型的后臺Service、利用moveTaskToBack將程序移到后臺運(yùn)行、通過服務(wù)關(guān)閉重啟來確保后臺Service持續(xù)接收USB接口上報(bào)的車胎監(jiān)測報(bào)文,完成實(shí)時監(jiān)測的功能,經(jīng)過實(shí)際部署應(yīng)用,滿足的實(shí)時車胎監(jiān)測的需要。

        猜你喜歡
        車胎胎壓后臺
        汽車胎壓監(jiān)測技術(shù)探討
        元征X-431 PAD V實(shí)測: 2018年奇瑞艾瑞澤GX胎壓傳感器學(xué)習(xí)
        2019款廣汽傳祺Aion S車胎壓報(bào)警燈點(diǎn)亮
        ——元征X-431標(biāo)定胎壓傳感器的方法
        車胎扎了怎么辦 他有好辦法
        后臺暗戀
        基于Android 胎壓監(jiān)測系統(tǒng)的設(shè)計(jì)
        電子制作(2017年17期)2017-12-18 06:40:39
        車胎防滑套
        前臺、后臺精彩花絮停不了
        大腳男人留下的小腳印
        電力調(diào)度中后臺監(jiān)控系統(tǒng)的應(yīng)用
        河南科技(2014年11期)2014-02-27 14:10:03
        久久精品这里就是精品| 一本久久a久久精品亚洲| 国产黄三级三·级三级| 亚洲精品中文字幕二区| 久久日韩精品一区二区| 国产乱妇无乱码大黄aa片| 无码国产激情在线观看| 官网A级毛片| 日本女优中文字幕在线播放| 东京热日本道免费高清| 亚洲国产成人av二区| av人摸人人人澡人人超碰妓女| 国产a级网站| 国产精品无码久久久久久蜜臀AV| 亚洲国产一区二区,毛片| 狠狠摸狠狠澡| 精品人妻潮喷久久久又裸又黄| 日韩精品电影在线观看| 亚洲春色视频在线观看| 国产午夜在线视频观看| 久久综合精品国产二区无码| 狠狠干视频网站| 国产av一区二区网站| 少妇性俱乐部纵欲狂欢电影| 国产午夜激无码av毛片| 亲少妇摸少妇和少妇啪啪| 少妇一区二区三区久久| 影音先锋女人av鲁色资源网久久| 8av国产精品爽爽ⅴa在线观看| 国产高清在线精品一区不卡| 成人免费无码大片a毛片抽搐色欲 日本动漫瀑乳h动漫啪啪免费 | 亚洲美女毛多水多免费视频| 麻豆网神马久久人鬼片| 国产免费又色又爽又黄软件| 少妇高潮无码自拍| 国内揄拍国内精品人妻久久| 国产精品自在线拍国产手机版| 亚洲—本道中文字幕久久66| 一区二区三区日韩蜜桃| 极品少妇小泬50pthepon| 亚洲国产综合精品 在线 一区|