国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

DIY基于路由器控制的wifi視頻小車

2018-12-18 11:09:40航天員科研訓練中心
電子世界 2018年23期
關(guān)鍵詞:服務(wù)器端路由器小車

航天員科研訓練中心 楊 勇

介紹了基于路由器直接遙控的wifi視頻小車的軟硬件制作過程。小車以玩具坦克為車身,以GL-iNnet路由器作為無線收發(fā)模塊,實現(xiàn)了路由器GPIO端口直接控制小車,并利用V4L2接口發(fā)送視頻圖像的功能。編制了Android程序,可實現(xiàn)Android手機接收視頻,并對小車進行遙控。

引言:視頻遙控車一直以來就是DIY的首選作品,因為制作視頻小車需要軟硬件多方面的技能,涉及電子學、網(wǎng)絡(luò)、圖形圖像、軟件編程等多方面知識,既有較強的娛樂性,又能鍛煉和提高自身技能。手邊恰好有一款GL-iNet路由器,這款路由器不但將串口引出,還將空余的5個GPIO留出,因此可玩性比較高。此外,正好手邊有一輛兒子玩壞的玩具坦克,就有了以這些為基礎(chǔ)做一輛視頻遙控車的想法。

1.硬件部分

本次DIY的視頻小車硬件部分包括:小車車身、路由器、電機驅(qū)動模塊、視頻轉(zhuǎn)換器、攝像頭、電源。硬件系統(tǒng)圖如圖1所示。

圖1 硬件系統(tǒng)圖

車身是利用壞玩具坦克車的帶有履帶的下半部,車身內(nèi)是兩只電機,可驅(qū)動后輪通過履帶傳動前進。電源由于給路由器供電并驅(qū)動小車電機,為直流5V電源,本次DIY制作是將小米移動電源臨時作為小車的電源。電機驅(qū)動模塊是L9110電機驅(qū)動模塊,一只模塊上有兩只L9110芯片,可同時驅(qū)動2個直流電機正反轉(zhuǎn)。

Wifi小車制作的核心部件是GL-iNet路由器,它是一款專門為OpenWrt而設(shè)計路由器,其MCU為Atheros AR9331,主頻400MHz,板載64M內(nèi)存和16M Flash。PCB板有一只USB接口,可連接U盤或USB攝像頭,板子上預(yù)留了5個GPIO,1個電源接口(5V和3.3V各一個),且串口已經(jīng)焊好。對路由器的改造包括焊接GPIO端子和電源端子。路由器改造部分見圖2所示。本次DIY使用了5個預(yù)留GPIO中的四個,Pin21和Pin22控制左輪,Pin18和Pin19控制右輪。將5V電源接口從板子上引出,更方便后續(xù)接線。

攝像頭開始使用的是一款支持MJPG格式的USB攝像頭,但后來測試過程中發(fā)現(xiàn)在光線暗時,幀率較低,傳輸?shù)绞謾C上的視頻有較明顯的卡頓,因此最后更換成一只汽車倒車攝像頭,該攝像頭輸出信號是模擬視頻信號ITU-R BT.656標準的,為此又增加了一只UVC視頻轉(zhuǎn)換器,該轉(zhuǎn)換器的主控芯片為MS2106,可以將CVBS模擬信號轉(zhuǎn)換為USB2.0接口的數(shù)字信號,支持720×480、640×480和480×320三種分辨率,且支持M-JPEG圖像格式輸出。該芯片的視頻處理框圖如圖3所示。

圖2 路由器板子引線

圖3 MS2106芯片視頻處理框圖

2.軟件部分

軟件部分主要分為路由器服務(wù)器端編程和手機端Android編程。服務(wù)器端和手機端的控制信號和視頻信號均通過TCP進行傳輸。

2.1 編譯OpenWrt

GL-iNet路由器安裝的是chaos calmer(15.05)版本的OpenWrt操作系統(tǒng),因為原廠路由器中的OpenWrt是原廠定制的,有許多額外的軟件工具。為了提高系統(tǒng)穩(wěn)定性和增加使用內(nèi)存效率,所以從github上下載了原版的chaos calmer版的OpenWrt,重新編譯后生成bin文件,通過網(wǎng)頁端刷新固件。編譯OpenWrt時注意的方面包括:

a.在編譯前make menuconfig時,將Target System和Target Profile分別選Atheros AR7xxx/AR9xxx和GL.iNet 6408。為了使用USB攝像頭需將Video Support內(nèi)各選項選上;

b.第一次編譯通過后,需更改package/base-files/files/lib/functions/uci-default.sh和package/base-files/files/bin/config_generate這2個文件,修改ip地址,以免和家里的無線路由器ip相同。修改package/kernel/mac80211/files/lib/wifi/mac80211.sh文件,將ssid改成自定義的無線網(wǎng)絡(luò)名稱,并改為默認開啟wifi模式。修改后再次編譯。

2.2 路由器端口設(shè)置

在OpenWrt端首先到設(shè)置GPIO的功能,把用到的Pin21、Pin22、Pin18和Pin19設(shè)置為輸出模式,以Pin21為例,方法如下:

echo 21 > /sys/class/gpio/export

echo out > /sys/class/gpio/gpio21/direction

在程序中可用如下方法將GIPO設(shè)置為1或0(以Pin21為例):

system(“echo 1 > /sys/devices/virtual/gpio/gpio21/value”);

system(“echo 0 > /sys/devices/virtual/gpio/gpio21/value”);

2.3 服務(wù)器端程序設(shè)計

