admin管理员组文章数量:1616689
固件的烧写
既然要使用WiFi模块,那首先要进行固件的烧写
已经烧写好固件的可以直接跳过看模块的初始化
WiFi模块使用的是自带CH340驱动的NodeMCU开发板
固件烧录工具采用固件烧写\flash_download_tool_v3.8.5\flash_download_tool_v3.8.5.exe
原安信可AT固件51+ESP8266\固件烧写\v1.3.0.2 AT Firmware.bin
选择第一项
然后选择ESP8266 DownloadTool
第一行选择你保存的bin文件的位置,后面的0x00000可能需要自己手动输入,然后COM选择自己的端口号(需要电脑安装有CH340驱动,以及用USB线连接电脑和模块)参数改成上图一样的
点击START然后等待下方进度条跑满
到这里固件就烧写完毕了,下面开始WiFi模块的初始化
模块的初始化
接下来使用串口调试助手来用AT指令对WiFi模块进行初始化
同样用USB线连接模块
打开51+ESP8266\串口调试助手\XCOM V2.6.exe
选择自己的串口号
不知道的可以在设备管理器上查看,如果没有就重新插拔一下WiFi模块,波特率默认选择115200
然后发送
AT+CWMODE=2
设置模块工作方式为模式2:AP模式 这种模式下模块发出WiFi信号,用手机或电脑连接
WiFi模块作为TCP server(服务器) 手机或电脑作为TCP client(客户端)
AT+CWSAP="Esp8266","0123456789",11,3
设置的WiFi热点的账号和密码
然后发送
AT+RST
重启模块
因为后面要用到WiFi模块与51单片机交互数据,但是51单片机支持的最高波特率是9600
所以要把WiFi模块的波特率改成9600
AT+CIOBAUD=9600
改完把右上角的波特率也改成9600,以便正常通信
然后设置建⽴ TCP server
AT+CIPMUX=1
AT+CIPSERVER=1,8080
这两行的含义分别是开启模块的多连接(即可以连接多个 TCP client)
设置端口号为8080 (后面TCP client连接需要用到)
注:上面两行代码每次启动模块都需要重新写入,后面会在单片机代码里添加相应的代码
在启动单片机的时候自动写入
然后用
AT+CIFSR
查询WiFi模块的IP地址
IP地址默认是
192.168.4.1
这时用手机安装51+ESP8266\手机TCP软件\TCP.apk
安装完成打开WiFi连接上面步骤设置的WiFi
名称:Esp8266
密码:0123456789
然后打开前面安装的TCP
点击右上角的连接输入IP地址和端口号
192.168.4.1
8080
连接成功在下方会有弹窗提示,到这里模块的初始化就大功告成了。
单片机及模块的连线
使用的是普中51-单核-A5单片机
因为单片机内部已经对RX和TX进行连线 P30即单片机的RX端 P31为TX端
所以将J39端子的UTXD和P30R以及 URXD和P31T用跳线帽连接
然后用杜邦线连接
单片机 | WiFi模块 |
---|---|
P30 | TX |
P31 | RX |
3.3V | 3V |
GND | G |
3.3V | EN |
3.3V | RST |
注:记得把单片机晶振换为11.0592MHZ,否则通信将不成功
代码部分
代码部分
- 数据类型定义
- 延时函数
- 串口初始化
- 发送函数
- WiFi模块初始化
- main函数
- 串口中断服务函数
#include "reg51.h"
#define uint unsigned int
#define uchar unsigned char
sbit led2 = P1^1;
uchar Recive_table[15]; //存放接收到的数据
uint i;
uint j;
void delay_ms(uint ms)
{
uchar i,j;
for(i=ms;i>0;i--)
for(j=120;j>0;j--);
}
void delay_us(uchar us)
{
while(us--);
}
void Usart_Init()//初始化51单片机
{
SCON = 0x50;//串行口中断方式一,且启动串行口接受(REN=1)
TMOD = 0x20;//计数器1工作方式2,自动重装载
TH1 = 0xfd;//设置波特率与esp8266达成一致
TL1 = TH1;
PCON = 0;//波特率不加倍
TR1 = 1;//启动计数器
EA = 1;//开总中断
}
void SENT_At(uchar *At_Comd)//指针指向At指令
{
ES = 0;//关闭串口中断
while(*At_Comd!='\0')
{
SBUF = *At_Comd;
while(!TI);//等待该字节发送完毕,发送完后硬件自动置一TI
TI = 0;//硬件之以后必须软件置零才能进行下一次数据传送
delay_us(5);
At_Comd++;//指向下一个字节
}
}
void WIFI_Init()//通过单片机配置AT指令
{
SENT_At("AT+CIPMUX=1\r\n");//多连接模式
delay_ms(1000);
SENT_At("AT+CIPSERVER=1,8080\r\n");//设置端口号
delay_ms(1000);
ES = 1;
}
void main()
{
Usart_Init();
WIFI_Init();
delay_ms(450); //大约延时 450ms
while(1)
{
//在这里放入你想执行的代码
}
}
void Uart() interrupt 4 //中断程序
{
if(RI==1)//接受一帧完成后由硬件置一
{
RI = 0;//软件清零,防止下次未接收完成就执行程序
Recive_table[i] = SBUF; //将接受数据存入数组
if(Recive_table[0]=='+')
i++;
else
i = 0;
if(i>10)
{
if((Recive_table[0]=='+')&&(Recive_table[1]=='I')&&(Recive_table[2]=='P')&&(Recive_table[3]=='D'))
{
if(Recive_table[9]=='0')
{
led2 = 1; //led灯灭
}
if(Recive_table[9]=='1')
{
led2 = 0; //led灯亮
}
}
i = 0;//如果不清零 就无法达到变化
}
}
else
TI = 0;
}
通过修改中断服务函数中的
if(Recive_table[9]=='0')
{
led2 = 1; //led灯灭
}
判断条件以及相应语句来实现控制不同器件
通过手机通过TCP连接来发送数据控制led灯的亮灭
可直接烧录51+ESP8266\esp8266\51+esp8266.hex
然后按照上文的连接方式连线,以及将P1^1端口连接任意的led灯
程序的烧录这里不做赘述
说明中提到的工具及代码
百度网盘链接
提取码:6666
版权声明:本文标题:51单片机+ESP8266实现手机控制单片机(点亮LED灯) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1728746247a1171317.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论