ESP8266连接WIFI(三种模式STA、AP、STA+AP)

工作模式

ESP8266的wifi模块包含了三种工作模式

  1. AP(Wireless Access Point):无线接入点;该模式下,ESP8266类似于一部开启热点的手机,可以允许别的设备对其发起连接请求。该模式下,8266是一个服务端,是一个无线网络的创建者。
  2. STA(Wireless Station):无线终端模式;该模式下8266可以连接一个路由器或者其它AP模式下的设备,作为客户端向服务端发起连接请求,可以连接互联网。
  3. STA+AP:两种模式共存,既可以通过路由器连接到互联网,也可以作为WiFi热点,使其他设备连接到这个模块,实现广域网与局域网的无缝切换。

依赖库

#include <ESP8266WiFi.h>

STA模式

示例代码

/*
  ESP8266-NodeMCU无线终端模式连接WiFi
*/
 
#include <ESP8266WiFi.h>                        // 本程序使用ESP8266WiFi库

const char* ssid     = "TP-LINK_3DF2";                // 需要连接到的WiFi名
const char* password = "123454321";             // 连接的WiFi密码
                                            
void setup() {
  Serial.begin(115200);                         // 初始化串口通讯波特率为115200

  WiFi.mode(WIFI_STA);                          // 设置Wifi工作模式为STA,默认为AP+STA模式
  WiFi.begin(ssid, password);                   // 通过wifi名和密码连接到Wifi
  Serial.print("\r\nConnecting to ");           // 串口监视器输出网络连接信息
  Serial.print(ssid); Serial.println(" ...");   // 显示NodeMCU正在尝试WiFi连接
  
  int i = 0;                                    // 检查WiFi是否连接成功
  while (WiFi.status() != WL_CONNECTED)         // WiFi.status()函数的返回值是由NodeMCU的WiFi连接状态所决定的。 
  {                                             // 如果WiFi连接成功则返回值为WL_CONNECTED
    delay(1000);                                // 此处通过While循环让NodeMCU每隔一秒钟检查一次WiFi.status()函数返回值
    Serial.print("waiting for ");                          
    Serial.print(i++); Serial.println("s...");       
  }                                             
                                               
  Serial.println("");                           // WiFi连接成功后
  Serial.println("WiFi connected!");            // NodeMCU将通过串口监视器输出"连接成功"信息。
  Serial.print("IP address: ");                 // 同时还将输出NodeMCU的IP地址。这一功能是通过调用
  Serial.println(WiFi.localIP());               // WiFi.localIP()函数来实现的。该函数的返回值即NodeMCU的IP地址。
}
 
void loop() {
                                     
}

运行效果

通过Arduino软件,工具=>串口监视器=>选择115200的波特率,否则打印信息将会乱码

代码运行效果

可以通过串口打印的IP地址,通过路由器管理界面或者与设备连接同一局域网的设备ping该设备

AP模式

示例代码

IPAddress 类型是 Arduino 中用于表示和处理 IP 地址的类。它允许你创建、设置、和管理设备的 IP 地址,适用于动态和静态 IP 配置

  • WiFi.softAP(用户名, 密码, 通道, 最大连接数);

参数为可选参数,可单独设置用户名表示开放AP,默认通道数为1,默认最大连接数为4

#include <ESP8266WiFi.h>
#define AP_SSID "ESP8266_wang"      //SSID
#define AP_PSW "12345678"           //PASSWD 8位以上
IPAddress local_IP(192,168,11,1);   //IP地址
IPAddress gateway(192,168,11,255);  //网关IP地址
IPAddress subnet(255,255,255,0);    //子网掩码

void setup() {
  Serial.begin(115200);
  delay(2000);
  Serial.print("配置AP网络信息。。。。。。");
  WiFi.mode(WIFI_AP);   //设置WIFI模式为AP模式
  delay(2000);
  Serial.println(WiFi.softAPConfig(local_IP, gateway, subnet) ? "网络信息成功" : "网络信息失败");
  Serial.print("设置AP......");
  bool result = WiFi.softAP(AP_SSID, AP_PSW);  //设置账号和密码

  if(result){   
    Serial.println("账号密码设置成功");
    Serial.println(String("Soft-AP IP 地址是: ") + String(WiFi.softAPIP().toString()));

    Serial.println(String("MAC 地址是: ") + WiFi.softAPmacAddress().c_str());
  }else{
    Serial.println("账号密码设置失败");
  }
  Serial.println("设置完成");
}

void loop() { 
  //循环打印当前的station个数
  int i=WiFi.softAPgetStationNum();
  Serial.println(String("SAT连接数: ") +String(i));
  delay(5000);
}

运行效果

打开win的WiFi列表,可查到ESP8266的WiFi信息,输入密码后,连接数变为1

STA+AP模式

示例代码

网上能查到的文章一般是直接下载的固件,使用串口调试助手和AT指令进行通信

#include<ESP8266WiFi.h>
#include<WiFiUdp.h>
WiFiUDP udp;

IPAddress Client_IP(192,168,11,100);   
//连接AP的设备的IP地址(可先手动连接一次后,
//查看设备ip,一般不会发生变化)

IPAddress local_IP(192,168,11,1);   //IP地址
IPAddress gateway(192,168,11,255);  //网关IP地址
IPAddress subnet(255,255,255,0);    //子网掩码

unsigned int localPort=9999;//本地端口
unsigned int remoteport=9999;//远程端口

const char* ssid="TP-LINK_3DF2";//连接到远程AP的名字
const char* password="123454321";//连接到远程AP的密码

const char* ssid1="ESP8266";//建立AP名字
const char* password1="123456789";//建立AP的密码
char buff[255];//收发缓冲区

void setup()
{
  Serial.begin(115200);
  delay(5000);
  
  WiFi.disconnect();
  WiFi.mode(WIFI_AP_STA);
  WiFi.softAPConfig(local_IP, gateway, subnet);//设置AP网络参数
  WiFi.softAP(ssid1,password1,1);//设置AP账号密码
  
  WiFi.begin(ssid,password);//连接到指定路由

  Serial.println("please wait");
  while(WiFi.status()!=WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println();
  udp.begin(localPort);//建立UDP Server ,监听指定端口
  Serial.print("Local ip:");
  Serial.println(WiFi.localIP());
  Serial.print("AP ip:");
  Serial.println(WiFi.softAPIP());
}

void loop()
{
  if(udp.parsePacket())
  {
    udp.read(buff,255);//读取数据
    udp.beginPacket(Client_IP,remoteport);
    udp.write(buff,255);
    udp.endPacket();
    Serial.print(buff);
  
    memset(buff,0,255);//清除缓冲器数据
  }
}

程序烧写入ESP8266后,手动连接开发板的AP热点,并设置串口调试助手参数

  1. 选择工作模式UDP
  2. 设置程序中的远端端口9999(PC相对于MCU来说,为远端设备)
  3. 设置目的IP,即local_IP,端口号localPort
  4. 点击打开
  5. 在发送信息框输入信息,MCU可读取信息并向PC发送同样的命令
  6. 查看路由器的连接设备中是否包含该设备

运行效果

文中所使用的串口助手下载链接如下:

 资料下载 (zlmcu.com)

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值