服務(wù)器端主程序為car_main.c,在主程序中fork兩個子進程,分別是gpioserver和v4l2server。gpioserver打開6666端口號,監(jiān)聽手機客戶端的連接,并根據(jù)接收的TCP消息字,向相關(guān)GPIO端口發(fā)送1或0,控制小車前進、后退和左右轉(zhuǎn)向。v4l2server打開6688端口號,打開USB攝像頭設(shè)備,當手機客戶端的連接后,通過6688端口向手機端發(fā)送視頻流。子進程間通過共享內(nèi)存映射的方式實現(xiàn)進程間通信。程序流程圖如圖4所示。

圖4 軟件流程圖

傳統(tǒng)的攝像頭信號采集和傳輸部分一般采用安裝mjpg-streamer工具,利用web協(xié)議進行傳輸。本次DIY沒有采用該方式,而是使用了V4L2(Video4Linux)的API接口,利用TCP協(xié)議傳輸。V4L2是Linux下關(guān)于視頻采集相關(guān)的設(shè)備驅(qū)動框架,為驅(qū)動和應(yīng)用程序提供了一套統(tǒng)一的接口規(guī)范。利用V4L2提供的API函數(shù)進行視頻采集和傳輸,主要包括打開攝像頭設(shè)備、設(shè)置攝像頭視頻輸出模式、設(shè)置視頻緩沖區(qū)隊列、讀取緩沖區(qū)隊列并處理數(shù)據(jù)等。本程序視頻輸出的分辨率選取480×320,視頻格式選取MJPEG,采集圖像采用內(nèi)存映射(mmap)方式。

因為程序需要反復(fù)調(diào)試,所以沒有將程序制作成ipk的安裝程序,而是利用OpenWrt提供的gcc4.8交叉編譯鏈工具,直接將程序編譯成可執(zhí)行程序,然后服務(wù)器端通過wget將可執(zhí)行程序下載到路由器。

將前文介紹的GPIO的設(shè)置語句編寫為shell文件(名稱setled),連同編譯好的主程序可執(zhí)行文件加入到OpenWrt的/etc/rc.local文件中,以確保路由器開機即執(zhí)行該程序。

2.4 手機端Android編程

采用eclipse編寫Android程序,程序共2個Activity界面:設(shè)置界面和主程序界面。設(shè)置界面中設(shè)置服務(wù)器端IP、控制端口號和視頻傳輸端口號。主程序界面中有前進/后退的按鈕,按鈕事件用于向路由器端發(fā)送TCP數(shù)據(jù)。程序利用SurfaceView類和SurfaceHolder等接口在窗口繪制圖像,在DataInputStream的自定義子類中進行Socket連接,并通過解析jpeg文件的SOI(Start of Image)標記0xFF和0xD8來獲取一副圖像的起始和大小,將數(shù)據(jù)流包裝為一副圖像并繪制到Canvas上顯示。通過計算1秒鐘內(nèi)顯示的圖像數(shù)得出幀率,將幀率數(shù)據(jù)顯示在手機屏幕右下角。

3.DIY小車測試

DIY小車外形如圖5所示,手機Andriod運行程序界面如圖6所示。

圖5 小車外觀

圖6 Android程序界面

打開路由器,先手機連接路由器wifi熱點,然后啟動手機客戶端Android程序。程序界面中左右兩邊的上下箭頭分別控制左右兩個輪子的前進和倒退,通過這4個按鈕的不同的組合,可以實現(xiàn)前進、倒退、左轉(zhuǎn)、右轉(zhuǎn)等6種控制模式。實測圖像傳輸幀率為30fps左右,視頻流暢,無卡頓。

4.結(jié)論

DIY制作wifi小車利用路由器為控制和視頻傳輸部件,沒有制作復(fù)雜的電路板,倒車攝像頭、視頻轉(zhuǎn)換器、電機驅(qū)動模塊等可從淘寶購買,總價不超過80元。編寫了路由器服務(wù)器端軟件,實現(xiàn)了V4L2的API接口函數(shù)進行視頻圖像傳輸,利用視頻轉(zhuǎn)換器將模擬信號轉(zhuǎn)換成數(shù)字信號,大大提高了圖像傳輸幀率,使得wifi小車娛樂性更強。按照本文所描述的GPIO控制方法,可以制作其他的DIY制作,如遠程控制家里電器等。Gl-iNet只有5個空余的GPIO,如果將路由器串口連接C51等單片機,將擴展GPIO接口,控制能力也會大大提高。

猜你喜歡
服務(wù)器端路由器小車
買千兆路由器看接口參數(shù)
科教新報(2022年24期)2022-07-08 02:54:21
大車拉小車
快樂語文(2020年36期)2021-01-14 01:10:32
自制小車來比賽
科學大眾(2020年17期)2020-10-27 02:49:02
劉老師想開小車
文苑(2018年22期)2018-11-19 02:54:18
兩輪自平衡小車的設(shè)計與實現(xiàn)
電子制作(2018年8期)2018-06-26 06:43:02
淺析異步通信層的架構(gòu)在ASP.NET 程序中的應(yīng)用
成功(2018年10期)2018-03-26 02:56:14
你所不知道的WIFI路由器使用方法?
在Windows中安裝OpenVPN
無線路由器輻射可忽略
網(wǎng)頁防篡改中分布式文件同步復(fù)制系統(tǒng)
临海市| 巨野县| 福海县| 乌审旗| 聂拉木县| 通许县| 凉山| 龙江县| 民勤县| 菏泽市| 页游| 佛教| 伊通| 仁布县| 苗栗市| 贵南县| 儋州市| 镇平县| 桐城市| 唐山市| 新源县| 吴堡县| 乐昌市| 上栗县| 历史| 怀集县| 准格尔旗| 新宾| 淄博市| 馆陶县| 苍山县| 喀喇| 仪征市| 上犹县| 瓮安县| 屯留县| 玉环县| 广德县| 通河县| 探索| 南木林县|