赞
踩
1、模块简介
ESP-01S 是由安信可科技开发的 Wi-Fi 模块,该模块核心处理器为ESP8266。ESP8266 拥有完整的且自成体系的 Wi-Fi 网络功能,既能够独立应用,也可以作为从机搭载于其他主机 MCU 运行。当 ESP8266 独立应用时,能够直接从外接flash 中启动。内置的高速缓冲存储器有利于提高系统性能,并且优化存储系统。另外⼀种情况是, ESP8266 只需通过 SPI/SDIO 接口或UART 接口即可作为Wi-Fi适配器,应用到基于任何微控制器设计中。具体介绍请参照产品官网esp8266详细介绍
2、AT指令介绍
作为一种通信模块,esp-01s同样基于AT指令设计。AT指令集是从终端设备(Terminal Equipment,TE)或数据终端设备(Data Terminal Equipment,DTE)向终端适配器(Terminal Adapter,TA)或数据电路终端设备(Data Circuit Terminal Equipment,DCE)发送的。其对所传输的数据包大小有定义:即对于AT指令的发送,除AT两个字符外,最多可以接收1056个字符的长度(包括最后的空字符)。每个AT命令行中只能包含一条AT指令;对于由终端设备主动向PC端报告的URC指示或者response响应,也要求一行最多有一个,不允许上报的一行中有多条指示或者响应。AT指令以回车作为结尾,响应或上报以回车换行为结尾。
3、调试工具
4、模块波特率配置和验证
ESP-01s出厂波特率正常是115200。
(1) 上电后,通过串口输出一串系统开机信息,有的模块可能会出现乱码,以最后输出ready为准。
(2)上电后发送AT指令测试通信及模块功能是否正常。注意:AT指令,控制类都要加回车,数据传输时不加回车。
(3)通过命令配置成9600波特率
5、入网设置
(1)设置工作模式
(2)连接外网
(3)查询IP地址
6、连接TCP server,发送数据
(1)打开网络调试助手,设立TCP服务器
(2)连接服务器
(3)发送数据
7、透传模式
连接服务器后即可开启透传模式。
退出透传
8、代码编写
功能实现:模块与电脑连接上同一WIFI,位于同一局域网内。通过透传模式,互相通信。
效果展现:刚开始时,单片机D5,D6灭,连接上电脑服务器端后,D5,D6亮,此时网络调试助手上不断出现Hello字样,通过网络调试助手发送L1时,D5亮,发送L0时,D5灭。(ps:注意不同类型C51单片机引脚定义)
代码如下:
#include "reg52.h"
#include "string.h"
#define SIZE 12
sbit D5=P3^7;
sbit D6=P3^6;
sfr AUXR = 0x8E;
char buffer[SIZE];
code char connect[] = "AT+CWJAP=\"WIFI名\",\"密码\"\r\n";
code char connect_server[] = "AT+CIPSTART=\"TCP\",\"联网IP\",端口号\r\n";
char mode[] = "AT+CIPMODE=1\r\n"; //开启透传模式
char send_data[] = "AT+CIPSEND\r\n"; //数据传输开始指令
char AT_OK_Flag = 0; //OK返回值的标志位
char AT_Connect_Net_Flag = 0; //WIFI GOT IP返回值的标志位
void Delay1000ms() //@11.0592MHz
{
unsigned char i, j, k;
i = 8;
j = 1;
k = 243;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void UartInit() //9600bps@11.0592MHz
{
AUXR = 0x01;
SCON = 0x50;//配置串口工作方式1,REN使能接收
TMOD &= 0x0F;
TMOD |= 0x20;//配置定时器1工作方式8位重载
TH1=0xFD;
TL1=0xFD; //9600波特率的初值
TR1=1;//启动定时器
EA = 1;//开启总中断
ES = 1;//开启串口中断
}
void sendByte(char data_msg)
{
SBUF = data_msg;
while(!TI);
TI=0;
}
void sendString(char* str)
{
while(*str != '\0'){
sendByte(*str);
str++;
}
}
void Connect_service()
{
int i=1;
while(i){
sendString(connect);
while(!AT_OK_Flag);
AT_OK_Flag = 0;
//发送连服务器指令并等待成功
sendString(connect_server);
while(!AT_OK_Flag);
AT_OK_Flag = 0;
//发送透传模式指令并等待成功
sendString(mode);
while(!AT_OK_Flag);
AT_OK_Flag = 0;
//发送数据传输指令并等待成功
sendString(send_data);
while(!AT_OK_Flag);
if(AT_Connect_Net_Flag){
D5=0; //点亮D5,代表连接服务器并打开透传模式成功
}
if(AT_OK_Flag){
D6=0; //点亮D6,代表连接服务器并打开透传模式成功
i=0;
}
}
}
void main()
{
D5=D6=1;//灭状态灯
UartInit(); //配置C51串口的通信方式
Delay1000ms();//给esp8266模块上电时间
//发送联网AT指令
Connect_service();
while(1){
Delay1000ms();
sendString("hello\r\n");
}
}
void Uart_Handler() interrupt 4
{
static int i=0; //静态变量,被初始化一次
char tmp;
if(RI) //中断处理函数中,对于接收中断的响应
{
RI = 0;//清除接收中断标志位
tmp = SBUF;
if(tmp == 'W' || tmp == 'O' || tmp == 'F' || tmp=='L' || tmp == 'E' || tmp == "?"){
i=0;
}
buffer[i++] = tmp;
//连接服务器等OK返回值指令的判断
if(buffer[0] == 'O' && buffer[1] == 'K'){
AT_OK_Flag = 1;
AT_Connect_Net_Flag = 1;
memset(buffer,'\0',SIZE);
}
//联网失败出现FAIL字样捕获
if(buffer[0] == 'F' && buffer[1] == 'A'){
for(i=0; i<5; i++){
D5=0;
Delay1000ms();
D5=1;
Delay1000ms();
}
Connect_service();
memset(buffer,'\0',SIZE);
}
if(buffer[0]=='E' && buffer[4] =='R'){
for(i=0; i<5; i++){
D5=0;
Delay1000ms();
D5=1;
Delay1000ms();
}
Connect_service();
memset(buffer,'\0',SIZE);
}
if(buffer[0]=='0' || buffer[0] =='?'){
for(i=0; i<5; i++){
D5=0;
Delay1000ms();
D5=1;
Delay1000ms();
}
Connect_service();
memset(buffer,'\0',SIZE);
}
if(buffer[0] == 'L' && buffer[1] == '1'){
D5=0;
memset(buffer,'\0',SIZE);
}
if(buffer[0] == 'L' && buffer[1] == '0'){
D5=1;
memset(buffer,'\0',SIZE);
}
if(i==12) i=0;//发送中断
}
}
ESP-01s作服务器
USB转TTL插入电脑,接线:TX-RX,RX-TX VCC-3.3V GND-GND
注意:确保电脑连接上ESP-01s,可以去电脑WLAN图标那里查看。连接上模块发出的WIFI信号,WIFI图标上没有带锁的那个。
模块基本配置如下:
//1 配置成双模
AT+CWMODE=2
Response :OK
//2 使能多连接
AT+CIPMUX=1
Response :OK
//3 建立TCPServer(要提前打开网络调试助手,才会连上。连上后会有0:CONNECT字样
AT+CIPSERVER=1 // default port = 333
Response :OK
//4 发送数据
AT+CIPSEND=0,4 // 发送4个字节在连接0通道上
>abcd //输入数据,不带回车
Response :SEND OK
//• 接收数据
+IPD, 0, n: xxxxxxxxxx //+IPD是固定字符串 0是通道,n是数据长度,xxx是数据
//断开连接
AT+CIPCLOSE=0
Response :0, CLOSED OK
代码书写逻辑与前面部分类似,只需动一下上述配置即可,不再赘述。
9、白盒测试代码可行性
接线图如下:
通过下图发送模拟:
10、结语
有什么问题,欢迎留言讨论。遇到问题,莫急莫慌,寻找解决方案,通过现象,查看代码逻辑。学会调试,解决bug。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。