写一段 u8g2 ssd1306 显示 wifi 列表的代码
时间: 2024-03-15 07:43:52 浏览: 215
c#获取无线wifi列表
5星 · 资源好评率100%
好的,以下是一段基于 u8g2 和 ESP8266 的代码,可以扫描并显示当前 WiFi 热点列表。
```c++
#include <ESP8266WiFi.h>
#include <U8g2lib.h>
// 初始化屏幕
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);
void setup() {
// 初始化串口和屏幕
Serial.begin(115200);
u8g2.begin();
// 扫描 WiFi 热点列表
WiFi.mode(WIFI_STA);
int n = WiFi.scanNetworks();
Serial.println("Scan done");
if (n == 0) {
Serial.println("No networks found");
} else {
Serial.print(n);
Serial.println(" networks found");
for (int i = 0; i < n; ++i) {
// 获取 SSID 和信号强度
String ssid = WiFi.SSID(i);
int rssi = WiFi.RSSI(i);
// 在屏幕上显示 SSID 和信号强度
u8g2.setFont(u8g2_font_6x10_tf);
u8g2.drawStr(0, (i+1)*12, ssid.c_str());
u8g2.drawStr(100, (i+1)*12, String(rssi).c_str());
}
}
}
void loop() {
// 清空屏幕缓冲区
u8g2.clearBuffer();
// 显示 WiFi 热点列表
u8g2.setFont(u8g2_font_6x10_tf);
u8g2.drawStr(0, 12, "SSID");
u8g2.drawStr(100, 12, "RSSI");
// 刷新屏幕
u8g2.sendBuffer();
// 等待 10 秒钟再扫描一次
delay(10000);
}
```
在这个代码中,我们先初始化了一个 `U8G2_SSD1306_128X64_NONAME_F_SW_I2C` 的屏幕对象 `u8g2`,然后在 `setup()` 函数中扫描当前 WiFi 热点列表,并在屏幕上显示出来。
在 `loop()` 函数中,我们先清空屏幕缓冲区,然后显示 WiFi 热点列表的表头,最后刷新屏幕。由于扫描 WiFi 热点列表需要一些时间,因此我们每隔 10 秒钟才会再次扫描并更新屏幕显示。
需要注意的是,这个例子中我们使用了 `U8G2_SSD1306_128X64_NONAME_F_SW_I2C` 类型的屏幕对象,这意味着我们需要使用软件模拟 I2C 总线来连接屏幕。如果你使用的是硬件 I2C 总线,则需要使用 `U8G2_SSD1306_128X64_NONAME_1_HW_I2C` 类型的屏幕对象,并将 `SCL` 和 `SDA` 引脚连接到硬件 I2C 总线上。
阅读全文