概述
前一篇文章介绍了如何将esp8266连接到已有的wifi网络。但是在某些情况下,比如周围没有wifi时,我们可以让esp8266主动创建一个wifi网络,从而让其它设备,比如电脑、手机等连接上这个网络,然后与esp8266通信。大致的通信结构如下图所示。
原理
当esp8266主动创建这样的网络时,其工作在AP模式(接入点模式)下,即其允许其它设备接入该网络。与之相对应的便是前一篇文章中介绍的ST模式,这种模式下esp8266主动加入某个网络。
要启动这种AP工作模式,只需要使用以下接口函数:
boolean result = WiFi.softAP("ssid", "pass");
其中ssi为wifi的名称,pass为连接到此wifi时需要输入的密码。当创建成功时,返回true;创建失败时,返回false。可以看到要完成这样的工作是非常简单的,只需要调用这个函数即可。
示例
以下是一个例子,创建了一个名为esp8266-wifi、密码为12345678的wifi网络。
/**
* 功能:将esp8266设置成soft-ap模式,以允许其它设备连接到esp8266
* 详细:上电后esp8266将建立wifi网络,名称由ssid指定,密码由pass指定。
* 其它设备,如手机、电脑等可连接至该网络并与esp8266进行通信。
*
* 编写:李小童
* 日期:2022-8-12
* 开发型号:NodeMUC 1.0(ESP-12E)
* 如需获取更多资料,以及相关的支持,可以联系:527676163@qq.com
*/
#include <ESP8266WiFi.h>
static const char *ssid = "esp8266-wifi"; // wifi名称
static const char * pass = "12345678"; // wifi密码
static int station_count = 0; // 已经连接的结点数量
void setup() {
// 串口工作在9600模式
Serial.begin(19200);
Serial.println("create ap....");
// 进入soft-ap工作模式,如果失败则提示
bool ok = WiFi.softAP(ssid, pass);
if (!ok) {
Serial.println("Create ap failed.");
return;
}
// 如果成功则在串口中设置其ip地址
Serial.println("AP created.\n");
Serial.print("ipadd:");
Serial.println(WiFi.softAPIP());
}
void loop() {
// 获取当前的连接设备数量,如果有没变化,不做处理
uint8_t cnt = WiFi.softAPgetStationNum();
if (cnt == station_count) {
return;
}
// 数量变多,意味着新设备接收,提示;当设备断开连接时也提示
if (cnt > station_count) {
Serial.println("New station connected");
} else if (cnt < station_count) {
Serial.println("Station disconnected");
}
// 最后打印当前已经连接的设备数量
Serial.printf("Station count: %d\n", cnt);
// 数量发生变化时,记录最新的值
station_count = cnt;
}
程序下载运行后,将可以在手机等设备的wifi列表里找到esp8266。然后,我们就可以选择加入,密码为12345678。
如果此时打开串行观察窗口,可以看到当程序运行起来后,如果AP创建成功将显示AP created,并输出自己的ip地址(这个ip地址为缺省值)。然后当我们用手机连接上该wifi时,将提示"New station conected",并显示新增的设备数量。当断开连接时,提示"Station disconnected"。
小结
ESP8266支持AP模式,即可以创建一个wifi网络从而让其它设备加入并与自己通信。要创建此网络,只需要调用WiFi.softAP()即可。
如果你对我的文章感兴趣,欢迎关注,或者在下方留言。