51单片机(ESP8266模块)
前言:
蓝牙,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地址 |
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 |
随意发送接收数据 |
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模块)相关推荐
- 51单片机-LED模块-来回流水灯
51单片机-LED模块-来回流水灯 1. 视频 哔哩哔哩视频地址: https://www.bilibili.com/video/av89552821 51单片机-LED模块-来回流水灯 2. 文件 ...
- 超声波c语言程序,51单片机超声波模块的C语言程序.doc
51单片机超声波模块的C语言程序.doc 超声波模块程序 超声波模块程序 Trig P20 Echo P32 include define uchar unsigned char define uin ...
- 51单片机+ESP8266制作的门锁,含电路图、制板文件。支持密码、人脸、语音。
51单片机+ESP8266制作的门锁,含电路图.制板文件.支持密码.人脸.语音. 硬件部分 软件部分 功能 第三方API.SDK 原理图 主要代码 程序执行流程 硬件部分 Esp-8266-01S(3 ...
- 51单片机PCA模块配置
PCA模块是"可编程计数器阵列"的缩写,英文名称是"Programmable Counter Array",以下的说明均以SILICON LAB生产的C8051 ...
- 51单片机蓝牙模块(HC05)运行原理
51单片机蓝牙模块(HC05)及其运行原理 目录 51单片机蓝牙模块(HC05)及其运行原理 一.测试蓝牙模块 二.配置蓝牙模块 三.烧写程序 四.测试 参考博文 一.测试蓝牙模块 在所有工作进行之前 ...
- 51单片机+ESP8266实现手机控制单片机(点亮LED灯)
固件的烧写 既然要使用WiFi模块,那首先要进行固件的烧写 已经烧写好固件的可以直接跳过看模块的初始化 WiFi模块使用的是自带CH340驱动的NodeMCU开发板 固件烧录工具采用固件烧写\flas ...
- 51单片机+ESP8266+Android APP实现局域网内控制LED灯
一.硬件设计 1.硬件选型 主控芯片:选用STC15W104.这款MCU比较小巧,控制3个LED灯的亮灭只需要3个IO即可,不足之处是没有串口,与ESP8266通信只能使用模拟串口,买了挺多的,先将就 ...
- 基于51单片机esp8266 WIFI大棚温湿度光照带co2 LCD12864显示设计
摘 要 随着社会经济的不断发展,现代农业生产离不开环境控制.本文在对国内外大棚智能控制进行深入分析的基础上,针对大棚智能化控制存在的诸多因子,将智能传感器监测和单片机控制相结合,提出了基于单片机的温 ...
- 51单片机蓝牙模块BT05一定要看这个!
前言: 推一下之前的教程文章(添加日期2021/8/11) 51单片机之路__基础部分完结(学习笔记) STM32白话文教程(一)固件库点灯 STM32白话文教程(三)内置按键模块.外接按键检测 三句 ...
- 51单片机+ESP8266实现局域网内WiFi控制LED
写在前面 这篇博客是我初探物联网,东西简陋代码简陋,让各位看官见笑了哈.话不多说直接进入正题. 首先大致介绍下ESP8266,我用的是ESP-01这款,安信可的,具体参数大家可以直接上安信可官 ...
最新文章
- Eclipse快捷键:最常用且高效的快捷键
- android 蓝牙传输分包,彻底掌握Android多分包技术(一)
- java内部类文件,Java内部类学习
- 使用CSE轻松实现接口访问控制
- vs2019加载调试动态库dll文件
- Android学习笔记之SQLite
- python中面向对象的缺点_面向对象中的多态在 Python 中是否没有什么意义?
- VMware安装CentOS过程(初学linux)
- tcp长连接java_聊聊 TCP 长连接和心跳那些事
- 如何去追女生,看了你就成功了一半
- 学NTFS格式磁盘解析及atapi磁盘读写
- 拼多多开放平台订单信息查询接口【pdd.order.basic.list.get订单基础信息列表查询接口(根据成交时间)】代码对接教程
- png转icon java,PNG转ICO - steambap的个人空间 - OSCHINA - 中文开源技术交流社区
- 从零实现一个3D目标检测算法(1):3D目标检测概述
- 互联网盈利模式,网络策划运营模式
- 上海铭控:无线数字压力表正确的安装方式!
- 360免费wifi的linux驱动下载,360随身wifi驱动
- [基本功]辛普森悖论
- 基于PPGiPPG的心率检测原理
- Endnot引文格式设置随笔