前言

蓝牙,ESP-01s,Zigbee, NB-Iot等通信模块都是基于AT指令的设计

一、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指令以回车作为结 尾,响应或上报以回车换行为结尾。

  • 初始配置和验证

ESP-01s出厂波特率正常是115200, 注意:AT指令,控制类都要加回车,数据传输时不加回车

上电后,通过串口输出一串系统开机信息,购买的部分模块可能电压不稳,导致乱码,以 ready 为准

################################################

arch:ESP8266, 1

compile_time:Ai-Thinker|B&T

wifi_mac:4c75250dAE2F

sdk_version:v3.4-22-g967752e2

firmware_version:2.2.0

compile_time:Jun 30 2021 11:28:20

ready

################################################

  • 常用AT指令

AT

Response : OK

上电后发送AT指令测试通信及模块功能是否正常
AT+RST 重启
AT+UART=9600,8,1,0,0 设置波特率

AT+CWMODE=1

Response : OK

设置工作模式

1. 是station(设备)模式  2.是AP(路由)模式  3.是双模

AT+CIFSR

查询IP地址
station(设备)模式

AT+CWJAP="WiFi用户名","WiFi密码"

Response :WIFI CONNECTED

Response :WIFI GOT IP

以设备模式接入家用路由器配置

AT+CIFSR

Response :

+CIFSR:APIP,"192.168.4.1" +CIFSR:APMAC,"4e:75:25:0d:ae:2f" +CIFSR:STAIP,"192.168.0.148" +CIFSR:STAMAC,"4c:75:25:0d:ae:2f"

查询IP地址

AT+CIPSTART="TCP","192.168.101.162",8880

Response :OK

连接到 TCP server
AT+CIPSEND=4 设置即将发送数据的长度 (这里是4个字节)

AT+CIPMODE=1

Response : OK

开启透传模式(+++退出透传)

AT+CIPSEND

Response : OK

随意发送接收数据
AP(路由)模式

AT+CIPMUX=1

Response : OK

使能多链接

AT+CIPSERVER=1

Response : OK

建立TCPServer,default port = 333

AT+CIPSEND=0,4

>abcd //输入数据,不带回车

Response : SEND OK

发送4个字节在连接0通道上

AT+CIPCLOSE=0

Response : 0 , CLOSED OK

断开连接

二、station(设备)模式连接到 TCP server

1、初始配置和验证

AT指令 功能 回复
AT 上电后发送AT指令测试通信及模块功能是否正常 OK
AT+UART=9600,8,1,0,0 通过一下命令配置成9600波特率
AT+CWMODE=3  1. 是station(设备)模式 2.是AP(路由)模式 3.是双模 OK
AT+CWJAP="WiFi用户名","WiFi密码"  以设备模式接入家中路由器配置 WIFI CONNECTED  WIFI GOT IP 
AT+CIFSR  查询IP地址

一系列IP信息

OK

2、连接到 TCP server

1. 开关网络助手,设立TCP服务器(ESP-01S和主机要在同一wifi网络下)

2. 连接服务器

AT指令 功能 回复
AT+CIPSTART="TCP","192.168.0.113",8888 连接服务器

CONNECT 成功

OK   成功

3. 发送数据

AT+CIPSEND=4           // 设置即将发送数据的长度 (这里是4个字节)

>ZYFA                         // 看到大于号后,输入消息,ZYFA,不要带回车

Response :SEND OK //结果:成功

//注意,这种情况下,每次发送前都要先发送AT+CIPSEND=长度 的指令,再发数据!

4、透传模式

上面每次发送数据都要进行字符长度设定,如果设置成透传,就有点像蓝牙模块的玩法

上面 的第2步之后

4.1、AT+CIPMODE=1 //开启透传模式

Response :OK

4.2、AT+CIPSEND      //带回车

Response: >                //这个时候随意发送接收数据咯

4.3、退出透传模式

在透传发送数据过程中,若识别到单独的⼀包数据 “+++”,则退出透传发送

3、用51单片机帮你实现这一切

