标题: esp8266配置(一) [打印本页]
作者: hrojgi 时间: 2017-11-2 19:20
标题: esp8266配置(一)
主要
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屸{搇嚐???`
作者: 碎碎念 时间: 2020-3-15 21:06
写得很详细,谢谢
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |