主要 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屸{搇嚐???` |