通信這一名稱(chēng)對(duì)于我們電子專(zhuān)業(yè)的并不陌生,,能夠搭通兩者或兩者以上的通信,就能做到很多東西,,如控制,、數(shù)據(jù)傳輸?shù)取?div>而通信有很多種技術(shù),,如1G、2G,、2.5G,、2.75G、3G,。,。,。等,,具體實(shí)例有GSM、3G,、藍(lán)牙,、ZigBee,、各種2.4G無(wú)線射頻傳輸,、WIFI,、NFC等,。 wifi有著許多各種無(wú)線傳輸無(wú)可替代的優(yōu)勢(shì),而且與手機(jī)搭配使用,,你會(huì)發(fā)現(xiàn)它用于控制、數(shù)據(jù)傳輸?shù)葧?huì)很完美(從價(jià)格,、設(shè)備體積、傳輸距離,、傳輸質(zhì)量等),當(dāng)然,,具體問(wèn)題要具體分析,,也要看你用來(lái)做什么,。 弄過(guò)嵌入式開(kāi)發(fā)板的人就會(huì)發(fā)現(xiàn)有wifi模塊這東西,,但這東西很貴,,而且不穩(wěn)定,,我記得師兄拿俱樂(lè)部的開(kāi)發(fā)板所配的wifi模塊就重來(lái)沒(méi)有搭通過(guò)。,。,。 而我現(xiàn)在介紹的openwrt系統(tǒng)+路由器 = arm開(kāi)發(fā)板+wifi模塊,;這里說(shuō)的等于是指路由器裝上openwrt能夠?qū)崿F(xiàn)開(kāi)發(fā)板+wifi模塊中的數(shù)據(jù)傳輸與控制功能,而且比開(kāi)發(fā)板更穩(wěn)定效果更好體積更小,。 openwrt是一個(gè)linux系統(tǒng),,如果搞過(guò)嵌入式的,,當(dāng)你看回這一系統(tǒng)框架的時(shí)候會(huì)發(fā)現(xiàn)者就是我們平時(shí)所學(xué)的東西,。,。。 路由器也跑linux系統(tǒng),這說(shuō)明嵌入式linux應(yīng)用真的很廣,! 好了,,用一幅圖理清一下我上面所講的東西: 然后你的擴(kuò)展: 當(dāng)然還有更多,他能很好地滿(mǎn)足你的控制命令與數(shù)據(jù)的傳輸,。 然后說(shuō)一下路由器裝上OpenWRT的過(guò)程,首先是路由器的選擇,,我用的是TP-Link 703N這款,,這是一個(gè)3G路由器,,因?yàn)檫@個(gè)路由器配備一個(gè)USB接口用來(lái)插3G上網(wǎng)卡的,,而USB端口對(duì)于我們而言,,又是一個(gè)外圍接口了,USB端口對(duì)比TTL串口來(lái)說(shuō),,當(dāng)然高級(jí)不小了,有了USB端口,,就可以接攝像頭等,,通過(guò)USB HUB的擴(kuò)展,,還可以完全獨(dú)立使用USB而不用TTL串口了,。 當(dāng)然,,還有很多其他路由器選擇的,,如DB120、FWR171-3G,、MW151RM3G等等,可以依價(jià)錢(qián)體積性能等自己酌情選擇,具體可以上OpenWRT官方論壇看看,。 這里以TP-Link為例: 必要的工具:putty(就像超級(jí)終端)、winscp(就像資源管理器) 具體流程是這樣的:先將OpenWRT刷入路由器——修改網(wǎng)絡(luò)配置令到路由器能夠聯(lián)網(wǎng)——下載相關(guān)軟件(如攝像頭驅(qū)動(dòng)、ser2net等)——編寫(xiě)啟動(dòng)腳本——測(cè)試,。 具體教程還是請(qǐng)自行查找教程,,應(yīng)為具體問(wèn)題要具體分析。 其中連接wifi網(wǎng)絡(luò),創(chuàng)建socket: mtcpSocket = new SocketClient(clientUrl, clientPort); //clientUrl為wifi熱點(diǎn)IP, clientPort為端口號(hào) 取得輸入輸出流: is = new BufferedInputStream(mtcpSocket.getInputStream()); 讀取緩沖區(qū): int ret = is.read(buffer); //buffer為緩沖區(qū)內(nèi)容 發(fā)送數(shù)據(jù): mtcpSocket.sendByte(data); 看函數(shù)具體定義: public void sendMsg(byte[] msg) { try { OutputStream out = client.getOutputStream(); out.write(msg); out.flush(); } catch (IOException e) { e.printStackTrace(); } } public void sendByte(Byte data) { try { OutputStream out = client.getOutputStream(); out.write(data); out.flush(); } catch (IOException e) { e.printStackTrace(); } } 過(guò)程就是這樣的了。 再看一下單片機(jī)(89C52)與路由器進(jìn)行串口通信的部分代碼: 先進(jìn)行串口初始化工作后: a=SBUF; switch(a) { case 0x01:flag=1;break; case 0x02:flag=2;break; case 0x00:flag=3;break; case 0x03:flag=4;break; case 0x04:flag=5;break; } 再看看: switch(flag) { case 1:P1=0x09;break; case 2:P1=0x06;break; case 3:P1=0x00;break; case 4:P1=0x08;break; case 5:P1=0x01;;break; default: flag=0; } 這是一個(gè)簡(jiǎn)單的wifi小車(chē)的單片機(jī)源碼,,其道理就是根據(jù)android手機(jī)發(fā)過(guò)來(lái)的命令進(jìn)行控制小車(chē)的運(yùn)動(dòng):前進(jìn)后退左轉(zhuǎn)右轉(zhuǎn)停車(chē),。 網(wǎng)頁(yè)、windows桌面程序等道理都是一樣的,。
|
|