#include <reg52.h>
#include <intrins.h>
#include <string.h>#define SIZE 12
sfr AUXR=0x8E;
sbit led1=P3^7;
sbit led2=P3^6;
char buffer[SIZE];
code char LJWL[]="AT+CWJAP=\"TP-LINK_1150\",\"yanfeng7518\"\r\n";//连接网络,双引号为转译
code char LJFWQ[]="AT+CIPSTART=\"TCP\",\"192.168.101.116\",8880\r\n";//连接服务器
char TCMS[]="AT+CIPMODE=1\r\n";//透传模式指令
char SJCS[]="AT+CIPSEND\r\n";//数据传输开始指令
char AT_OK_Flag=0;
char AT_Connect_Net_Flag=0;void UartInit(void)     //9600bps@11.0592MHz
{AUXR=0x01;SCON=0x50;//8位数据,可变波特率 REN置1TMOD &= 0x0F;//定时器时钟为12TTMOD |= 0x20;//串口1选择定时器1为波特率发生器TH1=0xFD;//设定定时初值TL1=0xFD;//波特率为9600TR1=1;//启动定时器1EA=1;//开启总中断ES=1;//开启串口中断}void Delay1000ms()       //@11.0592MHz
{unsigned char i, j, k;_nop_();i = 8;j = 1;k = 243;do{do{while (--k);} while (--j);} while (--i);
}void sendByte(char data_msg)
{SBUF=data_msg;while(!TI);//TI为发送中断请求位TI=0;}
void sendString(char *str)
{while(*str!='\0'){sendByte(*str);str++;}
}
void main()
{int mark=0;led1=1;led2=1;UartInit();//串口初始化Delay1000ms();//给WiFi上电时间sendString(LJWL);while(!AT_Connect_Net_Flag);//WIFI GOT IP返回值的标志位while(!AT_OK_Flag);    //OK返回值的标志位AT_OK_Flag=0;sendString(LJFWQ);while(!AT_OK_Flag);   AT_OK_Flag=0; sendString(TCMS);while(!AT_OK_Flag);AT_OK_Flag=0;sendString(SJCS);while(!AT_OK_Flag);if(AT_Connect_Net_Flag){led1=0;//点亮LED1灯,代表入网成功}if(AT_OK_Flag){led2=0;//点亮LED2灯,代表连接服务器并打开透传模式成功}while(1){ Delay1000ms(); sendString("zhengyanfeng handsome\r\n");      }
}void Uart_handle() interrupt 4
{static int i=0;//静态变量,初始化1次char tmp;if(RI){  //中断函数中对接收中断的响应RI=0;  //RI为接受中断数据标志位,接收完数据硬件置1,需要软件置0tmp=SBUF;if(tmp=='W'||tmp=='O'||tmp=='L'){i=0;//强制W字符为第一位}buffer[i++]=tmp;//数据偏移if(buffer[0]=='W' && buffer[5]=='G'){ //入网成功的判断依据WIFI GOT IPAT_Connect_Net_Flag=1;memset(buffer,'\0',SIZE);
}if(buffer[0]=='O' && buffer[1]=='K'){     //连接服务器等OK返回值指令的判断AT_OK_Flag=1;memset(buffer,'\0',SIZE);
}if(buffer[0]=='L' && buffer[2]=='1'){   //strstr(str1,str2)判断str1里面是不是有str2led1=0;memset(buffer,'\0',SIZE);}if(buffer[0]=='L' && buffer[2]=='0'){led1=1;memset(buffer,'\0',SIZE);}if(i==12) i=0;}
}

三、ESP-01s当服务器

1、AP模式配置

USB转TTL插入电脑,TX--RX RX-TX VCC-3.3V GDN-GND

查询IP地址:AT+CIFSR

1、配置成路由模式

AT+CWMODE=2

Response :OK

2、使能多链接

AT+CIPMUX=1

Response :OK

3、建立TCPServer

AT+CIPSERVER=1 // default port = 333

Response :OK

4、发送数据

AT+CIPSEND=0,4    // 发送4个字节在连接0通道上

>abcd                        //输入数据,不带回车

Response :SEND OK

5、接收数据

+IPD, 0, n: xxxxxxxxxx          //+IPD是固定字符串 0是通道,n是数据长度,xxx是数

6、断开连接 AT+CIPCLOSE=0

Response :0, CLOSED OK

2、单片机帮你做这一切

#include <reg52.h>
#include <intrins.h>
#include <string.h>#define SIZE 12
sfr AUXR=0x8E;
sbit led1=P3^7;
sbit led2=P3^6;
char buffer[SIZE];char LYMO[]="AT+CWMODE=2\r\n";//1.工作在路由模式
char DLJ[]="AT+CIPMUX=1\r\n";//2.使能多连接
char JLFW[]="AT+CIPSERVER=1\r\n";//3.建立服务器  default port=333
char FSSJ[]="AT+CIPSEND=0,5\r\n";//4.发送数据char AT_OK_Flag=0;
char AT_Connect_Net_Flag=0;
char Client_Connect_Flag=0;
void UartInit(void)     //9600bps@11.0592MHz
{AUXR=0x01;SCON=0x50;//8位数据,可变波特率 REN置1TMOD &= 0x0F;//定时器时钟为12TTMOD |= 0x20;//串口1选择定时器1为波特率发生器TH1=0xFD;//设定定时初值TL1=0xFD;//波特率为9600TR1=1;//启动定时器1EA=1;//开启总中断ES=1;//开启串口中断}void Delay1000ms()       //@11.0592MHz
{unsigned char i, j, k;_nop_();i = 8;j = 1;k = 243;do{do{while (--k);} while (--j);} while (--i);
}void sendByte(char data_msg)
{SBUF=data_msg;while(!TI);//TI为发送中断请求位TI=0;}
void sendString(char *str)
{while(*str!='\0'){sendByte(*str);str++;}
}
void main()
{int mark=0;led1=1;led2=1;UartInit();//串口初始化Delay1000ms();//给WiFi上电时间sendString(LYMO);while(!AT_OK_Flag);AT_OK_Flag=0;sendString(DLJ);while(!AT_OK_Flag);AT_OK_Flag=0;sendString(JLFW);while(!Client_Connect_Flag);if(Client_Connect_Flag){AT_OK_Flag=0;led1=0;led2=0;}while(1){ sendString(FSSJ);Delay1000ms();Delay1000ms();sendString("Hello");Delay1000ms();Delay1000ms();}
}void Uart_handle() interrupt 4
{static int i=0;//静态变量,初始化1次char tmp;if(RI){  //中断函数中对接收中断的响应RI=0;  //RI为接受中断数据标志位,接收完数据硬件置1,需要软件置0tmp=SBUF;if(tmp=='W'||tmp=='O'||tmp=='L'||tmp=='0'||tmp==':'){i=0;}buffer[i++]=tmp;if(buffer[0]=='W' && buffer[5]=='G'){AT_Connect_Net_Flag=1;memset(buffer,'\0',SIZE);
}if(buffer[0]=='O' && buffer[1]=='K'){AT_OK_Flag=1;memset(buffer,'\0',SIZE);
}if(buffer[0]=='0' && buffer[2]=='C'){Client_Connect_Flag=1;memset(buffer,'\0',SIZE);
}if(buffer[0]==':' && buffer[1]=='o'&& buffer[2]=='p'){led1=0;memset(buffer,'\0',SIZE);}if(buffer[0]==':' && buffer[1]=='c'&& buffer[2]=='l'){led1=1;memset(buffer,'\0',SIZE);}if(i==12) i=0;}
}

ESP8266网络调试手段:

1、刚开始可以通过TTL转USB直接和ESP8266连接,通过电脑安信可软件实现手动发送AT指令,观察ESP8266的返回值信息。

2、白盒测试:第一种调试手段比较蠢,我们需要手段发送AT指令,此时我们就需要通过51单片机来帮我们做这部分事,我们可以把单片机的TXD接到ESP8266的RXD,ESP8266的TXD再接到TTL转USB的RXD,这样我们就可以看到代码运行是否正确,在哪个环节出现问题。

3、ESP8266直接与51单片机交互,单片机的TXD接到ESP8266的RXD,ESP8266的TXD再接到

单片机的RXD,单片机把AT指令发送给ESP8266,让ESP8266可以上网,此时我们就可以通过网络调试助手发送指令实现WiFi模块对单片机IO口的操作。

51单片机(ESP8266模块)相关推荐

  1. 51单片机-LED模块-来回流水灯

    51单片机-LED模块-来回流水灯 1. 视频 哔哩哔哩视频地址: https://www.bilibili.com/video/av89552821 51单片机-LED模块-来回流水灯 2. 文件 ...

  2. 超声波c语言程序,51单片机超声波模块的C语言程序.doc

    51单片机超声波模块的C语言程序.doc 超声波模块程序 超声波模块程序 Trig P20 Echo P32 include define uchar unsigned char define uin ...

  3. 51单片机+ESP8266制作的门锁,含电路图、制板文件。支持密码、人脸、语音。

    51单片机+ESP8266制作的门锁,含电路图.制板文件.支持密码.人脸.语音. 硬件部分 软件部分 功能 第三方API.SDK 原理图 主要代码 程序执行流程 硬件部分 Esp-8266-01S(3 ...

  4. 51单片机PCA模块配置

    PCA模块是"可编程计数器阵列"的缩写,英文名称是"Programmable Counter Array",以下的说明均以SILICON LAB生产的C8051 ...

  5. 51单片机蓝牙模块(HC05)运行原理

    51单片机蓝牙模块(HC05)及其运行原理 目录 51单片机蓝牙模块(HC05)及其运行原理 一.测试蓝牙模块 二.配置蓝牙模块 三.烧写程序 四.测试 参考博文 一.测试蓝牙模块 在所有工作进行之前 ...

  6. 51单片机+ESP8266实现手机控制单片机(点亮LED灯)

    固件的烧写 既然要使用WiFi模块,那首先要进行固件的烧写 已经烧写好固件的可以直接跳过看模块的初始化 WiFi模块使用的是自带CH340驱动的NodeMCU开发板 固件烧录工具采用固件烧写\flas ...

  7. 51单片机+ESP8266+Android APP实现局域网内控制LED灯

    一.硬件设计 1.硬件选型 主控芯片:选用STC15W104.这款MCU比较小巧,控制3个LED灯的亮灭只需要3个IO即可,不足之处是没有串口,与ESP8266通信只能使用模拟串口,买了挺多的,先将就 ...

  8. 基于51单片机esp8266 WIFI大棚温湿度光照带co2 LCD12864显示设计

    摘  要 随着社会经济的不断发展,现代农业生产离不开环境控制.本文在对国内外大棚智能控制进行深入分析的基础上,针对大棚智能化控制存在的诸多因子,将智能传感器监测和单片机控制相结合,提出了基于单片机的温 ...

  9. 51单片机蓝牙模块BT05一定要看这个!

    前言: 推一下之前的教程文章(添加日期2021/8/11) 51单片机之路__基础部分完结(学习笔记) STM32白话文教程(一)固件库点灯 STM32白话文教程(三)内置按键模块.外接按键检测 三句 ...

  10. 51单片机+ESP8266实现局域网内WiFi控制LED

    写在前面   这篇博客是我初探物联网,东西简陋代码简陋,让各位看官见笑了哈.话不多说直接进入正题.   首先大致介绍下ESP8266,我用的是ESP-01这款,安信可的,具体参数大家可以直接上安信可官 ...

最新文章

  1. Eclipse快捷键:最常用且高效的快捷键
  2. android 蓝牙传输分包,彻底掌握Android多分包技术(一)
  3. java内部类文件,Java内部类学习
  4. 使用CSE轻松实现接口访问控制
  5. vs2019加载调试动态库dll文件
  6. Android学习笔记之SQLite
  7. python中面向对象的缺点_面向对象中的多态在 Python 中是否没有什么意义?
  8. VMware安装CentOS过程(初学linux)
  9. tcp长连接java_聊聊 TCP 长连接和心跳那些事
  10. 如何去追女生,看了你就成功了一半
  11. 学NTFS格式磁盘解析及atapi磁盘读写
  12. 拼多多开放平台订单信息查询接口【pdd.order.basic.list.get订单基础信息列表查询接口(根据成交时间)】代码对接教程
  13. png转icon java,PNG转ICO - steambap的个人空间 - OSCHINA - 中文开源技术交流社区
  14. 从零实现一个3D目标检测算法(1):3D目标检测概述
  15. 互联网盈利模式,网络策划运营模式
  16. 上海铭控:无线数字压力表正确的安装方式!
  17. 360免费wifi的linux驱动下载,360随身wifi驱动
  18. [基本功]辛普森悖论
  19. 基于PPGiPPG的心率检测原理
  20. Endnot引文格式设置随笔

热门文章

  1. 公司价值评估-自由现金流法
  2. 统计学之基础知识(数据分析准备)
  3. 瑞萨E1仿真器(R0E000010KCE00)支持的MCU系列--V850 Family
  4. C++进制转换程序(二进制转换为十进制,十进制转换为二进制)
  5. 算法设计与分析(python版)-作业三
  6. allennlp与pytorch版本匹配
  7. 数字标牌行业嵌入式主板方案
  8. ebuy遇到的问题以及解决方法
  9. 命令行玩斗地主,摸鱼再也不怕老板了!
  10. 如何将ios键盘返回由英文设置成中文