WLAN-Netze auf OLED anzeigen



Ziel:
Unser ESP8266-Mikrocontrollerboard soll die Umgebung nach WLAN-Netzen absuchen und die gefundenen inklusive ihres Pegels und ihrer Verlüsselung auf dem OLED anzeigen.


Bild: Laufschrift-Experiment der Arduinospielwiese.





Quelltext:

// Dieses Programm benutzt die Bibliothek "u8g2" von oli kraus.
// Siehe dazu: https://github.com/olikraus/u8g2/wiki
// Referenz (mögliche Befehle): https://github.com/olikraus/u8g2/wiki/u8g2reference

// Bibliotheken:
#include "ESP8266WiFi.h"
#include <U8g2lib.h> // by oli kraus


// Instanziierung:
U8G2_SSD1306_128X32_UNIVISION_F_SW_I2C u8g2(U8G2_R0, 5, 4, 16);

// Globale Variablen:
String foo, bar;
char chrLine[21];


void setup() {

  // init OLED:
  u8g2.begin();
  u8g2.setFont(u8g2_font_mozart_nbp_tf); // sehr kleine Schrift

  // init WiFi:
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
}

void loop() {

  int n = WiFi.scanNetworks(); // wieviele Netzwerke gibt es hier?

  delay(100);

  if (n == 0) {

    u8g2.clearBuffer();
    u8g2.drawStr(7, 7, "Keine Netzwerke");
    u8g2.drawStr(7, 22, "gefunden.");
    u8g2.sendBuffer();
    delay(1000);

  } else {

    n--;

    for (int i = 0; i <= n; i++) {

      u8g2.clearBuffer();

      foo = "WLAN " + String(i) + " von " + String(n) + ":";
      strncpy(chrLine, foo.c_str(), 21);
      u8g2.drawStr(0, 7, chrLine);

      bar = String(WiFi.SSID(i)) + " " + WiFi.RSSI(i); // Name & Pegel
      
      if (WiFi.encryptionType(i) == ENC_TYPE_NONE) {
        bar += " open"; // nicht verschluesseltes WLAN
      } else {
        bar += " encr"; // verschluesseltes WLAN ("encrypted")
      }
      
      strncpy(chrLine, bar.c_str(), 21);
      u8g2.drawStr(0, 20, chrLine);
      
      if (bar.length() > 21) // 3. Zeile
      {
        bar = bar.substring(21);
        strncpy(chrLine, bar.c_str(), 21);
        u8g2.drawStr(0, 32, chrLine);
      }

      u8g2.sendBuffer();
      delay(2000);
    }
  }
  
  delay(4000);
}