ESP8266WiFiSTA库
/**********************************************************************/
/* 学习例程: 关于esp8266 Station 配置
学习目的: 了解站点模式配置步骤及ESP8266WiFiSTA库相关函数
学习日期: 20200707
对于STA类库的描述,可以拆分为四个部分:
第一部分方法,和一个接入点(Access Point,wifi热点)建立连接;
第二部分方法,管理第一部分方法建立的连接;
第三部分方法,提供一些关于这个连接的信息,包括MAC地址、IP地址等;
第四部分方法,提供一些备用方法去连接WiFi-Protected Setup(WPS)以及智能配置方法(SmartConfig);
*/
/**********************************************************************/
//#include <Arduino.h>
#include<ESP8266WiFi.h> //WIFI 头文件
#include <U8g2lib.h> //第三方库
#include <Wire.h> //I2C库头文件
/*
wl_status_t begin(const char* ssid, const char *passphrase = NULL, int32_t channel = 0, const uint8_t* bssid = NULL, bool connect = true); //配置STA模式并连接相应WIFI
wl_status_t begin(char* ssid, char *passphrase = NULL, int32_t channel = 0, const uint8_t* bssid = NULL, bool connect = true); //配置STA模式并连接相应WIFI
wl_status_t begin(); //配置连接上次连接成功的wifi
bool config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dns1 = (uint32_t)0x00000000, IPAddress dns2 = (uint32_t)0x00000000); //配置 IP 网关 子掩码,dns
bool reconnect(); //重新连接
bool disconnect(bool wifioff = false); //断开网络连接
bool isConnected(); //判断是否连接成功
bool setAutoConnect(bool autoConnect); //设置是否自动连接到最近接入点
bool getAutoConnect(); //判断是否设置了自动连接
bool setAutoReconnect(bool autoReconnect); //设置是否自动重新连接到最近接入点
uint8_t waitForConnectResult(); //等待网络连接结果
String macAddress(); //获取获取mac地址
IPAddress localIP(); //获取IP
IPAddress subnetMask(); //获取子网掩码
IPAddress gatewayIP(); //获取子网IP
IPAddress dnsIP(uint8_t dns_no = 0); //获取dns地址
String hostname(); // 获取host名字
bool hostname(char* aHostname);
bool hostname(const char* aHostname); // 设置host名字
bool hostname(String aHostname);
wl_status_t status(); // 获取当前wifi连接状态
String SSID() const; // 获取wifi网络的名字
String psk() const; //获取wifi网络密码
String BSSIDstr(); //获取wifi网络macaddress
int32_t RSSI(); //获取wifi网络的信号强度
bool beginWPSConfig(void);
bool beginSmartConfig();//启动 SmartConfig
bool stopSmartConfig();//停止 SmartConfig
bool smartConfigDone();//查找SmartConfig状态来决定是否停止配置
*/
#define LED D9
long debouncdDelay = 500; //延时间隔
long lastDebounceTime = 0; //最近记录的一次时间
U8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ D6, /* data=*/ D5, /* reset=*/ U8X8_PIN_NONE); // ESP32 Thing, pure SW emulated I2C
//U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ D6, /* data=*/ D5); // ESP32 Thing, HW I2C with pin remapping
//定义 AP 的名称及密码
#define AP_SSID "vivoX20A"
#define AP_PASSWORD "12345678"
// 配置热点的参数信息(IP,网关,子掩码)
//以下三个定义为调试定义
#define DebugBegin(baud_rate) Serial.begin(baud_rate)
#define DebugPrintln(message) Serial.println(message)
#define DebugPrint(message) Serial.print(message)
IPAddress local_IP(192, 168, 4, 22);
IPAddress gateway(192, 168, 4, 9);
IPAddress subnet(255, 255, 255, 0);
uint8_t Time_val = 0;
void setup() {
// put your setup code here, to run once:
pinMode(LED, OUTPUT); //初始化led io
digitalWrite(LED, LOW); //配置io输出为低电平
pinMode(D5, OUTPUT); // SSD1306 SDA
pinMode(D6, OUTPUT); // SSD1306 SCL
digitalWrite(D5, 0);
digitalWrite(D6, 0);
u8g2.begin(); // 显示屏初始化配置
DebugBegin(115200); //配置串口
DebugPrint("**************************Setting STA*************************" );
DebugPrint("/n");
//启动STA模式,并连接到wifi网络
WiFi.begin(AP_SSID, AP_PASSWORD);
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_5x8_tf);
u8g2.setFontDirection(0);
u8g2.drawStr(0, 8, " AP_SSID:");
u8g2.drawStr(50, 8, AP_SSID);
u8g2.drawStr(0, 18, " AP_PSW:");
u8g2.drawStr(50, 18, AP_PASSWORD);
} while ( u8g2.nextPage() );
//判断网络状态是否连接上,没连接上就延时500ms,并且打出一个点,模拟连接过程
//笔者扩展:加入网络一直都连不上 是否可以做个判断,由你们自己实现
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Time_val++;
DebugPrint(".");
DebugPrint(WiFi.status());
}
if(WiFi.status() == WL_CONNECTED)
{
//输出mac地址
DebugPrintln(String("Connected, mac address: ")+WiFi.macAddress().c_str());
//输出station IP地址,这里的IP地址由DHCP分配
DebugPrintln(String("Connected, IP address: ")+WiFi.localIP().toString());
//输出子网掩码地址
DebugPrintln(String("Subnet mask: ")+WiFi.subnetMask().toString());
//输出网关 IP地址
DebugPrintln(String("Gataway IP: ")+WiFi.gatewayIP().toString());
//输出hostname
DebugPrintln(String("Default hostname: ")+WiFi.hostname());
//设置新的hostname
WiFi.hostname("Station_host_1");
DebugPrintln(String("New hostname: ")+WiFi.hostname());
//输出SSID
DebugPrintln(String("SSID: ")+WiFi.SSID());
//输出psk
DebugPrintln(String("psk: ")+WiFi.psk());
//输出BSSID
DebugPrintln(String("BSSID: ")+WiFi.BSSIDstr());
//输出RSSI
DebugPrintln(String("RSSI: ") + WiFi.RSSI() + " dBm");
}
ESP.wdtEnable(5000); //使能软件看门狗的触发间隔
}
void loop() {
// put your main code here, to run repeatedly:
ESP.wdtFeed(); //喂狗
if (millis() - lastDebounceTime > debouncdDelay)
{
lastDebounceTime = millis(); //重新赋值上一次时间
//不断打印当前的station个数
DebugPrintln(String("Stations connected =") + WiFi.softAPgetStationNum());
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_5x8_tf);
u8g2.setFontDirection(0);
u8g2.drawStr(0, 8, " AP_SSID:");
u8g2.drawStr(50, 8, AP_SSID);
u8g2.drawStr(0, 18, " AP_PSW:");
u8g2.drawStr(50, 18, AP_PASSWORD);
u8g2.drawStr(0, 28, " RSSI:");
u8g2.setCursor(50,28);
u8g2.print( WiFi.RSSI()); //输出内容
} while ( u8g2.nextPage() );
digitalWrite(D9, !digitalRead(D9)); //配置io输出为 读取当前IO口状态的反向值
}
}