单片机之ESP8266模块

目录

ESP8266简介

前言

ESP8266的工作模式

ESP8266引脚说明

ESP8266测试

步骤

单片机与esp8266交互

前言

收到数据的格式

AP模式

服务器模式

外部执行命令

代码内执行命令

代码部分

客户端模式

外部执行命令

内部执行命令

代码部分

STA模式

服务器模式

外部执行命令

代码内部执行命令

代码部分

客户端模式

外部执行命令

内部执行命令 

代码部分

ESP8266的烧录

前言

步骤

ESP8266简介

前言

  • ESP8266是一个完整且成体系的WIFI网络解决方案,能够搭载软件应用,或通过另一个应用处理器卸载掉所有的WIFI网络功能
  • 我们使用的ESP8266是串口型WIFI,速度比较低,不能用来传输图像或者视频等这些大容量数据,主要应用于数据量传输比较少的场合。

ESP8266的工作模式

  • STA模式:ESP8266通过路由器连接互联网,手机或电脑通过互联网实现对设备的远程控制
  • AP模式:AP模式也是默认模式,ESP8266模块作为热点,实现手机或电脑直接与模块进行通信,实现局域网无线控制
  • STA+AP模式:两种模式的共存模式,即可以通过互联网控制,也可AP接入点控制,实现两者之间的无缝切换

ESP8266引脚说明

  • VCC:电源引脚,电源一般接3.3V
  • GND:接地
  • URXD:串口接收引脚
  • UTXD:串口发送引脚
  • RST:复位管脚,可做外部硬件复位使用
  • CH_PD:使能引脚,接3.3V
  • GPIO0:用于对模块的烧录flash芯片,烧录时接GND
  • GPIO2:该模块的外接引脚,一般不用(类似单片机的P引脚)

ESP8266测试

前言:测试ESP8266可以使用51单片机(使用单片机我经过测试不接使能引脚烧录和测试可成功),也可以使用USB转TTL模块

  • ESP模块的VCC引脚——3.3V电源引脚
  • ESP模块的GND引脚——接地
  • ESP模块的RXD引脚——USB转TTL模块的TXD引脚
  • ESP模块的TXD引脚——USB转TTL模块的RXD引脚
  • ESP模块的CH_PD引脚——3.3V

步骤

  • 将各个引脚按照上述方式连接
  • 下载好USB转TTL模块驱动CH340
  • 连接完成后打开安信可串口调试助手,将波特率改为ESP8266的默认波特率115200MHz,选好自己的串口,勾选自动换行,并打开该串口
  • 发送AT命令,若返回OK字样,那么说明模块没问题

注意:当我们只是连接ESP模块的VCC引脚,GND引脚和使能引脚,便可以通过电脑或手机搜索出该ESP模块的WIFI信号。

单片机与esp8266交互

前言

  • 引脚连线和测试时的引脚连线一样,只不过将USB转TTL模块改为单片机模块
  • 要想让模块与单片机交互,需要将模块进行配置;
  • 指令原理:设备的串口连接esp8266的串口并将修改的串口值写入到ESP模块的flash中,即使断电,也会被保存。
  • 无论配置那种工作模式,那么下面指令配置必须提前执行

AP:测试连接是否成功,连接成功后,模块回想我们返回ok

AT+RESTORE:恢复出厂设置,设置乱了的话恢复默认设置

AT+UART_DEF=波特率,8,1,0,0:将波特率改为自己设备对应的波特率

注意:

  • 每次发送命令后,命令之后必须添加回车换行,并且命令之间不能有空格。
  • 对于后面有=(也就是有配置选项的,将=及后面的配置改为?就可以对该配置信息进行查询)

收到数据的格式

前言:当使用透传模式时,那么手机发送给单片机什么信息,那么单片机就收到什么信息;当不使用透传模式时,那么手机发送给单片机的信息会被esp8266模块进行封装

不使用透传模式:手机发送:数据——单片机收到:+PID,ID号,发送数据的长度,数据

