笔记学习:关于如何使用ESPwifi模块与51单片机通信
首先准备号ESP模块和51单片机,把两个模块的RXT和TXD交叉连接,然后通电,但是ESP模块只能使用3.3V免得电流5V会烧毁。
然后把ESP模块的波特率设置为9600,一般默认是115200的,由于单片机的波特率最高只能是9600.因为需要通信,所以波特率必须一致,利用串口软件与ESP连接这个时候需要USB转TTL连接然后把串口软件的波特率也设置好于ESP模块的波特率一样,发送AT显示OK则是一样波特率,如果不一样可以更换波特率逐个尝试。这个时候波特率设置一样了,就可以发送AT+UART_DEF=9600,8,1,0,0这串指令更改波特率就行了。
顶部代码:
#include <regx52.h>
#include <string.h>
#include <stdio.h>
#include "uart.h"
#include "ESP8266.h"
#include "led.h" sbit LED0=P2^0;
sbit LED1=P3^3;sbit Sand=P3^2;
/*****************相关变量**************/unsigned char Recive_table[20]=""; //用于接收wifi模块反馈到MCU上的数据char Recive_state = 0; //当前状态是否可以接收void ESP_Flag();
void ESP_Sand();
接好之后就编写代码:利用keil软件编写51单片机烧录的代码,这里是初始化串口的模式以及工作方式,,也可以用STC_ISP软件直接生成波特率,只有设置好工作方式就可以
void UartInit(void) //9600bps@11.0592MHz
{TMOD &= 0x0F; //清除定时器1模式位TMOD |= 0x20; //设定定时器1为8位自动重装方式TL1 = 0xFD; //设定定时初值 //4800bpsTH1 = 0xFD; //设定定时器重装值REN=1; //打开中断允许SM0=0; // 设置串口工作方式SM1=1; //设置串口工作方式ET1 = 0; //禁止定时器1中断TR1 = 1; //启动定时器1ES=1; //开启串口中断EA=1;
}
下面就可以编写与ESP模块通信的代码了:这里是利用c语言的stdio库函数里面的printf打印。
也可以用模块的SBUF利用指针输出字符串
void ESP_Init()
{ES=0;TI=1;printf("AT+RST\r\n"); //复位LED();delay(1000); 延迟1sprintf("AT+CWMODE=3\r\n"); //设置模式LED();delay(1000);printf("AT+CWSAP=\"ESP8266\",\"88888888\",1,3\r\n"); //设置WIFI名称和密码LED();delay(1000);printf("AT+CIFSR\r\n"); //查看接入设置LED();delay(1000);printf("AT+CIPMUX=1\r\n"); //设置多链接模式LED();delay(1000);printf("AT+CIPSERVER=1,8080\r\n"); //设置一个服务器端口LED();delay(1000);while(!TI);//判断串口发送中断标志位是否为1,若为1则单片机发送数据缓存寄存器给PC端串口调试助手发送数据结束。为什么在此编写while(!TI)?由于需要把单片机发送数据缓存寄存器保存的数据发送给PC端串口调试助手。TI=0; //TI(即串口发送中断标志位)=0,表示单片机发送数据缓存寄存器可重新给PC端串口调试助手发送数据,不可申请串口中断ES=1; //打开串口中断允许位,允许进入串口中断服务程序。}
这里是定时器中断判断代码:需要放在mian.c里面即是mian函数的下方,这个是用来判断单片机接收到ESPwifi模块AT指令反馈回来的函数。
void Uart_Interrupt() interrupt 4
{static unsigned char i=0;if(RI==1){ES=0;RI=0;Recive_table[i]=SBUF; //MCU接收wifi模块反馈回来的数据 i++; if(Recive_table[i-1]=='\n'){Recive_table[i]='\0';i=0; //遇到换行 重新装值Recive_state = 1; }ES = 1; }else TI=0;
}
接下来就是与手机通信的代码,这里是判断Recive_state的响应标志位。如果是1的时候我才可以执行手机发送过来的识别标志。
void ESP_Flag() //手机发送数字让WiFi控制单片机亮灯
{if(Recive_state == 1){ES=0; //进入状态串口中断关闭等待操作完下一个中断的到来 if((Recive_table[0]=='+')&&(Recive_table[1]=='I')&&(Recive_table[2]=='P'))//MCU接收到的数据为+IPD时进入判断控制0\1来使小灯亮与灭{if((Recive_table[3]=='D')&&(Recive_table[6]==',')){ if(Recive_table[9]=='0') //这里的标志是接到的标志是否与协议的标志一致{LED0=1;//0 灯灭 }else if (Recive_table[9]=='1'){ LED0=0; //1 灯亮 }}} memset(Recive_table,'\0',20); //接收完情况等待下一个标志Recive_state=0; //状态重新设置ES=1; //打开串口中断允许位,允许进入串口中断服务程序。}
}
当烧录代码进去之后打开手机的的网络调试软件,首先在TCP server激活ESPwifi设置的端口。这里是8080,然后点到TCP client添加ESPwifi模块的IP地址和端口号,IP地址在手机连接ESPWiFi之后点击热点连接那里就可以看到。添加成功之后就可以在发送1和0之间控制灯亮灭,
同时这个代码是比较重要的,用来判断手机发过来的指令来控制IO口,同时也可以在这个代码上修改需要执行的操作,利用灯,各个IO口。各种指令操作等等,
void ESP_Flag() //手机发送数字让WiFi控制单片机亮灯
{if(Recive_state == 1){ES=0; //进入状态串口中断关闭等待操作完下一个中断的到来 if((Recive_table[0]=='+')&&(Recive_table[1]=='I')&&(Recive_table[2]=='P'))//MCU接收到的数据为+IPD时进入判断控制0\1来使小灯亮与灭{if((Recive_table[3]=='D')&&(Recive_table[6]==',')){ if(Recive_table[9]=='0') //这里的标志是接到的标志是否与协议的标志一致{LED0=1;//0 灯灭 }else if (Recive_table[9]=='1'){ LED0=0; //1 灯亮 }}} memset(Recive_table,'\0',20); //接收完情况等待下一个标志Recive_state=0; //状态重新设置ES=1; //打开串口中断允许位,允许进入串口中断服务程序。}
}
这里有个比较少见用的函数memset,是设置字符串的初始化修改值得,第一个参数得字符串的首地址,第二个是需要初始化得值或修改得值,第三个是修改多少位
笔记学习:关于如何使用ESPwifi模块与51单片机通信相关推荐
- ESP8266wifi模块与51单片机通信教程
** ESP8266wifi模块与51单片机通信教程 准备两个200欧左右的电阻 准备6根杜邦线 然后将ES8266通过如图这种方式连接起来 注意:必须先配置ESP8266模块,配置需要用到ESP82 ...
- 4g模块与51单片机通信
本文硬件选自忆佰特的4g模块和老陈的上官一号 第一步先使用电脑配置4g模块,配置好后再与51单片机进行接线完成通信,需要提前插入SIM卡,接线如下 通电后模块右下角会亮起红灯,并且右上角四颗lcd灯会 ...
- 超声波测距模块(51单片机)
超声波测距模块(51单片机) 硬件介绍 1.使用场景 2. 工作原理 讲解代码 重点 1.定义引脚 2.定义时间 3.获取时间和距离 4.主函数 5.延时函数 结尾 硬件介绍 1.使用场景 超声波测距 ...
- 单片机与gsm通信c语言,gsm模块如何与单片机通信?
51单片机与GSM模块实现通信 1.检测串口线的好坏 1)将串口线插在电脑上,用短路子短接串口的2脚和3脚 2)打开串口调试助手 3)点击自动发送,在自动发送的窗口中随便发个数据,看看能不能接收到若能 ...
- hcsr04超声波模块在51单片机中的应用
型号及功能 HC-SR04超声波测距模块 主要参数 1:使用电压:DC5V 2:静态电流:小于2mA 3:电平输出:+5V 4:电平输出:底0V 5:感应角度:不大于15度 6:探测距离:2cm-45 ...
- 通过ESP8266WIFI模块让51单片机向后端交互数据
这一次做的是用ESP8266WIFI模块,让51单片机与后端交互数据.简单地发了一个字符串. 模块连接部分:VCC接电源,GND接地,模块的TXD接单片机的RXD,模块的RXD接单片机的TXD. 需要 ...
- [单片机笔记]LCD1602模块(51单片机)
文章目录 1 LCD1602概要 1.1 介绍 2 LCD1602功能 2.1 引脚功能 2.2 控制指令集 2.3 连线方法 3 程序设计 3.1 头文件 3.2 .c程序 3.2.1 延迟函数 3 ...
- 51单片机的读写端口c语言,CH375_CH376 U盘读写模块在51单片机上的应用(原理图+测试程序+资料)...
/* **************************************** ** Copyright (C) W.ch 1999-2004 ** *************** ...
- 51单片机学习笔记1 简介及开发环境
51单片机学习笔记1 简介及开发环境 一.51单片机 1. STC89C52单片机简介 2. 命名规则 3. 封装 (1)PDIP (2)LQFP (3)PLCC (4)PQFP 二.STC8051结 ...
- 【TB-02模组专题⑤】微信小程序通讯TB02 模块控制 STM32 单片机LED灯
本<安信可ble mesh蓝牙模组TB-02模组专题>系列博客学习由官方博客 CSDN安信可博客 潜心所力所写.如有不对之处,请留言,我们及时更改. 1.BLE MESH开发环境linux ...
最新文章
- 2017年深度学习必读31篇论文(附下载地址)
- 20.Android studio提示Cmake Error executing external native build for cmake...
- 数据库开发——MySQL——简单介绍和安装
- 2014年第五届蓝桥杯 - 省赛 - C/C++大学A组 - G. 蚂蚁感冒
- Learning to Rank算法介绍:RankSVM 和 IR SVM
- 计算机学校教学大纲,中等职业学校计算机应用基础教学大纲
- 提升普适性,阿里云官方SDK发布支持Go语言SDK
- [转]QT QDateTime类、QTimer类
- 关于使用 Python 析构函数的正确姿势
- go语言和python-新学语言,选GO还是Python
- codevs 5958 无
- 2019 牛客多校第三场 H Magic Line
- 【图像去噪】基于matlab非局部均值(NLM)滤波图像去噪【含Matlab源码 420期】
- 【读书笔记】-《软件测试的艺术》
- php mysql关键字查询_使用php mysql进行关键字搜索?
- Java GUI——Java图形用户界面
- 推荐使用的JS日期时间格式化的方法
- 拿得起,放得下,想得开
- lisp 左手钢筋_左手键配置程序
- 17,verilog之for循环
热门文章
- php微积分难吗,两句话让你学好微积分
- python中if语句格式_Python入门学习系列——Python中的if语句
- win7资源服务器未响应,win7电脑怎么设置服务器未响应
- java计算机毕业设计教育机构管理源码+mysql数据库+系统+lw文档+部署
- android ConstraintLayout布局 详解
- Matlab快速傅里叶变换
- 猜数字游戏程序,随机生成一个1~10之间的数,并让用户输入一个数字 猜测
- 为Raspberry Pi 2编译内核模块
- Python -- 网络编程 -- 抓取网页图片 -- 豆瓣妹子
- c语言从入门到秃头表情包,c语言从入门到放弃表情包 - c语言从入门到放弃微信表情包 - c语言从入门到放弃QQ表情包 - 发表情 fabiaoqing.com...