Освой Arduino играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Так как M5Stack использует микроконтроллер ESP32, то следовательно имеет встроенный WiFi-модуль. Мы можем использовать примеры для ESP32, используя библиотеку WiFi.h.
Имея TFT-дисплей, мы можем вывести информацию не в монитор порта, а на экран. Напишем скетч для сканирования WiFi-сетей. Я немного переделал готовый пример, взятый с форума.
#include <M5Stack.h>
#include "WiFi.h"
#include <String.h>
int n;
int ssidLength = 12;
int thisPage = 0;
const int pageSize = 8;
bool on = false;
bool leftLocked = false;
bool rightLocked = false;
void setup()
{
WiFi.mode(WIFI_STA);
WiFi.disconnect();
M5.begin();
M5.Lcd.setBrightness(100);
M5.Lcd.setTextSize(3);
M5.Lcd.setCursor(45, 110);
M5.Lcd.printf("Wi-Fi scanner");
drawMenu();
}
void drawMenu() {
M5.Lcd.setTextSize(3);
M5.Lcd.setTextColor(BLUE);
if (on == true)
{
M5.Lcd.setCursor(110, 215);
M5.Lcd.printf("RESCAN");
if (thisPage != 0)
{
M5.Lcd.setCursor(60, 215);
M5.Lcd.printf("<");
leftLocked = false;
}
else
{
leftLocked = true;
}
if (thisPage < ((n - 1) / pageSize))
{
M5.Lcd.setCursor(250, 215);
M5.Lcd.printf(">");
rightLocked = false;
}
else
{
rightLocked = true;
}
}
else
{
M5.Lcd.setCursor(128, 215);
M5.Lcd.printf("SCAN");
}
}
void clearScreen() {
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setCursor(0, 0);
M5.Lcd.setTextColor(WHITE);
M5.Lcd.setTextSize(2);
}
void showRecords(int nav = 0) // -1 top, 1 bottom
{
if (nav == -1)
{
if ((on == true) && (leftLocked == false))
{
thisPage--;
if (thisPage < 0) thisPage = 0;
showRecords();
}
}
else if (nav == 1)
{
if ((on == true) && (rightLocked == false))
{
if ((thisPage) <= (n / pageSize)) thisPage++;
showRecords();
}
}
else
{
clearScreen();
M5.Lcd.setCursor(100, 2);
M5.Lcd.print("TOTAL: ");
M5.Lcd.print(n);
M5.Lcd.setCursor(0, 30);
for (int i = (thisPage * pageSize); i < ((thisPage * pageSize) + pageSize); i++)
{
if (i >= n) break;
M5.Lcd.print(i + 1);
String ssid = (WiFi.SSID(i).length() > ssidLength) ? (WiFi.SSID(i).substring(0, ssidLength) + "...") : WiFi.SSID(i);
M5.Lcd.print(" " + ssid + " (" + WiFi.RSSI(i) + ")\n");
}
drawMenu();
}
}
void search() {
on = true;
clearScreen();
M5.Lcd.setTextSize(3);
M5.Lcd.setCursor(50, 90);
M5.Lcd.printf("Please, wait.");
M5.Lcd.setCursor(50, 120);
M5.Lcd.printf("Searching...");
n = WiFi.scanNetworks();
showRecords();
}
void loop()
{
if (M5.BtnA.wasPressed()) showRecords(-1);
if (M5.BtnB.wasPressed()) search();
if (M5.BtnC.wasPressed()) showRecords(1);
M5.update();
}
Осталось запустить пример и нажать на среднюю кнопку. Запустится сканирование точек доступа WiFi. Если точки доступа будут обнаружены, то информация о них будет выведена на экран с указанием имени и силы сигнала. Если число точек будет превышать 8 штук, то появится прокрутка вперёд и назад через кнопки A и C.