51单片机通过ESP8266模块与手机进行通讯(单片机)
相关连接和资料下载:
Step1:配置ESP8266
通过USB转TTL模块把ESP8266模块和电脑连接起来,如图:
把ESP8266模块的VCC,GND,CH_PD,UTXD,URXD口分别接USB转TTL模块的3.3v,地,3.3v,RXD,TXD
连接好后,就准备用电脑用串口调试助手向ESP8266发送AT指令。
串口调试助手下载地址:百度云盘
设置好串口调试助手的串口和波特率,ESP8266默认波特率为115200,把串口调试助手的波特率调为115200,勾选左下角的发送新行
。在输入框中输入 AT+RST 然后点击发送:
如果前面的配置都没错的话,串口调试助手会接收到esp8266返回的信息,AT+RST是复位命令,ESP8266会返回一堆乱码,这时候就说明ESP8266配置成功了。
配置好ESP8266之后就可以更改模块的信息了,按照以下顺序向模块发送AT指令:
AT+CWMODE=2
AT+CWSAP="esp8266","0123456789",11,3 //更改wifi名称,名字最好不要乱改,有些特别的名字是显示不出来的。
AT+RST //配置完AT+CWMODE要重启以下模块使配置生效
AT+CIPMUX=1
AT+CIPSERVER=1,8080 //8080为端口号,之后手机和单片机进行通讯要用到,可以自己修改。
前面三条绿色的指令配置一次就够了,断电重连配置的信息也不会改变,后面两条红色的指令要每次重启模块之后都要配置一遍。
按顺序配置完之后就可以用手机进行连接,如果手机发现wifi并且输入密码成功连接了,就证明上面的配置成功了。
下载手机网络调试助手:手机网络调试助手
打开手机网络调试助手,把协议类型设置为"TCP Client",IP地址设置为用AT+CIFSR指令查询到的ESP8266的IP,端口号就是前面设置的端口号。
配置好之后点连接(手机要连接好ESP8266的wifi),然后输入任意信息(如:123),点击发送。和ESP8266连接的电脑上的串口调试助手就会收到信息:+IPD,0,3:123(不同的ESP8266收到信息的格式可能会不同)从左到右的数字中,0是代表客户的索引,3是代表收到信息的大小,至于是字节数还是什么的就不清楚了,冒号后面是收到的信息,到时候把ESP8266连接到单片机上面的时候,单片机收到的和电脑一样的字符串,我们需要编写程序解析字符串,把其中需要的信息提取出来(如:+IPD,0,3:123,把123提取出来,单片机就可以得知手机发送了123,就可以在程序里面进行对应的动作)
Step2:连接单片机和ESP8266
上面的配置只是电脑和ESP8266的连接,确保ESP8266运行正常,现在要进行单片机和ESP8266的连接了。
因为51单片机通讯的波特率为9600,所以ESP8266要与单片机进行连接通讯,就要先用电脑吧ESP8266的波特率设置为9600;
AT+CIOBAUD=9600 发送一下指令就可以设置ESP8266波特率为9600了,AT+RST重启一下ESP8266,不要忘了把电脑串口调试助手的波特率也改为9600了,不然电脑连接ESP8266就会出现错误的了。
之前说过ESP8266有些指令配置一次就可以,有些重启之后要重新配置,这些指令是下面这两条:
AT+CIPMUX=1
AT+CIPSERVER=1,8080 //8080为端口号,之后手机和单片机进行通讯要用到,可以自己修改。
这些指令之前是用电脑给ESP8266发送的,但现在ESP8266和单片机连接起来的,这时要用单片机向ESP8266发送AT指令了。
在单片机程序中加入以下代码:
void connect_init()
{
char *a="AT+CIPMUX=1\r\n";
char *b="AT+CIPSERVER=1,8080\r\n";
while(*a!='\0')
{
SBUF=*a; //写入要发送的字符
while(!TI); //等待发送完成
TI=; //发送
a++;
}
//这里添加延时函数,延时5ms左右,给ESP8266反应时间
while(*b!='\0')
{
SBUF=*b;
while(!TI); //等待发送完成
TI=;
b++;
}
}
在程序的开头,配置串口连接函数的后面加入上面的代码,就可以让单片机每次开机的时候都向ESP8266发送一次指令,如果不会配置单片机串口的话,就百度一下教程,配置串口中断是51单片机基础的知识,这里就不多说了。
烧录好程序之后,然后把ESP8266模块和单片机连接起来,接线方式跟之前的差不多,VCC,GND,CH_PD,UTXD,URXD口分别接3.3v,地,3.3v,单片机芯片的RXD,单片机芯片的TXD,其中,要和单片机共地。
确保连接好ESP8266和烧录好程序,复位一下单片机,此时单片机应该向ESP8266完成发送AT指令了,打开手机的wifi,是否能连接上模块发出的wifi
热点,如果能连接上,证明单片机发送AT指令进行初始化的代码块没问题,如果失败了,检查一下连线和程序是否有问题。
现在已经完成了单片机与ESP8266的连接与初始化了,之后就进行对ESP8266向单片机发送的信息的解析。
void Uart() interrupt
{
char res;
res=SBUF; //取出接受到的数据
RI=; //清除接受中断标志位
if(res==':'||i>) //i是全局变量
{
receive[i]=res; //receive数组也是全局变量
i++;
if(res=='\n')
{
i=;
//添加对收到信息的处理代码
memset(receive,,);
}
}
}
因为单片机每产生一次串口中断,只是接收一个字符,单片机要接收+IPD,0,3:123的话,就会产生多次中断,单片机的中断程序里面就要进行对收到的信息进行筛选和提取。上面代码中 if(res==':'||i>0) 目的是排除掉+IPD,0,3 我不需要用的信息,然后i>0是确保之后程序能运行到if里面, 之后if(res=='\n')就是判断ESP8266发送完成一条信息没有,进入if(res=='\n')里面之后此时数组里面的信息是:123,然后就可以添加相关的处理函数了(如:LED=0),处理完之后要调用memset(receive,0,50);把数组清空,以便下次使用。
把程序向单片机进行烧录,连接好ESP8266(连接着ESP8266的时候烧录会失败,应该拔下ESP8266的TX和RX端),复位单片机,然后用手机连接上wifi,打开手机网络调试助手,发送自己设定好的信息,看看单片机有没做出对应的处理(如:LED从灭到亮),成功的话就可以在原先的程序上加上自己项目需要的代码就可以进行手机操控单片机了。
51单片机通过ESP8266模块与手机进行通讯(单片机)的更多相关文章
- ESP8266 AT指令开发(基于STC89C52单片机): 测试下诱人的程序(51单片机,8266,MQTT远程通信控制)
前言 实现的功能,APP通过SmartConfig给Wi-Fi模块配网并绑定设备,然后通过MQTT远程控制开发板的继电器, 简而言之: 51单片机+ESP8266用AT指令实现实现MQTT,(连接的本 ...
- 51单片机 HC05蓝牙模块
一.注意事项 1.烧写程序时,要把蓝牙tx,rx信号线拔掉,对烧写程序有影响. 2.执行HC05集命令时,均以\r\n结尾.串口中断若选择“发送新行”时,不用添加\r\n.原理相同. 二.准备软硬件 ...
- Android单片机与蓝牙模块通信实例代码
Android单片机与蓝牙模块通信实例代码 参考路径:http://www.jb51.net/article/83349.htm 啦啦毕业了,毕业前要写毕业设计,需要写一个简单的蓝牙APP进行交互,通 ...
- ESP8266 AT指令开发(基于STC89C52单片机): 硬件使用说明
实物图 硬件说明 开发板板载说明: 1.主控芯片: STC89C52 2.Wi-Fi模块: ESP8266 3.温湿度传感器: DHT11 4.液晶屏: IIC OLED 5.继电器: 220V 10 ...
- Arduino使用HC05蓝牙模块与手机连接
Arduino使用HC05蓝牙模块与手机连接 一切都是最好的选择 首先是线路连接,一定不要接错了 Arduino 代码 #include <SoftwareSerial.h> // Pin ...
- 基于MicroPython结合ESP8266模块实现TCP通信(AT指令版)
转载请注明文章来源,更多教程可自助参考docs.tpyboard.com,QQ技术交流群:157816561,公众号:MicroPython玩家汇 实验目的 - 学习ESP8266模块(ESP-01) ...
- ESA2GJK1DH1K升级篇: 移植远程更新程序到STM32F103RET6型号的单片机,基于(GPRS模块AT指令TCP透传方式)
前言 上节实现远程更新是更新的STM32F103C8T6的单片机 GPRS网络(Air202/SIM800)升级STM32: 测试STM32远程乒乓升级,基于(GPRS模块AT指令TCP透传方式),定 ...
- 【单片机入门】(三)应用层软件开发的单片机学习之路-----UART串口通讯和c#交互
引言 在第一章博客中,我们讲了Arduino对Esp32的一个环境配置,以及了解到了常用的一个总线通讯协议,其中有SPI,IIC,UART等,今天我为大家带来UART串口通讯和c#串口进行通讯的一个案 ...
- [51单片机] nRF24L01 无线模块 测试 按键-灯-远程控制
哈哈,穷吊死一个,自己做的一个超简单的板还没有电源提供,只得借助我的大开发板啦.其实这2个模块是完全可以分开的,无线嘛,你懂得!进入正题,这个实验的功能就是一个发送模块(大的那个板)连接4个按键,通过 ...
随机推荐
- Centos7 安装 Amazon Corretto 8
yum install dejavu-sans-mono-fonts dejavu-serif-fonts jpackage-utils wget https://d3pxv6yz143wms.clo ...
- C基础知识(10):预处理器
C预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤.简言之,C预处理器只不过是一个文本替换工具而已,它们会指示编译器在实际编译之前完成所需的预处理. 所有的预处理器命令都是以井号(#)开 ...
- Zemax评价函数经验小结
2.4 风景透镜 为了说明一个简单的评价函数问题,我们演示一个真实风景透镜实例,这个风景镜有两个局部最优解,它大概是历史上第一个照相透镜,具有合理的大视场.它一开始是在一个成像暗箱(camera ob ...
- core python
一:正则表达式 闭包操作符 | 等同于 or exp:a|b|c . 匹配任意一个字符 (若匹配本字符,需转义使用 \. 不能匹配换行符\n及空字符串) (^:匹配首 ...
- mac sudo异常
dsenableroot -d -u <your_admin_username> -p <your_password>
- appium环境搭建(一)----安装appium
一.安装appium Appium官方网站:http://appium.io/,官方首页给出了appium的安装步骤. > brew install node # get node.js > ...
- Maven下载安装测试
一.Maven下载 在Maven官网下载压缩包 二.安装 解压后目录如下 bin目录包含mvn的运行脚本 boot目录包含一个类加载器的框架,加载自己的类库 conf是配置文件目录 lib目录包含一些 ...
- 【计算机网络】-介质访问子层-(信道划分介质访问控制&随机访问介质访问控制)
[计算机网络]-介质访问子层-概述 介质访问控制子层功能 解决信道争用的协议,即用于多路访问信道上确定下一个使用者的协议 是数据链路层协议的一部分 介质访问控制子层位置 位于数据链路层的底部! 信道分 ...
- table表格的无缝循环
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- cookie,session,token的理解
Get POST 区别异同点 淘宝token的 理解 过程算法 防止伪造请求 伪造相对难 简单发展史 登录的操作: 哪些人往自己的购物车中放商品, 也就是说我必须把每个人区分开,这就是一个 ...