Arduino--ESP8266--Station

ESP8266WiFiSTA库

/**********************************************************************/
/* 学习例程:  关于esp8266 Station 配置
   学习目的:  了解站点模式配置步骤及ESP8266WiFiSTA库相关函数
   学习日期:  20200707
   对于STA类库的描述,可以拆分为四个部分:
       第一部分方法,和一个接入点(Access Point,wifi热点)建立连接;
       第二部分方法,管理第一部分方法建立的连接;
       第三部分方法,提供一些关于这个连接的信息,包括MAC地址、IP地址等;
       第四部分方法,提供一些备用方法去连接WiFi-Protected Setup(WPS)以及智能配置方法(SmartConfig);
*/
/**********************************************************************/
//#include 
#include    //WIFI 头文件
#include        //第三方库
#include           //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口状态的反向值
  }

}

你可能感兴趣的:(Arduino,ESP8266)