找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4682|回复: 1
收起左侧

esp8266配置(一)

[复制链接]
ID:245368 发表于 2017-11-2 19:20 | 显示全部楼层 |阅读模式
主要
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屸{搇嚐???`
回复

使用道具 举报

ID:193421 发表于 2020-3-15 21:06 | 显示全部楼层
写得很详细,谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表