在很多基于单片机的项目中,都会使用到无线通信。通过无线向向服务器发送数据,通过无线实现远程控制等等。
ESP266支撑AP和STA模式。简单的来说就是:
AP:可以将ESP8266作为热点,可以让其他的设备连接上它。
STA:可以连接上当前环境下的WIFI热点。
通常情况下,我们使用ESP8266接入路由器或者电脑热点,将ESP8266配置成TCP 客户端模式,将自己的云服务器或者电脑或者手机等设置成TCP服务端模式,ESP8266将数据发送给服务端,这样就实现了远程通信。
ESP8266这个模块的实例在网上已经有好多很全面的代码,大家可以在网上找,我这里是把我个人整合的代码贴出来,实现了模块和服务器的连接,同时可以收发数据。
"common.h"需要额外添加,这个库里有很多wifi模块的函数,需要添加到我们的程序里去。
在执行wifi_sta_connect()之前,需要初始化usart3,因为单片机与EPS8266之间是串口通信的,我这里用到了串口3。
#include "common.h"
#include "stdlib.h"
void wifi_sta_connect(){
u8 *p;
while(atk_8266_send_cmd("AT","OK",20))//检查wifi是否在线
{
atk_8266_quit_trans();//退出透传
atk_8266_send_cmd("AT+CIPMODE=0","OK",200); //关闭透传模式
delay_ms(800);
printf("trying connect");
}
atk_8266_send_cmd("AT+CWMODE=1","OK",50); //设置wifi为STA模式
atk_8266_send_cmd("AT+RST","OK",20); //DHCP服务关闭(在AP模式下才有效)
delay_ms(1000); //等待重启
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
atk_8266_send_cmd("AT+CWJAP=\"AAA\",\"12345678\"","WIFI GOT IP",300); //热点:AAA,密码:12345678
atk_8266_send_cmd("AT+CIPMUX=0","OK",20); //0:单连接 1:多连接
while(atk_8266_send_cmd("AT+CIPSTART=\"TCP\",\"***.**.***.***\",8081","OK",200)); //服务器IP:***.**.***.*** 端口号:8081
atk_8266_send_cmd("AT+CIPMODE=1","OK",200);
printf("connect success");
atk_8266_quit_trans();
atk_8266_send_cmd("AT+CIPSEND","OK",20); //开始透传,已连接
u3_printf("my name is ESP8266");
LCD_ShowString(60,190,200,16,16,"wifi connect");
}
以上代码就可以实现与远程通信了。
common.h头文件在原子哥提供的源程序里有,自行下载整理就可以了
虽然8266连接上路由器后,与路由器直接构成了局域网,8266的ip是内网IP,但是依然是可以连接得上公网IP的,只要在服务器端配置端口监听即可。