标题: 基于STC89C51单片机的esp8266-01wifi模块(程序加模块引脚图) [打印本页]
作者: 李江勇 时间: 2018-4-23 15:22
标题: 基于STC89C51单片机的esp8266-01wifi模块(程序加模块引脚图)
引脚图及连接方式
红色字体的引脚需要连接,其余不用连,只需了解
VCC:接3.3V的高电平(必须是3.3v 否则会烧坏模块)
GND:接地
RX:模块串口通信的接收引脚,接到单片机的TX引脚。
TX:模块的发射端,接单片机的RX接口。
CH_PD:接高电平(和vcc引脚焊接起来)
GPIO0:默认情况下不接线,在刷固件时要接低电平。
GPIO2:悬空
RST:低电平复位,默认悬空。
用下载器连接WiFi模块,然后用串口助手发送一下AT指令
串口助手中波特率初始为115200,更改以后波特率将永久保存,除非再次更改
1、设置模块为ST模式:发送:AT+CWMODE=1;返回:OK
2、 查看当前WiFi列表:AT+CWLAP返回: OK
3、 加入当前无线网络:发送命令:AT+CWJAP=”MERSAIN”,”XXXXXXXX”
第一个填你想要连接的WiFi名称,第二个填WiFi的密码
4、查看当前模块IP地址:发送: AT+CIFSR返回:当前IP地址
5、开启多连接模式 :发送命令:AT+CIPMUX=1返回:OK
6、建服务器 发送命令:AT+CIPSERVER=1,8080(设置指令)
指令:AT+CIPSERVER=<mode>[,<port>]
说明:<mode>:0-关闭server模式,1-开启server模式 <port>:端口号,缺省值(默认值)为333 响应:OK
7、更改波特率为9600 AT+UART=9600,8,1,0,0(视单片机波特率而定)
更改波特率
wifi模块ESP8266的默认波特率是115200,但是单片机不能达到那么快的传输速率,只能使用9600bps,那么设置的时候,必不可少的要先用转串口调试下载器(速度比较快,而且wifi模块默认115200bps,用单片机不能正确更改波特率,转串口工具可以),设置指令,AT+UART=9600,8,1,0,0 在下载器连接模块时更改波特率
程序
向单片机下载程序时先不接模块,下载完成之后断电之后再连接模块
//此程序是手机连接ESP8266模块以后向模块发送字符a,控制单片机蜂鸣器的鸣与灭
#include<reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
u8 dat;
sbit beep=P2^3;
void ConfigUART(u16 buad);//串口通信初始化函数,buad为单片机设置的波特率。
void Delay_ms(u16 n);
void Uart_Send_String(u8 *string);//串口发送多个字节。
void Delay_Us(u8 us);
void Sent_UART(u8 dat);//串口发送一个字节
void ESP8266_Init();//ESP8266初始化
void main()
{
EA = 1;
ConfigUART(9600);
ESP8266_Init();
while(1);
}
void ConfigUART(u16 buad)
{
SCON = 0x50;
TMOD &= 0X0F;
TMOD |= 0x20;
TH1 = 256 - (11059200/12/32)/buad;
TL1 = TH1;
ET1 = 0;
TR1 = 1;
}
void Sent_UART(u8 dat)
{
ES = 0;
TI=0;
SBUF = dat;
while(!TI);
TI = 0;
ES = 1;
}
void Delay_Us(u8 us)
{
while(us--);
}
void Delay_ms(u16 n)
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<123;j++);
}
void Uart_Send_String(u8 *string)
{
while(*string)
{
Sent_UART(*string++);
Delay_Us(5);
}
}
void ESP8266_Init()
{
Uart_Send_String("AT\r\n");
Delay_ms(2000);
Delay_ms(1000);
Uart_Send_String("AT\r\n");
Delay_ms(2000);
Delay_ms(1000);
Uart_Send_String("AT+CIPMUX=1\r\n");
Delay_ms(2000);
Delay_ms(1000);
Uart_Send_String("AT+CIPSERVER=1,8080\r\n");
}
void InterruptUART() interrupt 4
{
if (RI) //接收到字节
{
RI = 0; //手动清零接收中断标志位
dat = SBUF; //接收到的数据保存到接收字节变量中
if(dat=='a')
{
beep=~beep;
} //接收到的数据又直接发回,叫作-"echo",
//用以提示用户输入的信息是否已正确接收
}
if (TI) //字节发送完毕
{
TI = 0; //手动清零发送中断标志位
}
}
手机软件
这两个软件均可使用
以netassist为例
打开后点击tcp client
设置ip地址和端口号 ip地址看发送AT+CIFSR返回的IP值;
端口号看你发送的端口 AT+CIPSERVER=1,8080 这里是8080
然后连接 在发送框发送a即可控制蜂鸣器
作者: 寒门痴子 时间: 2018-4-29 06:36
要学习,谢谢!
作者: aptx48694517 时间: 2018-5-4 17:51
发送AT指令没有返回值,界面是空白的
作者: sanshisui 时间: 2018-5-5 23:08
单片机晶振是12M 波特率也是9600吗还是更低?
作者: 李江勇 时间: 2018-5-6 20:34
晶振11.0592 波特率9600
作者: sanshisui 时间: 2018-5-6 21:26
为什么全部弄好在手机发送a没有反应呢?楼主能回答一下吗
作者: 李江勇 时间: 2018-5-7 18:51
模块波特率改了吗,模块初始波特率为115200,需要改为和单片机一样的波特率9600,我用的51单片机
作者: 李江勇 时间: 2018-5-7 18:52
看看波特率改了没,按照上面方法应该可以连上,亲测可以
作者: duantui 时间: 2018-6-10 16:06
你解决了吗?我也没有反应呢
作者: 郭薇 时间: 2018-6-11 15:35
单片机与8266之间需要电平转换吗?
作者: 小猫猫爱吃鱼 时间: 2018-6-11 15:50
你好!这个不需要电平转换的,单片机和8266串口交叉连接
作者: 小猫猫爱吃鱼 时间: 2018-6-11 15:52
你好!没有反应的情况,着重检查
1、单片机和模块,串口是否交叉
2、单片机晶振和串口波特率是否匹配
3、程序是否配置好 8266
4、还是不行,看我头像
作者: JamesGordan 时间: 2019-4-22 19:49
我也是这个情况
作者: 1942850641 时间: 2019-4-23 11:47
兄弟,我也是这个情况。通过串口助手直接给esp8266发送AT指令就可以,但中间连接个单片机,也下载了通信程序,然后再通过串口助手发送AT指令,esp8266就不响应了。
方便的话加个联系方式,一起讨论一下,我的qq1499414490
作者: Kinarmy 时间: 2019-4-26 19:53
输入IP和端口号,连接不上是什么原因,
作者: slaoliu 时间: 2021-9-20 10:32
这个好,必须学习一下。
作者: dzc3458 时间: 2021-10-13 15:56
esp8266可以用socket发送指令吗
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |