51单片机(ESP8266模块)

这篇具有很好参考价值的文章主要介绍了51单片机(ESP8266模块)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:

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

51单片机(ESP8266模块)

51单片机(ESP8266模块)

 一、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网络下)

51单片机(ESP8266模块)

 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置1
	TMOD &= 0x0F;//定时器时钟为12T
	TMOD |= 0x20;//串口1选择定时器1为波特率发生器
	
	TH1=0xFD;//设定定时初值
	TL1=0xFD;//波特率为9600
	TR1=1;//启动定时器1
	
	EA=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,需要软件置0
        tmp=SBUF;
		    if(tmp=='W'||tmp=='O'||tmp=='L'){
					i=0;//强制W字符为第一位
       }
			 buffer[i++]=tmp;//数据偏移
		if(buffer[0]=='W' && buffer[5]=='G'){ //入网成功的判断依据WIFI GOT IP

      AT_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里面是不是有str2
		  led1=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置1
	TMOD &= 0x0F;//定时器时钟为12T
	TMOD |= 0x20;//串口1选择定时器1为波特率发生器
	
	TH1=0xFD;//设定定时初值
	TL1=0xFD;//波特率为9600
	TR1=1;//启动定时器1
	
	EA=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,需要软件置0
        tmp=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口的操作。文章来源地址https://www.toymoban.com/news/detail-462680.html

到了这里,关于51单片机(ESP8266模块)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

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

    Esp-8266-01S(3.3v供电,需使用ams1117-3.3电路进行电压转换); STC89C52RC最小系统; LCD1602A; 1A05继电器; 2P接线端子; 2x4P排针、1x2P排针; 有源蜂鸣器(高电平触发); 按键若干; 杜邦线若干; USB转TTL烧写器 keil C51 Arduino IDE 立创EDA Android Studio STC烧写工具 vs2019 通过app语音控制

    2023年04月08日
    浏览(59)
  • C51单片机利用HC-05蓝牙模块实现手机点灯

    蓝牙通信,实现手机端远程(15米)控制单片机,这听起来对于初学者的我来说,是那么不可思议,经过不断地实验,阅读其他大佬的文章,终于实现了。 在有基础的通信原理知识的前提下,知,HC-05蓝牙模块与51的通信其实很简单,就是蓝牙模块的RXD(接收端)接单片机的TXD(发送

    2024年02月16日
    浏览(34)
  • HC-05(ZS-040)蓝牙模块使用详情(蓝牙模块配置、手机蓝牙控制单片机、蓝牙与蓝牙之间的通信)含51、32程序

    HC-05是一款主从一体化的蓝牙模块,因此其使用起来比较方便,只需要进行简单的配置即可。 本文就 手把手的介绍小白入手模块后如何使用 。 对于模块使用:1、蓝牙配置→2、手机与蓝牙的传输→3、手机通过蓝牙模块控制单片机→4、一对蓝牙之间主—从传输数据,这是一个

    2023年04月09日
    浏览(100)
  • 【上位机与下位机通信】使用WIFI模块ESP8266连接单片机与上位机通信

    承接上文WIFI上位机部分:【上位机】通过WIFI上位机与网络调试助手通信绘制曲线,现阶段实现了STM32单片机与ESP8266WIFI模块作为下位机与WIFI上位机通信。 ATK-ESP8266 是 ALIENTEK 推出的一款高性能的 UART-WiFi(串口-无线)模块,此处使用的是正点原子团队自主开发的ATK-ESP-01模块。

    2024年02月05日
    浏览(96)
  • 51系列单片机---ESP-01S无线WiFi模块的开发(路由服务器模式)

    记录一下基于STC89C52RC单片机对ESP-01S无线WiFi模块的开发(路由服务器模式)。 ESP-01S模块的路由服务器模式和设备模式开发思路相似,开发之前对ESP-01S模块的测试和波特率修改是一样的,差别只在于AT指令的不同。 记录一下代码编写的逻辑和过程: 1、用到的AT指令(发送AT指

    2024年04月11日
    浏览(26)
  • (pc端)/单片机连接ESP8266

    硬件:ESP8266模块,USB转TTL 连接方式 : esp8266的TX接转串口的RX,RX接TX 安装阿信可的esp8266调试工具 [ESP8266网络调试工具]ESP8266网络调试工具 提取码:djsz AT指令集是从终端设备(Terminal Equipment,TE)或数据终端设备(Data Terminal Equipment,DTE)向终端适配器(Terminal Adapter,TA)或数据电

    2024年02月09日
    浏览(33)
  • 51单片机(串口通信、蓝牙)

    串行接口简称串口,也称 串行通信接口 或串行通讯接口(通常指COM接口),是采用串行通信方 式的扩展接口。串行接口(Serial Interface)是指 数据一位一位地顺序传送。 其特点是通信线路简 单,只要一对传输线就可以实现 双向通信( 可以直接利用电话线作为传输线),从

    2024年02月15日
    浏览(25)
  • 单片机项目分享 单片机(stm32)远程智能宠物喂养系统 - 物联网 esp8266

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月19日
    浏览(48)
  • 手机蓝牙连接51单片机自动开门

    材料: 成品: 效果演示: 控制led: 控制开门: #舵机是通过绳子连接到锁栓上的,绳子和锁栓用热熔胶固定,整个装置也是用热熔胶固定在门上的。如果你的门锁拉不开,试试给锁栓缝隙上润滑油,同时调整舵机的力矩。 #自动开门效果演示视频 #app、烧录程序、hex代码资源

    2024年02月10日
    浏览(33)
  • 基于51单片机的智能小车(循迹、避障、蓝牙控制)

    文章目录 前言 一、功能 二、主要模块 1.L298N模块 2.循迹模块 3.红外避障模块 4.超声波避障模块 5..蓝牙模块 代码 三、其余模块 四、总结   本项目可实现小车红外循迹,L298N电机驱动,红外避障,超声波避障,蓝牙控制等功能的切换。   红外循迹,L298N电机驱动,PWM电机调速

    2024年02月04日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包