主要 esp8266怎么配置 esp8266和USB轉(zhuǎn)TTL連接 esp8266簡單介紹 esp8266連接路由器 esp8266通過路由器連接在同一局域網(wǎng)中的電腦,建立TCP連接 esp8266使用串口發(fā)送數(shù)據(jù)到電腦上的網(wǎng)絡(luò)調(diào)試助手 esp8266使用串口通過局域網(wǎng)發(fā)送到電腦上自己寫的Java程序 esp8266的透傳模式 esp8266使用透傳模式連接到電腦的網(wǎng)絡(luò)調(diào)試助手 esp8266使用透傳模式連接到電腦上的java程序 USB轉(zhuǎn)TTL如何和esp8266連接? USB轉(zhuǎn)TTL 5V VCC 3V3 TXD RXD GND
esp8266 3V3 | RX | IO16 | IO0 | EN | IC2 | TX | GND |
連接 USB轉(zhuǎn)TTL | esp8266 | TXD | RX | RXD | TX | GND | GND |
VCC和3V3用短路帽連接后再同時(shí)連到esp8266的3V3和EN esp8266測試 打開串口調(diào)試助手,選擇發(fā)送新行 AT OK ----------- AT+GMR
ATversion:1.3.0.0(Jul 14 2016 18:54:01) SDKversion:2.0.0(656edbf) compiletime:Jul 19 2016 18:44:44 OK ----------- AT+CWSAP_CUR?
+CWSAP_CUR:"ESP_A5A06F","",1,0,4,0
OK ----------- AT+CWSAP_DEF?
+CWSAP_DEF:"ESP_A5A06F","",1,0,4,0
OK Esp8266三種模式 STA 連接其他設(shè)備來上網(wǎng),作為client STA 站點(diǎn),每一個(gè)連接到無線網(wǎng)絡(luò)中的終端(如筆記本電腦、 PDA及其它可以聯(lián)網(wǎng)的用戶設(shè)備)都可稱為一個(gè)站點(diǎn) AP 可以當(dāng)作路由器來給其他esp8266或其他設(shè)備連接 是無線接入點(diǎn),是一個(gè)無線網(wǎng)絡(luò)的創(chuàng)建者,是網(wǎng)絡(luò)的中心節(jié)點(diǎn) STA+AP Wifi模塊包括兩種類型的拓?fù)湫问剑夯A(chǔ)網(wǎng)(Infra)和自組網(wǎng)(Adhoc) 基于AP組建的基礎(chǔ)無線網(wǎng)絡(luò)(Infra):Infra也稱為基礎(chǔ)網(wǎng),是由AP創(chuàng)建,眾多STA加入所組成的無線網(wǎng)絡(luò),這種類型的網(wǎng)絡(luò)的特點(diǎn)是AP是整個(gè)網(wǎng)絡(luò)的中心,網(wǎng)絡(luò)中所有的通信都通過 AP 來轉(zhuǎn)發(fā)完成。 基于自組網(wǎng)的無線網(wǎng)絡(luò)(Adhoc):Adhoc也稱為自組網(wǎng),是僅由兩個(gè)及以上STA自己組成,網(wǎng)絡(luò)中不存在AP,這種類型的網(wǎng)絡(luò)是一種松散的結(jié)構(gòu), 網(wǎng)絡(luò)中所有的 STA 都可以直接通信 單連接,多連接和透傳模式的關(guān)系 多連接情況下(”AT+CIPMUX=1“),才能開啟TCP 服務(wù)器 服務(wù)器僅⽀持多連接 創(chuàng)建 TCP 服務(wù)器后,⾃動建⽴ TCP server 監(jiān)聽 當(dāng)有 TCP client 接⼊,會⾃動按順序占⽤⼀個(gè)連接 id ⾮透傳模式( “AT+CIPMODE=0”) ,才能設(shè)置為多連接 透傳模式,僅⽀持 TCP 單連接和 UDP 固定通信對端的情況 esp8266連接路由器 esp8266已經(jīng)設(shè)置為STA/AP模式 指令: AT+CWJAP_CUR="Cise_132_Middle","" AT+CWJAP_CUR="Cise_128_01","213213213"
WIFICONNECTED WIFIGOT IP
OK 這樣esp8266就有一個(gè)IP地址了 AT+CIFSR
+CIFSR:APIP,"192.168.4.1" +CIFSR:APMAC,"5e:cf:7f:a5:a0:6f" +CIFSR:STAIP,"192.168.1.110" +CIFSR:STAMAC,"5c:cf:7f:a5:a0:6f"
OK 那么查詢一下現(xiàn)在的網(wǎng)絡(luò)連接狀態(tài) AT+CIPSTATUS
STATUS:2
OK 參數(shù)說明: <stat> 2:獲得 IP 3:已連接 4:斷開連接 5:未連接到WiFi 測試一下域名解析功能 AT+CIPDOMAIN="www.baidu.com"
+CIPDOMAIN:61.135.169.125
OK 現(xiàn)在試一下和電腦建立TCP連接 先建立單連接 查詢電腦IP 192.168.1.108 255.255.255.0 192.168.1.1 AT+CIPSTART="TCP","192.168.1.108",8000 不能先用esp8266建立一個(gè)tcp連接,連不上的,因?yàn)門CP server 還沒有建立,esp8266也連不上 先用網(wǎng)絡(luò)調(diào)試助手創(chuàng)建一個(gè)TCP server,打開指定端口,再連接 AT+CIPSTART="TCP","192.168.31.171",6699
CONNECT
OK AT+CIFSR
+CIFSR:APIP,"192.168.4.1" +CIFSR:APMAC,"5e:cf:7f:a5:a0:6f" +CIFSR:STAIP,"192.168.31.103" +CIFSR:STAMAC,"5c:cf:7f:a5:a0:6f"
OK 在網(wǎng)絡(luò)調(diào)試助手上顯示已經(jīng)和192.168.31.103建立連接 通過路由器在一個(gè)局域網(wǎng)中向電腦發(fā)送數(shù)據(jù) esp8266和電腦連接同一個(gè)路由器 AT+CIPSEND=9
OK >123asdfgh
busys...
Recv9 bytes 上面是用網(wǎng)絡(luò)調(diào)試助手創(chuàng)建TCP Server,那么可不可以使用java創(chuàng)建一個(gè)serversocket來接收數(shù)據(jù)呢? esp發(fā)送命令 AT+CIPSENDBUF=16 一直按回車就可以了,因?yàn)檫@個(gè)命令本身的長度就是16,可以發(fā)送自己 java程序 packageespSever;
importjava.awt.BorderLayout; importjava.awt.Color; importjava.awt.event.ActionEvent; importjava.awt.event.ActionListener; importjava.io.BufferedReader; importjava.io.InputStreamReader; importjava.io.PrintWriter; importjava.net.ServerSocket; importjava.net.Socket;
importjavax.swing.BoxLayout; importjavax.swing.JButton; importjavax.swing.JFrame; importjavax.swing.JPanel; importjavax.swing.JScrollPane; importjavax.swing.JTextArea; importjavax.swing.ScrollPaneConstants;
publicclass Esp { JButtonSendtoesp; JTextAreatextArea; JButtonopensocket;
ServerSocketserverSocket; PrintWriterwriter; Socketsocket; BufferedReaderreader; InputStreamReaderstreamReader; publicstatic void main(String[] args) { //TODO Auto-generated method stub Espesp =new Esp(); esp.go(); } publicvoid go() { JFrameframe = new JFrame("EspServer"); JPanelpanel01 = new JPanel(); JPanelpanel02 = new JPanel(); opensocket= new JButton("OpenSocket"); Sendtoesp= new JButton("Send To Esp"); textArea= new JTextArea(20,20); textArea.setLineWrap(true);//可以使用滾動條
//設(shè)置滾動條 JScrollPanescrollPane = new JScrollPane(textArea); scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
opensocket.addActionListener(newSocketopen()); panel01.setBackground(Color.PINK); panel02.setBackground(Color.BLUE); panel02.setLayout(newBoxLayout(panel02, BoxLayout.Y_AXIS));
panel01.add(scrollPane);//不能忘了加滾動條 panel02.add(opensocket); panel02.add(Sendtoesp); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(BorderLayout.CENTER,panel01); frame.getContentPane().add(BorderLayout.EAST,panel02); frame.setSize(600,600); frame.setVisible(true); } classEspget implements Runnable{
@Override publicvoid run() { //TODO Auto-generated method stub Stringmessage; try { while((message=reader.readLine())!=null) { textArea.append("IP: "+message+"\n"); }
}catch (Exception e2) { //TODO: handle exception System.out.println("發(fā)生異常.\n"); } }
} classSocketopen implements ActionListener{
@Override publicvoid actionPerformed(ActionEvent arg0) { //TODO Auto-generated method stub textArea.append("serversocket open ing!\n"); try { //@SuppressWarnings("resource") serverSocket= new ServerSocket(6699);
Socketsocket = serverSocket.accept();
streamReader= new InputStreamReader(socket.getInputStream()); reader= newBufferedReader(streamReader);
writer= new PrintWriter(socket.getOutputStream());
Threadtserver = new Thread(new Espget()); tserver.start(); textArea.append("服務(wù)器已啟動!\n");
}catch (Exception e2) { //TODO: handle exception System.out.println("發(fā)生異常.\n"); } }
}
} 主要的問題是使用內(nèi)部類和線程 測試結(jié)果: 使用Java的serversocket是可以接收到esp發(fā)送的數(shù)據(jù)的,不過由于使用的是buffer,要發(fā)送足夠的數(shù)據(jù),因?yàn)锳T+CIPSENDBUF=16太短了,Java程序才會顯示出來,而且有亂碼 怎么解決有什么接收什么和防止亂碼的問題? 涉及到編碼問題,稍后再研究 esp8266接收數(shù)據(jù) 直接使用TCP server發(fā)送數(shù)據(jù),WiFi模塊就能在串口上顯示,不需要特殊的配置 不過如果需要顯示發(fā)送消息來的TCP server的IP和端口需要使用AT指令A(yù)T+CIPDINFO=1就可以顯示相關(guān)信息了 先了解一種工作模式叫透傳,這個(gè)很有用處 透傳的意思是將WiFi模塊設(shè)置為透傳模式(前提是設(shè)置為單連接,而且已經(jīng)和TCP server建立連接)后,發(fā)給WiFi模塊的信息(AT指令)WiFi模塊就不處理了,直接將輸入的發(fā)給TCPserver 這樣如果使用WiFi模塊和STM32連接,STM32發(fā)給ESP8266后,其實(shí)就是發(fā)給了網(wǎng)絡(luò)上的TCP server,就不用使用AT+CIPSEND命令設(shè)置長度再發(fā)送數(shù)據(jù)了。 設(shè)置透傳模式 第一次設(shè)置不對 AT+CIPMUX=0
OK AT+CIPSTART="TCP","192.168.31.171",6699
CONNECT
OK AT+CIPSMODE=1
ERROR AT+CIPMODE=1
OK AT+CIPMODE=1
OK AT+CIPMODE=1
OK BHBUUHY
ERROR hhhhhhhhhhBHBUUHY
ERROR BHBUUHY
ERROR AT+CIFSR
+CIFSR:APIP,"192.168.4.1" +CIFSR:APMAC,"5e:cf:7f:a5:a0:6f" +CIFSR:STAIP,"192.168.31.103" +CIFSR:STAMAC,"5c:cf:7f:a5:a0:6f"
OK AT+CIPSTATUS
STATUS:3 +CIPSTATUS:0,"TCP","192.168.31.171",6699,46789,0
OK AT+CIPSENDBUF=16
IPMODE=1
ERROR AT+CIPSENDBUF=16AT+CIPSENDBUF=16AT+CIPSENDBUF=16AT+CIPSENDBUF=16AT+CIPSENDBUF=16AT+CIPSENDBUF=16AT+CIPSENDBUF=16
IPMODE=1
ERROR CLOSED 好像應(yīng)該設(shè)置為客戶端模式,再設(shè)置單連接,再連接TCP再設(shè)置透傳, 設(shè)置為客戶端模式(其實(shí)設(shè)置為STA/AP模式也可以) 重啟 AT查看 查看IP 連接AP 查看IP 設(shè)置單連接 連接TCP server 查看IP 設(shè)置透傳 輸入AT+CIPSEND 之后輸入的任何信息都會直接傳輸?shù)絋CP server 輸入連續(xù)的+++結(jié)束透傳 輸入AT+CIPCLOSE斷開TCP連接 AT+CWMODE_DEF=1
OK AT+RST
OK
ets Jan 8 2013,rst cause:1, boot mode:(3,7)
load0x40100000, len 2408, room 16 tail8 chksum0xe5 load0x3ffe8000, len 776, room 0 tail8 chksum0x84 load0x3ffe8310, len 632, room 0 tail8 chksum0xd8 csum0xd8
2ndboot version : 1.6 SPI Speed : 40MHz SPI Mode : DOUT SPI Flash Size & Map: 8Mbit(512KB+512KB) jumpto run user1 @ 1000
屻?僶鞗;凔g|?宒噋;l勩;沝宒?d`屻s踠??l屸{搇嚐???` |