|
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);
}
|