使用透传模式:手机发送:数据——单片机收到:数据

注意:

  • 当手机连接热点成功后,其中+PID,ID号是固定的,用户可以根据需要发送多少数据,然后长度就可以确定,这样串口中断就可以按照这个格式进行解析,而我们主要关注的是数据这块,数据这块内容就是手机实际给我们发送的,其他的都是esp8266给我们加的
  • 当esp8266模块作为服务器时,不可以使用透传模式;只有当esp8266作为客户端时才可以使用透传模式
  • AT+CIPMODE=值:是否开启透传模式(值为1时开启透传模式,值为0时关闭透传模式)

AP模式

服务器模式

原理:单片机连接电脑,给esp8266模块供电,esp8266模块释放wifi热点,esp8266作为服务器开放端口给连接esp8266热点的手机客户端进行连接,手机作为客户端只需要填写esp8266的IP地址和端口就能与esp8266进行通信,而esp8266通过串口与单片机进行通信,此时我们就相当于通过手机与单片机进行通信。

外部执行命令

AT+CWMODE=2:开启 AP 模式(1为station模式,2为ap模式,3为混合模式)

AT+CWSAP="wifi名","密码8位",热点通道,加密方式:设置esp8266模块wifi基础设置

  • 加密方式:(0:OPEN,1:WEP, 2:WPA_PSK,3:WPA2_PSK,4:WPA_WPA2_PSK)

AT+CIFSR:获取当前模块的IP地址(不用写也可以,这里是为了让手机客户端连接)

AT+RST:设置完成后重启

注意:以上设置最好在esp8266模块使用之前进行配置,那么这样的话就不用在代码中执行了。

代码内执行命令

AT+CIPMUX=1:开启多连接模式

AT+CIPSERVER=1,端口号:开放服务器端口

注意:这里面配置的命令需要单片机向esp8266模块发送。

代码部分
#include <regx52.h>
unsigned char key=0;
unsigned char Receive[15];
unsigned int i=0;
//延时ms函数
void delay_ms(unsigned int ms)
{unsigned char i,j;for(i=ms;i>0;i--){for(j=120;j>0;j--);}
}
void initscon(){SCON=0x50; //8位异步通信方式,允许接收数据TMOD=0x20; //配置波特率发生器T1,工作方式为2TH1=0xFD; //重置TL1TL1=0xFD; //设置初值EA=1;	//开启总中断TR1=1;	//打开波特率发生器T1
}
void SENT_At(unsigned char *At_Comd)//指针指向At指令
{ES = 0;//关闭串口中断while(*At_Comd!='\0'){SBUF = *At_Comd;while(!TI);//等待该字节发送完毕,发送完后硬件自动置一TITI = 0;//硬件之以后必须软件置零才能进行下一次数据传送delay_ms(5);At_Comd++;//指向下一个字节}
}
void WIFI_Init()//通过单片机配置AT指令
{SENT_At("AT+CIPMUX=1\r\n");//多连接模式delay_ms(1000); //每发送完一套命令延时1sSENT_At("AT+CIPSERVER=1,8080\r\n");//开启服务器端口号delay_ms(1000);ES = 1; //前面关中断是为了避免中断对初始化wifi的影响
}
void main(){while(1){//第一次按下按键if(P3_1==0&&key==0){key=1;}//按下按键并抬起if(key==1&&P3_1==1){initscon();WIFI_Init();key=0;}}
}
void scon_isr() interrupt 4
{if(TI){TI=0; //数据发送完清TI}if(RI){RI=0;Receive[i]=SBUF; //读取接受的数据if(Receive[0]=='+'){i++;}else{i=0;} //超过数组限制i=0后跳出中断if(i==10){ //因为前面多个i++,所以i=10时判断i=0;//取出发送的数据进行判断switch(Receive[9]){case 1:P2_0=~P2_0;break;case 2:P2_1=~P2_1;break;case 3:P2_2=~P2_2;break;case 4:P2_3=~P2_3;break;case 5:P2_4=~P2_4;break;case 6:P2_5=~P2_5;break;case 7:P2_6=~P2_6;break;case 8:P2_7=~P2_7;break;default:P2=0xff;}}}
}

注意:

  • P2口为我控制8个LED灯的引脚,P3_1为我按键的引脚 
  • 这里面我只要长度为10的数据,仅仅最后一个数据用来作灯的控制数据
  • 在这里面我可以通过我的按键进行手机和wifi模块的连接(按一下按键就可以初始化wifi),通过手机发送的数字来控制8个LED灯的亮灭

客户端模式

原理:单片机连接电脑给esp8266供电,esp8266向外部发送热点,我们的手机连接esp8266发送的热点并通过端口开放自己的服务,那么esp8266模块就可以通过自己发送的热点来访问手机搭建的服务进而实现esp8266与手机的通信,因为esp8266与单片机通过串口通信,那么我们就可以通过我们的手机与单片机实现间接的通信。

外部执行命令

AT+CWMODE=2:设置工作模式为AP模式

AT+CWSAP="模块wifi名称","wifi8位密码",1,4:设置esp8266模块热点基本参数

AT+CIFSR:查询模块IP地址

内部执行命令

AT+CIPMUX=0:开启单连接模式(不写也可)

AT+CIPSTART="TCP","手机服务器IP地址",手机开放的端口:通过端口和手机服务器建立连接

AT+CIPMODE=1:开启透传模式

注意:这种模式下,手机作为服务端,那么必须始终处于监听状态,随时等待esp8266模块的连接

代码部分
#include <regx52.h>
unsigned char key=0;
unsigned char Receive;
//延时ms函数
void delay_ms(unsigned int ms)
{unsigned char i,j;for(i=ms;i>0;i--){for(j=120;j>0;j--);}
}
void initscon(){SCON=0x50; //8位异步通信方式,允许接收数据TMOD=0x20; //配置波特率发生器T1,工作方式为2TH1=0xFD; //重置TL1TL1=0xFD; //设置初值EA=1;	//开启总中断TR1=1;	//打开波特率发生器T1
}
void SENT_At(unsigned char *At_Comd)//指针指向At指令
{ES = 0;//关闭串口中断while(*At_Comd!='\0'){SBUF = *At_Comd;while(!TI);//等待该字节发送完毕,发送完后硬件自动置一TITI = 0;//硬件之以后必须软件置零才能进行下一次数据传送delay_ms(5);At_Comd++;//指向下一个字节}
}
void WIFI_Init()//通过单片机配置AT指令
{SENT_At("AT+CIPMUX=0\r\n");//单连接模式delay_ms(1000); //每发送完一套命令延时1sSENT_At("AT+CIPSTART=\"TCP\",\"192.168.4.2\",8086\r\n");//与192.168.4.2建立连接delay_ms(1000);SENT_At("AT+CIPMODE=1\r\n");//开启透传模式delay_ms(1000);ES = 1; //前面关中断是为了避免中断对初始化wifi的影响
}
void main(){while(1){//第一次按下按键if(P3_1==0&&key==0){key=1;}//按下按键并抬起if(key==1&&P3_1==1){initscon();WIFI_Init();key=0;}}
}
void scon_isr() interrupt 4
{if(TI){TI=0; //数据发送完清TI}if(RI){RI=0;Receive=SBUF; //读取接受的数据switch(Receive){case 1:P2_0=~P2_0;break;case 2:P2_1=~P2_1;break;case 3:P2_2=~P2_2;break;case 4:P2_3=~P2_3;break;case 5:P2_4=~P2_4;break;case 6:P2_5=~P2_5;break;case 7:P2_6=~P2_6;break;case 8:P2_7=~P2_7;break;default:P2=0xff;}}
}

注意:因为开启了透传模式,所以串口中断的代码就变得简单了,就不需要从esp8266封装的数据中提取有用的信息了,若你不用透传模式,那么串口中断处代码和上面esp8266模块作为服务器的代码一样

STA模式

服务器模式

原理:单片机连接电脑,给esp8266进行供电,esp8266连接我们局域网中的热点,同时esp8266通过端口在局域网内充当服务器,那么局域网内的手机就可以通过这个局域网访问到esp8266服务器从而对esp8266服务器进行控制,而esp8266与我们的单片机通过串口进行通信,那么我们的手机就可以间接的与单片机进行通信。

外部执行命令

AT+CWMODE=1:开启station工作模式

AT+CWJAP="wifi名称","wifi密码":连接外部wifi热点(尽量连2.4g)

AT+RST:重启模块生效

代码内部执行命令

AT+CIPMUX=1:开启多连接模式(多个设备可以连接esp8266模块)

AT+CIFSR:查询esp8266模块IP地址(用于手机连接esp服务器)

AT+CIPSERVER=1,端口号:通过端口开放服务

代码部分
void WIFI_Init()//通过单片机配置AT指令
{SENT_At("AT+CIPMUX=1\r\n");//多连接模式delay_ms(1000); //每发送完一套命令延时1sSENT_At("AT+CIPSERVER=1,8086\r\n");//开启服务器端口号delay_ms(1000);ES = 1; //前面关中断是为了避免中断对初始化wifi的影响
}

注意:其他的代码和上面服务器模式的代码一样(只是这个wifi初始化的模块变了)。

客户端模式

原理:单片机连接电脑给esp8266进行供电,esp8266连接我们手机所在的局域网,局域网中我们的手机作为服务器开放了端口一直处于外部监听状态,由于esp8266模块和我们的手机在同一个局域网中,那么esp8266就可以主动连接我们的手机和其进行通信,由于esp8266和单片机之间通过串口进行通信,那么我们的手机就间接的与单片机进行通信。

外部执行命令

AT+CWMODE=1:设置工作模式为station模式

AT+CWJAP="wifi名称","wifi密码":连接外部wifi热点(尽量连2.4g)

AT+RST:重启模块生效

内部执行命令 

AT+CIPSTART="TCP","手机服务器IP地址",手机端口号:通过端口和手机建立连接

AT+CIPMODE=1:开启透传模式(1为透传,0为非透传)

注意:

  • 在这种情况下连接esp8266模块,那么我们的手机作为服务器就必须一直处于监听状态。
  • 不使用透传模式,那么通过手机app发送过来的数据就会被esp8266包装,进而我们取数据困难
代码部分
void WIFI_Init()//通过单片机配置AT指令
{SENT_At("AT+CIPSTART=\"TCP\",\"192.168.18.9\",8888\r\n");//连接服务器delay_ms(1000); //每发送完一套命令延时1sSENT_At("AT+CIPMODE=1\r\n");//开启透传模式delay_ms(1000);ES = 1; //前面关中断是为了避免中断对初始化wifi的影响
}

注意:其他的代码和上面客户端模式的代码一样(只是这个wifi初始化的模块变了)。 

ESP8266的烧录

前言

  • 当我们对模块的设置内容比较乱,并且致使我们无法完成网络调试时,我们可以通过烧录固件的行式将设置恢复为默认状态
  • 连接引脚是在ESP8266测试的引脚接线基础上多增加一条引脚接线(ESP模块的GPIO0引脚——接地)

步骤

  • 将各个引脚按照前言方式连接
  • 去https://docs.ai-thinker.com/esp8266下载flash_download_tool烧录工具和ESP8266.bin的固件(MQTT透传AT固件(固件号:1471))
  • 打开flash_download_tool后点ok

第一个绿方块填写你要烧录固件的文件位置,第二个绿方块填写你烧录固件的起始地址(就写0x0000)

按照上面的填写方式填写后(串口写你自己的串口),先点击ERASE(擦除)后再启动51单片机,当绿方块最后变成完成(擦除完成)后点击START进行烧录

这样就烧录成功了(拔掉ESP模块的GPIO0引脚后就可继续进行测试)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/822698.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

10个常用的损失函数及Python代码实现

本文深入理解并详细介绍了10个常用的损失函数及Python代码实现。 什么是损失函数&#xff1f; 损失函数是一种衡量模型与数据吻合程度的算法。损失函数测量实际测量值和预测值之间差距的一种方式。损失函数的值越高预测就越错误&#xff0c;损失函数值越低则预测越接近真实值…

LUCF-Net:轻量级U形级联 用于医学图像分割的融合网络

LUCF-Net&#xff1a;轻量级U形级联 用于医学图像分割的融合网络 摘要IntroductionRelated WorkProposed MethodLocal-Global Feature ExtractionEncoder and DecoderFeature FusionLoss Function LUCF-Net: Lightweight U-shaped Cascade Fusion Network for Medical Image Se…

Android zxing库实现扫码识别

第一步 加库zxing库 //导入二维码识别库ZXingimplementation("com.journeyapps:zxing-android-embedded:4.2.0") 第二部获取摄像机权限 <uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="andro…

【日常记录】【CSS】利用动画延迟实现复杂动画

文章目录 1、介绍2、原理3、代码4、参考链接 1、介绍 对于这个效果而言&#xff0c;最先想到的就是 监听滑块的input事件来做一些操作 ,但是会发现&#xff0c;对于某一个节点的时候&#xff0c;这个样式操作起来比较麻烦 只看这个代码的话&#xff0c;发现他用的是动画&#x…

超详细!Python中 pip 常用命令

相信对于大多数熟悉Python的人来说&#xff0c;一定都听说并且使用过pip这个工具&#xff0c;但是对它的了解可能还不一定是非常的透彻&#xff0c;今天小编就来为大家介绍10个使用pip的小技巧&#xff0c;相信对大家以后管理和使用Python当中的标准库会有帮助。 安装 当然在…

【算法一则】编辑距离 【动态规划】

题目 给你两个单词 word1 和 word2&#xff0c; 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符 删除一个字符 替换一个字符 示例 1&#xff1a;输入&#xff1a;word1 "horse", word2 "…

16 - Debian如何配置vsftpd(1)实现匿名上传下载

作者&#xff1a;网络傅老师 特别提示&#xff1a;未经作者允许&#xff0c;不得转载任何内容。违者必究&#xff01; Debian如何配置vsftpd&#xff08;1&#xff09;实现匿名上传下载 《傅老师Debian小知识库系列之16》——原创 前言 傅老师Debian小知识库特点&#xff1a…

微信小程序获取蓝牙信标

/*** 搜索设备界面*/ import Dialog from vant/weapp/dialog/dialog; Page({data: {list: []},onPullDownRefresh: function () {wx.request({url: https://wwz.jingyi.icu/app/Explain/index,data: {scenic_id: 3},method: POST,success: (res) > {console.log(res);let th…

重磅!国内首个基于单张图片的3D人脸重建课程

3D人脸重建在计算机视觉和图形学中一直是一个经典且热门的研究方向&#xff0c;在游戏、影视、娱乐等众多行业也有着广泛的应用。早期人脸重建主要基于多视角相机或深度相机&#xff0c;随着深度学习的兴起&#xff0c;基于单张图片的人脸重建成为可能&#xff0c;且重建的精度…

数学建模---Matlab学习笔记

1.经典例题 &#xff08;1&#xff09;判断质数 给定一个大于100的数字&#xff0c;判断是否为质数 先设定布尔值是true,也就是假设这个数字是质数&#xff0c;利用for循环进行遍历直到n-1&#xff0c;如果被任意的数字整除&#xff0c;就说明不是质数&#xff0c;我们就把布…

2024 年排名前 5 的 CSS 框架

文章目录 1、Bootstrap2、Tailwind CSS3、Foundation4、Bulma5、UIKit 1、Bootstrap Bootstrap框架是由Twitter的设计师Mark Otto和Jacob Thornton合作开发的&#xff0c;于2011年8月在GitHub上发布。它是目前最受欢迎的前端框架之一&#xff0c;被广泛应用于各种Web项目中。Bo…

最新Latex2024安装教程 超简单

Latex是一款常用的论文写作工具&#xff0c;今天小菜介绍Latex的安装配置过程。 1. 来到官网下载镜像文件 https://www.tug.org/texlive/ 按步骤点击&#xff1a; 就会进入一个最近的镜像网站&#xff0c;选择textlive2024.iso即可 下载完成之后解压&#xff0c;安装路径…

Linux02(项目部署,手动和自动部署,JDK版本问题,安装软件,安装软件,安装JDK,Tomcat,MySQL,Irzsz)

目录 一、安装软件 1. 安装准备工作 1 Linux里的软件安装方式 2 上传软件到Linux 3 拍照虚拟机快照 2. 安装JDK 1 卸载自带jdk 2 解压JDK 3 配置环境变量 4 测试JDK 3. 安装Tomcat 1 解压Tomcat 2 修改防火墙设置 3 测试Tomcat 启动Tomcat 访问Tomcat 查看Tom…

git 小记

一、 github新建仓库 git clone 。。。。。。。。。。。 &#xff08;增删查补&#xff0c;修改&#xff09; git add . git commit -m "修改” git push (git push main) 二、branch 分支 branch并不难理解&#xff0c;你只要想像将代码拷贝到不同目录…

MongoDB的CURD(增删改查操作)

读者大大们好呀&#xff01;&#xff01;!☀️☀️☀️ &#x1f525; 欢迎来到我的博客 &#x1f440;期待大大的关注哦❗️❗️❗️ &#x1f680;欢迎收看我的主页文章➡️寻至善的主页 ✈️如果喜欢这篇文章的话 &#x1f64f;大大们可以动动发财的小手&#x1f449;&#…

刷代码随想录有感(34):前k个高频元素

本题代码涉及到了多个陌生概念&#xff0c;题干如下&#xff1a; 代码; class Solution { public:class mycomparison{//自定义规则&#xff0c;使优先队列可以自动排序public:bool operator()(pair<int, int> & lhs, pair<int, int> & rhs){return lhs.s…

第十五届蓝桥杯大赛软件赛省赛 C/C++ 大学 B 组(基础题)

试题 C: 好数 时间限制 : 1.0s 内存限制: 256.0MB 本题总分&#xff1a;10 分 【问题描述】 一个整数如果按从低位到高位的顺序&#xff0c;奇数位&#xff08;个位、百位、万位 &#xff09;上 的数字是奇数&#xff0c;偶数位&#xff08;十位、千位、十万位 &…

如何保障UDP传输中数据文件不丢失?

UDP协议因其低时延和高速传输的特性&#xff0c;在实时应用和大量数据传输领域中发挥着不可或缺的作用。但是&#xff0c;由于UDP是一种无连接的通讯协议&#xff0c;它并不确保数据包的顺序、完整性和可靠性。 为了解决UDP传输中数据一致性的问题&#xff0c;技术专家们进行了…

【Linux系统编程】第四弹---基本指令(二)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、echo指令 2、cat指令 3、more指令 4、less指令 4、head指令 5、tail指令 6、时间相关的指令 7、cal指令 8、find指…

Wix在国内受限?为何不使用中国版WIX自助建站,wix的国产替代工具

wix是一款知名的在线网站建站工具&#xff0c;能让用户在其网络上网站编辑器中拖放工具创建HTML5网站。用户可在他们的网站编辑器中加入额外的功能&#xff0c;例如社交网络按钮、电子商务功能、联系表格、电子报及社群论坛等。 但wix在国内不能用&#xff0c;或打开速度很慢&a…