工作模式

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

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

依赖库

#include <ESP8266WiFi.h>
  • 1.

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() {
                                     
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
运行效果

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

代码运行效果

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

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

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

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);
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
运行效果

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

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

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

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);//清除缓冲器数据
  }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.

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

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

ESP8266连接WIFI(三种模式STA、AP、STA+AP)_串口_05

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