AP+STA的工作原理:当模块作为AP时,它同时又可以作为一个STA模式存在。例如:WiFi模块作为AP,可以让客户的手机或者计算机接入,同时该模块又可以作为一个STA接入到路由器或者上位服务器进行数据上传。
以下参考代码,需要注意的是,
- AP_password尽量设置为8位,我之前没有设置成8位,AP模式一直开启不成功,也不知道是什么bug。
- 手动设置静态IP时,需要根据自己的网络环境进行修改,不然也会配置不成功。
比如要设置要连接网络的静态IP,可以先用自己的电脑连接到此WiFi网络,在电脑控制面板里查看连接WiFi的网络属性,可以看到网关地址,子网掩码等信息,照此修改即可。
#include <Arduino.h>
#include <ESP8266WiFi.h>
#define AP_ssid "xxxxxxxxxx" //esp8266创建的wifi名字
#define AP_password "xxxxxxxx" //esp8266创建的wifi密码
#define STA_ssid "xxxxxxxxxxx" //要连接的wifi名字
#define STA_password "xxxxxxxxxxx" //要连接的wifi密码
//设置esp8266创建wifi的静态IP
IPAddress local_IP(192,168,4,111); //手动设置的开启的网络的ip地址
IPAddress gateway(192,168,4,1); //手动设置的网关IP地址
IPAddress subnet(255,255,255,0); //手动设置的子网掩码
//设置要连接wifi的网络参数
IPAddress sip(192,168,0,169); //手动设置静态IP 连接网络ip
IPAddress sip1(192,168,0,1); //本地网关
IPAddress sip2(255,255,255,0); //本地子网掩码
void setup() {
Serial.begin(115200);
Serial.println();
WiFi.disconnect();
delay(500);
WiFi.mode(WIFI_AP_STA);
//连接wifi
WiFi.config(sip,sip1,sip2); //设置本地网络参数
Serial.printf("连接wifi中... ");
WiFi.begin(STA_ssid, STA_password);
while(WiFi.status()!=WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println('\n');
Serial.print("Connected to ");
Serial.println(WiFi.SSID()); //连接的WiFI名称
Serial.print("IP address:\t");
Serial.println(WiFi.localIP()); //NodeMCU的IP地址
WiFi.softAPConfig(local_IP, gateway, subnet); //设置自创建网络参数
WiFi.softAP(AP_ssid, AP_password, 3, 1); //启动校验式网络(需要输入账号密码的网络),通道为3,wifi隐藏
if (WiFi.softAP(AP_ssid, password)) {
Serial.print("创建wifi的名字: ");
Serial.println(AP_ssid);
Serial.print("创建wifi的密码: ");
Serial.println(AP_password);
Serial.println("创建wifi的IP: ");
Serial.println(local_IP);
} else {
//若没有开启成功
Serial.println("开启失败");
}
}
void loop() {
}