51单片机连接ESP8266串口WiFi模块
2017-01-18 15:53
148 查看
烧录固件
引脚连接
WiFi | 51单片机 |
---|---|
VCC | 3.3V (5V连接时间过长可能会烧坏WiFi模块) |
GND | GND |
CH_PD | 3.3V |
GPIO0 | GND |
UTXD | TXD |
URXD | RXD |
烧录固件
打开烧录软件,选择配置选项卡,点击第二栏的小齿轮图标 - 加载固件地址点击其他选项的选择栏,取消选中,只选择第二个选项(固件地址)
返回操作选项卡,选择正确COM端口,点击一键烧写
模块重新上电,下载开始,等待下载完成
串口助手测试ESP8266串口WiFi模块
引脚连接
WiFi | 51单片机 |
---|---|
VCC | 3.3V (5V连接时间过长可能会烧坏WiFi模块) |
GND | GND |
CH_PD | 3.3V |
UTXD | TXD |
URXD | RXD |
AT常用指令
ESP8266串口WiFi模块分为三种工作模式:Station模式(类似无线终端),AP模式(提供无线接入服务),AP模式兼Station模式。通过串口助手测试WiFi模块时,
测试
发送指令:
AT
响应:OK
重启模块
发送命令:
AT+RST
响应 :OK
设置模块
发送指令:
AT+CWMODE = <mode>
说明:需重启后生效(AT+RST)
<mode>:1-Station模式,2-AP模式,3-AP兼Station模式。
响应:OK
配置AP参数
发送命令:
指令:
AT+ CWSAP= <ssid>,<pwd>,<chl>, <ecn>
说明:指令只有在AP模式开启后有效
<ssid>:字符串参数,接入点名称 <pwd>:字符串参数,密码最长64字节,ASCII <chl>:通道号 <ecn>:加密模式,0-OPEN,1-WEP,2-WPA_PSK,3-WPA2_PSK,4-WPA_WPA2_PSK
示例:
AT+CWSAP=”TEST”,”123456123456”,1,3
响应:OK
开启多连接模式
发送命令:
AT+CIPMUX=<mode>
说明:
<mode>:0-单路连接模式,1-多路连接模式
响应:OK
创建服务器
发送命令:
AT+CIPSERVER=<mode>,<port>
说明:AT+ CIPMUX=1时才能开启服务器;关闭server模式需要重启。开启server后自动建立server监听,当有client接入会自动按顺序占用一个连接。
<mode>:0-关闭server模式,1-开启server模式 <port>:端口号,缺省值为333
响应:OK
通过51单片机初始化WiFi模块
通过串口助手测试AT指令可以发现,部分AT指令断电不会保存,因此需要在代码中进行初始化设置。引脚连接
WiFi | 51单片机 |
---|---|
VCC | 3.3V (5V连接时间过长可能会烧坏WiFi模块) |
GND | GND |
CH_PD | 3.3V |
UTXD | RXD |
URXD | TXD |
实现代码
#include<reg52.h> //51单片机常用的头文件 #define uchar unsigned char //宏定义一个无符号的char类型 #define uint unsigned int //宏定义一个无符号的int类型 //发送一字节 void sendByte(uchar b) { SBUF = b; while(!TI); TI=0; } //发送字符串 void sendString(uchar *s) { while(*s != '\0') //字符串默认结尾'\0',以此来判断字符串的结束 { sendByte(*s); s++; } } //初始化ESP8266WiFi模块 void initEsp() { uint a; SCON = 0x50; //8位数据,可变波特率 TMOD = 0x20; //设置定时器1位16位自动重装模式 TL1 = 0xfd; //设置定时器初值,波特率为9600 TH1 = 0xfd; ET1 = 0; //禁止定时器1中断 TR1 = 1; //启动定时器1 EA = 1; for (a=0; a<50000; a++); //延时几秒,让模块有时间启动 sendString("AT+CWMODE=2\n"); //设置为softAP和station共存模式 //WiFi热点不能通过代码设置,可使用串口助手进行设置,该设置断电不丢失 /* for (a=0; a<20000; a++); sendString("AT+CWSAP='TEST','12345678',1,3\n"); //建立WiFi热点 */ for (a=0; a<50000; a++); sendString("AT+CIPMUX=1\n"); //启动多连接 for (a=0; a<20000; a++); sendString("AT+CIPSERVER=1,333\n");//建立server,端口为333 for (a=0; a<20000; a++); sendString("AT+CIPSTO=50\n"); //服务器超时时间设置 RI=0; ES=1; //初始化完成,串行口中断打开 } //主函数 void main() { initEsp(); }
注:代码中波特率应和串口助手的波特率相符,且部分AT命令如重启模块,设置WiFi热点等指令无法使用。
获取WiFi传输的数据
ESP8266WiFi模块作为TCP服务器接受来自客户端的信息前默认会加上+IPD,n,<string.length>:这样的字符,处理时应注意。
实现代码
//获取数据,数据格式示例:+IPD,0,14:"time":"11:11" void getData() { uint a; if(receiveFlag) { for(i=0; i<2; i++) { Hour[i]=Buffer[17+i]; } Hour[2]='\0'; for(i=0; i<2; i++) { Minute[i]=Buffer[20+i]; } Minute[2]='\0'; //将获取到的数据发送到串口助手上显示 for (a=0; a<10000; a++); //需要延时,负责会造成数据错乱导致丢包 sendString(Hour); for (a=0; a<10000; a++); sendString(Minute); receiveFlag=0; count=0; for(i=0; i<22; i++) { Buffer[i]=0; } } } //主函数 void main() { initEsp(); //初始化WiFi模块 receiveFlag = 0; //receiveFlag判断执行getData() 的标志 count = 0; //count缓冲区RXDdata[count]的索引 while(1) { getData(); } } //利用中断接收信息,且舍弃无效信息 void uart() interrupt 4 { if(RI == 1) { ES = 0; //关闭串行中断 RI = 0; //清除串口接收标志位 temp = SBUF; //从串口缓冲区取得数据 if(count<20) //满足需接收的信息长度,将数据存入缓冲区 { Buffer[count]=temp; count++; if(Buffer[0]=='+') //判断是否为无效数据,由于WiFi模块会自动加上"+PID.."开头的字符串 { receiveFlag = 1; } else { receiveFlag = 0; count = 0; } } ES = 1; } }
相关文章推荐
- 51单片机与蓝牙模块连接
- 51单片机连接24C02-C语言测试代码
- 51单片机与MAX232的连接
- 关于CH375芯片的简介以及其与51单片机的连接
- 破解SQL Server连接错误-“SQL Server不存在或访问被拒绝”
- 好吧, 先从连接开始. DotMSN2.0 Robot(一)
- java 通过jdbc连接sql server数据库的常见问题
- 转: 远程桌面连接脚本HTA
- C#连接各种数据库的写法
- Oracle 多表 连接 顺序 与 性能关系 测试
- windows同时连接两个网络导致无法上网问题的解决
- Oracle SQL Developer(版本1.5.5)连接问题, Oracle11g(版本11.2)
- 各种数据库的连接字符串
- 可与APP相连接 JAWBONE UP正式登陆中国
- 使用sqldeveloper连接到远程的oracle服务器,并执行查询语句
- eclipse 编码设置 tomcate启动超时 连接到类的快捷键设置
- JDBC 连接数据库代码及步骤
- java操作智能卡 IC卡 连接pcsc读卡器 发送APDU指令 源代码 下载 jdk1.6满足要求 java语言 操作IC卡 操作智能卡
- winxp与win8连接远程桌面时出现黑屏或者连接失败怎么办?
- Socket 和ServerSocket的连接 .单一的聊天,随便输入输出