通信這一名稱(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ú)線(xiàn)射頻傳輸、WIFI、NFC等。 wifi有著許多各種無(wú)線(xiàn)傳輸無(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桌面程序等道理都是一樣的。
|
|