主要 esp8266怎么配置 esp8266和USB轉TTL連接 esp8266簡單介紹 esp8266連接路由器 esp8266通過路由器連接在同一局域網中的電腦,建立TCP連接 esp8266使用串口發送數據到電腦上的網絡調試助手 esp8266使用串口通過局域網發送到電腦上自己寫的Java程序 esp8266的透傳模式 esp8266使用透傳模式連接到電腦的網絡調試助手 esp8266使用透傳模式連接到電腦上的java程序 USB轉TTL如何和esp8266連接? USB轉TTL 5V VCC 3V3 TXD RXD GND
esp8266 3V3 | RX | IO16 | IO0 | EN | IC2 | TX | GND |
連接 USB轉TTL | esp8266 | TXD | RX | RXD | TX | GND | GND |
VCC和3V3用短路帽連接后再同時連到esp8266的3V3和EN esp8266測試 打開串口調試助手,選擇發送新行 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 連接其他設備來上網,作為client STA 站點,每一個連接到無線網絡中的終端(如筆記本電腦、 PDA及其它可以聯網的用戶設備)都可稱為一個站點 AP 可以當作路由器來給其他esp8266或其他設備連接 是無線接入點,是一個無線網絡的創建者,是網絡的中心節點 STA+AP Wifi模塊包括兩種類型的拓撲形式:基礎網(Infra)和自組網(Adhoc) 基于AP組建的基礎無線網絡(Infra):Infra也稱為基礎網,是由AP創建,眾多STA加入所組成的無線網絡,這種類型的網絡的特點是AP是整個網絡的中心,網絡中所有的通信都通過 AP 來轉發完成。 基于自組網的無線網絡(Adhoc):Adhoc也稱為自組網,是僅由兩個及以上STA自己組成,網絡中不存在AP,這種類型的網絡是一種松散的結構, 網絡中所有的 STA 都可以直接通信 單連接,多連接和透傳模式的關系 多連接情況下(”AT+CIPMUX=1“),才能開啟TCP 服務器 服務器僅⽀持多連接 創建 TCP 服務器后,⾃動建⽴ TCP server 監聽 當有 TCP client 接⼊,會⾃動按順序占⽤⼀個連接 id ⾮透傳模式( “AT+CIPMODE=0”) ,才能設置為多連接 透傳模式,僅⽀持 TCP 單連接和 UDP 固定通信對端的情況 esp8266連接路由器 esp8266已經設置為STA/AP模式 指令: AT+CWJAP_CUR="Cise_132_Middle","" AT+CWJAP_CUR="Cise_128_01","213213213"
WIFICONNECTED WIFIGOT IP
OK 這樣esp8266就有一個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 那么查詢一下現在的網絡連接狀態 AT+CIPSTATUS
STATUS:2
OK 參數說明: <stat> 2:獲得 IP 3:已連接 4:斷開連接 5:未連接到WiFi 測試一下域名解析功能 AT+CIPDOMAIN="www.baidu.com"
+CIPDOMAIN:61.135.169.125
OK 現在試一下和電腦建立TCP連接 先建立單連接 查詢電腦IP 192.168.1.108 255.255.255.0 192.168.1.1 AT+CIPSTART="TCP","192.168.1.108",8000 不能先用esp8266建立一個tcp連接,連不上的,因為TCP server 還沒有建立,esp8266也連不上 先用網絡調試助手創建一個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 在網絡調試助手上顯示已經和192.168.31.103建立連接 通過路由器在一個局域網中向電腦發送數據 esp8266和電腦連接同一個路由器 AT+CIPSEND=9
OK >123asdfgh
busys...
Recv9 bytes 上面是用網絡調試助手創建TCP Server,那么可不可以使用java創建一個serversocket來接收數據呢? esp發送命令 AT+CIPSENDBUF=16 一直按回車就可以了,因為這個命令本身的長度就是16,可以發送自己 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);//可以使用滾動條
//設置滾動條 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("發生異常.\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("服務器已啟動!\n");
}catch (Exception e2) { //TODO: handle exception System.out.println("發生異常.\n"); } }
}
} 主要的問題是使用內部類和線程 測試結果: 使用Java的serversocket是可以接收到esp發送的數據的,不過由于使用的是buffer,要發送足夠的數據,因為AT+CIPSENDBUF=16太短了,Java程序才會顯示出來,而且有亂碼 怎么解決有什么接收什么和防止亂碼的問題? 涉及到編碼問題,稍后再研究 esp8266接收數據 直接使用TCP server發送數據,WiFi模塊就能在串口上顯示,不需要特殊的配置 不過如果需要顯示發送消息來的TCP server的IP和端口需要使用AT指令AT+CIPDINFO=1就可以顯示相關信息了 先了解一種工作模式叫透傳,這個很有用處 透傳的意思是將WiFi模塊設置為透傳模式(前提是設置為單連接,而且已經和TCP server建立連接)后,發給WiFi模塊的信息(AT指令)WiFi模塊就不處理了,直接將輸入的發給TCPserver 這樣如果使用WiFi模塊和STM32連接,STM32發給ESP8266后,其實就是發給了網絡上的TCP server,就不用使用AT+CIPSEND命令設置長度再發送數據了。 設置透傳模式 第一次設置不對 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 好像應該設置為客戶端模式,再設置單連接,再連接TCP再設置透傳, 設置為客戶端模式(其實設置為STA/AP模式也可以) 重啟 AT查看 查看IP 連接AP 查看IP 設置單連接 連接TCP server 查看IP 設置透傳 輸入AT+CIPSEND 之后輸入的任何信息都會直接傳輸到TCP server 輸入連續的+++結束透傳 輸入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屸{搇嚐???` |