admin管理员组

文章数量:1530879

2023年12月24日发(作者:)

ESP8266连接公网,外网

注:本文用手机apk与电脑串口显示进行通信,接线我就不说了。

单片机上电后,对模块进行 初始化 设置ESP8266模块

Esp8266设置:

AT+CWMODE=3 ' AP兼Station模式

AT+CWJAP="ssid","password";连接WiFi

AT+CIPMUX=1 ' 设置多连接

AT+CIPSERVER=1,5566 ‘ 开启服务器,设置端口号

路由器设置:

找到esp8266对应的MAC地址,复制一下

IP与MAC绑定,并添加进去,这样每次esp8266连接路由器时,分配到的为固定的IP,不会变。

在路由转发中,把8266的ip与刚才分配的端口号添加进去,并使之生效。

这样,路由器的设定就完成了。

此时,手机通过外网连接, 路由器的外网 IP (不是192.168.1.***)+ 刚才设置端口号,就可以控制单片机了

手机上软件有“tcp连接”这个apk,自己去下载个就行。连接就好了,付一张我连接成功发送数据的图。

可以看出,手机上连接的是移动网络,电脑上已经收到信息了。

可是,8266做了服务器,不能再用透传了,这样只能手机向上位机发送消息,上位机怎么向电脑发送哪?

手机连接上8266的时候,电脑串口是不是显示了0,connect ?那个0就是客户端号,一般来说,只有一个客户端连接8266的话,就是0,connect,如果有多的,就是1,2,3了。

电脑上先发送:AT+CIPSEND=0,6;//客户端号,要发送字符长度

再发送字符:123456;//此时电脑就可以向手机发信息了

不过这种发送每次发送前都要发AT+CIPSEND=*,*;比较麻烦就是了。

--------------------------------------------分割线------------------------------------

1. Esp8266与电脑(单片机)通信波特率怎么调?

/cLapM6hNVTSQe (提取码:463b)

这个工具可以设置(想我花了一天才百度到这个,还以为要烧结固件哪)。360会报毒,添加信任就行了。

2. 付单片机调试程序:

#include //?????

#define uint unsigned int

#define uchar unsigned char

#define RELOAD_COUNT 0xFA

sfr AUXR=0x8E;

sfr BRT=0x9C;

sfr AUXR1=0xA2;

uchar Receive,i;

uint n;

uchar Recive_table[15];

uchar data ledon[]="ononon";

uchar ledoff[]="off1";

void ms_delay(uint t)

{

uint i,j;

for(i=t;i>0;i--)

for(j=110;j>0;j--);

}

void us_delay(uchar t)

{

while(t--);

}

void Uart_Init()//初始化

{

SCON=0x50; //

PCON=0x80; //

TMOD=0x21;

TH1=RELOAD_COUNT;//

TL1=TH1;

EA=1;

//9600波特率,11.0592MHZ晶振

//

ES=0;

}

//

TR1=1;

/********************************************************************

发送一字节

********************************************************************/

void Send_Uart(uchar value)

{

ES=0;

TI=0;

//??????

//????????????

SBUF=value; //??

while(TI==0); //??????

TI=0;

ES=1;

}

/********************************************************************

发送字符串

********************************************************************/

void ESP8266_Set(uchar *puf) // ????*puf???????

{

while(*puf!='0') //????????

{

}

us_delay(5);

Send_Uart('r'); //??

us_delay(5);

Send_Uart('n'); //??

ms_delay(1000);

}

/****************************************************

向手机发信息要先设置字符长度“AT+CIPSEND=0,6”,才能再发送字符

*****************************************************/

void ESP8266_Sent(uchar *puf)

{

uchar i;

{

for(i=0;i<6;i++)

// ????*puf???????

Send_Uart(*puf); //?WIFI?????????

us_delay(5);

puf++;

//????????????

//??????

}

ledon[i]=puf[i]; //?WIFI?????????

ESP8266_Set("AT+CIPSEND=0,6");

ESP8266_Set(ledon);

us_delay(5);

Send_Uart('n'); //??

ms_delay(10);

}

/********************************************************************

主函数

********************************************************************/

void main()

{

Uart_Init();//???????????

ESP8266_Set("AT+CWMODE=3"); //??????? 1 station?? 2 AP

//? ????? 3 station+AP????

ESP8266_Set("AT+RST"); //????wifi??

ESP8266_Set("AT+CWSAP="562","tongji123"");

//????SSID:WIFI, PWD:?? ?????????(WPA2-PSK)

ESP8266_Set("AT+CIPMUX=1");//???????,??????????

ESP8266_Set("AT+CIPSERVER=1,5566"); //上面都是初始化

//开总中断

ES=1;

{

while(1)

if((Recive_table[0]=='+')&&(Recive_table[1]=='I')&&(Recive_table[2]=='P'))//MCU???????+IPD???????01???????

{

if((Recive_table[3]=='D')&&(Recive_table[6]==','))//收到的数据格式是:+IPD,0,3:123,

/*

{

{

//LED0=0; //0 ??

第九位才开始收到数据

}

else if (Recive_table[9]=='1')

if(Recive_table[9]=='0')

ESP8266_Set("AT+CIPSEND=0,2");

Send_Uart('o');

us_delay(5);

us_delay(5);*/

Send_Uart('n');

ESP8266_Set("hahaha");

}

}

}

}

{

ESP8266_Set("AT+CIPSEND=0,2");

Send_Uart('o');

us_delay(5);

us_delay(5);

Send_Uart('f');

//ESP8266_Sent(ledoff);

}

/*********************************************************************

串口中断

********************************************************************/

void Uart_Interrupt() interrupt 4

{

static uchar i=0;

if(RI==1)

{

RI=0;

Receive=SBUF; //

Recive_table[i]=Receive;

i++;

}

if((Recive_table[i-1]=='n'))i=0; //考虑一下前面i定义为static格式

else TI=0;

}

本文标签: 连接发送设置