中国银行门户网站,上海策朋网站设计公司,重庆市建设银行网站,朔州网站建设哪家便宜目录
ESP8266简介
前言
ESP8266的工作模式
ESP8266引脚说明
ESP8266测试
步骤
单片机与esp8266交互
前言
收到数据的格式
AP模式
服务器模式
外部执行命令
代码内执行命令
代码部分
客户端模式
外部执行命令
内部执行命令
代码部分
STA模式
服务器模式
外…目录
ESP8266简介
前言
ESP8266的工作模式
ESP8266引脚说明
ESP8266测试
步骤
单片机与esp8266交互
前言
收到数据的格式
AP模式
服务器模式
外部执行命令
代码内执行命令
代码部分
客户端模式
外部执行命令
内部执行命令
代码部分
STA模式
服务器模式
外部执行命令
代码内部执行命令
代码部分
客户端模式
外部执行命令
内部执行命令
代码部分
ESP8266的烧录
前言
步骤 ESP8266简介
前言
ESP8266是一个完整且成体系的WIFI网络解决方案能够搭载软件应用或通过另一个应用处理器卸载掉所有的WIFI网络功能我们使用的ESP8266是串口型WIFI速度比较低不能用来传输图像或者视频等这些大容量数据主要应用于数据量传输比较少的场合。
ESP8266的工作模式
STA模式ESP8266通过路由器连接互联网手机或电脑通过互联网实现对设备的远程控制AP模式AP模式也是默认模式ESP8266模块作为热点实现手机或电脑直接与模块进行通信实现局域网无线控制STAAP模式两种模式的共存模式即可以通过互联网控制也可AP接入点控制实现两者之间的无缝切换
ESP8266引脚说明 VCC电源引脚电源一般接3.3VGND接地URXD串口接收引脚UTXD串口发送引脚RST复位管脚可做外部硬件复位使用CH_PD使能引脚接3.3VGPIO0用于对模块的烧录flash芯片烧录时接GNDGPIO2该模块的外接引脚一般不用类似单片机的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 ATRESTORE恢复出厂设置设置乱了的话恢复默认设置 ATUART_DEF波特率,8,1,0,0将波特率改为自己设备对应的波特率 注意
每次发送命令后命令之后必须添加回车换行并且命令之间不能有空格。对于后面有也就是有配置选项的将及后面的配置改为?就可以对该配置信息进行查询
收到数据的格式
前言当使用透传模式时那么手机发送给单片机什么信息那么单片机就收到什么信息当不使用透传模式时那么手机发送给单片机的信息会被esp8266模块进行封装 不使用透传模式手机发送数据——单片机收到PID,ID号,发送数据的长度,数据 使用透传模式手机发送数据——单片机收到数据 注意
当手机连接热点成功后其中PID,ID号是固定的用户可以根据需要发送多少数据然后长度就可以确定这样串口中断就可以按照这个格式进行解析而我们主要关注的是数据这块数据这块内容就是手机实际给我们发送的其他的都是esp8266给我们加的当esp8266模块作为服务器时不可以使用透传模式只有当esp8266作为客户端时才可以使用透传模式ATCIPMODE值是否开启透传模式值为1时开启透传模式值为0时关闭透传模式
AP模式
服务器模式
原理单片机连接电脑给esp8266模块供电esp8266模块释放wifi热点esp8266作为服务器开放端口给连接esp8266热点的手机客户端进行连接手机作为客户端只需要填写esp8266的IP地址和端口就能与esp8266进行通信而esp8266通过串口与单片机进行通信此时我们就相当于通过手机与单片机进行通信。
外部执行命令 ATCWMODE2开启 AP 模式1为station模式2为ap模式3为混合模式 ATCWSAPwifi名,密码8位,热点通道,加密方式设置esp8266模块wifi基础设置 加密方式0:OPEN1:WEP 2:WPA_PSK3:WPA2_PSK4:WPA_WPA2_PSK ATCIFSR获取当前模块的IP地址不用写也可以这里是为了让手机客户端连接 ATRST设置完成后重启 注意以上设置最好在esp8266模块使用之前进行配置那么这样的话就不用在代码中执行了。
代码内执行命令 ATCIPMUX1开启多连接模式 ATCIPSERVER1,端口号开放服务器端口 注意这里面配置的命令需要单片机向esp8266模块发送。
代码部分
#include regx52.h
unsigned char key0;
unsigned char Receive[15];
unsigned int i0;
//延时ms函数
void delay_ms(unsigned int ms)
{unsigned char i,j;for(ims;i0;i--){for(j120;j0;j--);}
}
void initscon(){SCON0x50; //8位异步通信方式允许接收数据TMOD0x20; //配置波特率发生器T1工作方式为2TH10xFD; //重置TL1TL10xFD; //设置初值EA1; //开启总中断TR11; //打开波特率发生器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(ATCIPMUX1\r\n);//多连接模式delay_ms(1000); //每发送完一套命令延时1sSENT_At(ATCIPSERVER1,8080\r\n);//开启服务器端口号delay_ms(1000);ES 1; //前面关中断是为了避免中断对初始化wifi的影响
}
void main(){while(1){//第一次按下按键if(P3_10key0){key1;}//按下按键并抬起if(key1P3_11){initscon();WIFI_Init();key0;}}
}
void scon_isr() interrupt 4
{if(TI){TI0; //数据发送完清TI}if(RI){RI0;Receive[i]SBUF; //读取接受的数据if(Receive[0]){i;}else{i0;} //超过数组限制i0后跳出中断if(i10){ //因为前面多个i,所以i10时判断i0;//取出发送的数据进行判断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:P20xff;}}}
}
注意
P2口为我控制8个LED灯的引脚P3_1为我按键的引脚 这里面我只要长度为10的数据仅仅最后一个数据用来作灯的控制数据在这里面我可以通过我的按键进行手机和wifi模块的连接按一下按键就可以初始化wifi通过手机发送的数字来控制8个LED灯的亮灭
客户端模式
原理单片机连接电脑给esp8266供电esp8266向外部发送热点我们的手机连接esp8266发送的热点并通过端口开放自己的服务那么esp8266模块就可以通过自己发送的热点来访问手机搭建的服务进而实现esp8266与手机的通信因为esp8266与单片机通过串口通信那么我们就可以通过我们的手机与单片机实现间接的通信。
外部执行命令 ATCWMODE2设置工作模式为AP模式 ATCWSAP模块wifi名称,wifi8位密码,1,4设置esp8266模块热点基本参数 ATCIFSR查询模块IP地址 内部执行命令 ATCIPMUX0开启单连接模式不写也可 ATCIPSTARTTCP,手机服务器IP地址,手机开放的端口通过端口和手机服务器建立连接 ATCIPMODE1开启透传模式 注意这种模式下手机作为服务端那么必须始终处于监听状态随时等待esp8266模块的连接
代码部分
#include regx52.h
unsigned char key0;
unsigned char Receive;
//延时ms函数
void delay_ms(unsigned int ms)
{unsigned char i,j;for(ims;i0;i--){for(j120;j0;j--);}
}
void initscon(){SCON0x50; //8位异步通信方式允许接收数据TMOD0x20; //配置波特率发生器T1工作方式为2TH10xFD; //重置TL1TL10xFD; //设置初值EA1; //开启总中断TR11; //打开波特率发生器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(ATCIPMUX0\r\n);//单连接模式delay_ms(1000); //每发送完一套命令延时1sSENT_At(ATCIPSTART\TCP\,\192.168.4.2\,8086\r\n);//与192.168.4.2建立连接delay_ms(1000);SENT_At(ATCIPMODE1\r\n);//开启透传模式delay_ms(1000);ES 1; //前面关中断是为了避免中断对初始化wifi的影响
}
void main(){while(1){//第一次按下按键if(P3_10key0){key1;}//按下按键并抬起if(key1P3_11){initscon();WIFI_Init();key0;}}
}
void scon_isr() interrupt 4
{if(TI){TI0; //数据发送完清TI}if(RI){RI0;ReceiveSBUF; //读取接受的数据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:P20xff;}}
}
注意因为开启了透传模式所以串口中断的代码就变得简单了就不需要从esp8266封装的数据中提取有用的信息了若你不用透传模式那么串口中断处代码和上面esp8266模块作为服务器的代码一样
STA模式
服务器模式
原理单片机连接电脑给esp8266进行供电esp8266连接我们局域网中的热点同时esp8266通过端口在局域网内充当服务器那么局域网内的手机就可以通过这个局域网访问到esp8266服务器从而对esp8266服务器进行控制而esp8266与我们的单片机通过串口进行通信那么我们的手机就可以间接的与单片机进行通信。
外部执行命令 ATCWMODE1开启station工作模式 ATCWJAPwifi名称,wifi密码连接外部wifi热点尽量连2.4g ATRST重启模块生效 代码内部执行命令 ATCIPMUX1开启多连接模式多个设备可以连接esp8266模块 ATCIFSR查询esp8266模块IP地址用于手机连接esp服务器 ATCIPSERVER1,端口号通过端口开放服务 代码部分
void WIFI_Init()//通过单片机配置AT指令
{SENT_At(ATCIPMUX1\r\n);//多连接模式delay_ms(1000); //每发送完一套命令延时1sSENT_At(ATCIPSERVER1,8086\r\n);//开启服务器端口号delay_ms(1000);ES 1; //前面关中断是为了避免中断对初始化wifi的影响
}
注意其他的代码和上面服务器模式的代码一样只是这个wifi初始化的模块变了。
客户端模式
原理单片机连接电脑给esp8266进行供电esp8266连接我们手机所在的局域网局域网中我们的手机作为服务器开放了端口一直处于外部监听状态由于esp8266模块和我们的手机在同一个局域网中那么esp8266就可以主动连接我们的手机和其进行通信由于esp8266和单片机之间通过串口进行通信那么我们的手机就间接的与单片机进行通信。
外部执行命令 ATCWMODE1设置工作模式为station模式 ATCWJAPwifi名称,wifi密码连接外部wifi热点尽量连2.4g ATRST重启模块生效 内部执行命令 ATCIPSTARTTCP,手机服务器IP地址,手机端口号通过端口和手机建立连接 ATCIPMODE1开启透传模式1为透传0为非透传 注意
在这种情况下连接esp8266模块那么我们的手机作为服务器就必须一直处于监听状态。不使用透传模式那么通过手机app发送过来的数据就会被esp8266包装进而我们取数据困难
代码部分
void WIFI_Init()//通过单片机配置AT指令
{SENT_At(ATCIPSTART\TCP\,\192.168.18.9\,8888\r\n);//连接服务器delay_ms(1000); //每发送完一套命令延时1sSENT_At(ATCIPMODE1\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引脚后就可继续进行测试。