WiFi信号スキャナーをM5スタックで作ったのでご紹介します。
昨年来、住宅地の多くで近隣のWiFiネットワークが混みあってきているのではないかなと勝手に思います。この測定器はすぐできるうえ表示も見やすいのではないかと・・(自画自賛^^)
作った経緯:居間のテレビにつないである小型PCのWiFi通信が、最近ずいぶん遅くなった事に気づきました。ひょっとすると・・と、接続を802.11g(2.4GHz)から 802.11a(5GHz)に変更しました。ルーターから結構遠いので子機(アンテナ)もロッド4本のものに交換しました。これで通信が見違えるほど高速で快適になりました。遅くなっていた原因は、このところのテレワーク急増で付近の2.4GHz帯が混み出したためではないかな・・と考えついたわけでした。
比較的よく飛ぶ2.4GHz帯ですがBluetoothにも邪魔されやすいため、我が家では周辺装置も有線接続にしていますから、きっと周囲からの影響かなと考えたわけです。そこで、すぐでき操作も簡単、ポケットにいれて持ち歩ける測定器を作ったわけでした。
これを試してビックリ。近隣に意外に多くのWiFiルーターが林立しています! 1年前の何倍も多い感じです。PCで行う普段の作業はイーサネット接続なので、気づかなかっただけと思いますが。これでみると日付や時間帯によって登場するルーターの顔ぶれが少し違うようなのも不思議。スマホからのテザリングは見当たりませんので、ひょっとすると不使用時にルーター電源をオフにする方がおられるのでしょうかね?
当地は住宅の特別な密集地でもないのに、冒頭の写真のように20個のWiFiネットワークがひしめき合っています。表示は信号の強さ(dBm=デシベルミリワット)とそのSSIDで、右側にe-cと表示してあるのは各WiFiの暗号化タイプ(Encryption Type)と使用中のチャネル(Channel)番号です。続きの2ページ目を表示すると次です。
チャネル11に多く集まっているのは少し不思議なのですが、機種による特徴もありそうですね。
使っているM5スタックは、Espressif社のWiFi&Bluetooth付きマイコンESP32に、LCDやボタン3つ等をつけて大きさ約5cmの正方形に纏め、専用ライブラリーが使えるラクチンなマイコンです。数か月前に秋月電子で3500円で購入したM5 Stack Basicなのですが、今オンラインで覗いて見ると4500円ほどに値上がりしたようです。
さて、プログラムも他のマイコンよりは簡単です。Arduino-IDEで次のように作成しました。
/****************************************************
* WiFi signal scanner for M5 Stack Basic *
* Initial Version 00 5/4,2021 (c)Akira Tominaga *
* Function: *
* Scan 802.11 b/g/n WiFi networks and *
* Show dBm,SSID, Encrypt.type, & channel number.*
* Input/Output: *
* No external devices. *
* Revisions: *
* (No new versions yet) *
****************************************************/
#include "M5Stack.h"
#include "WiFi.h"
uint8_t nNW; // number of networks
uint8_t nN; // NW sequence number
void setup() { // ***** Arduino setup() *****
M5.begin();
M5.Lcd.setTextSize(2);
WiFi.mode(WIFI_STA); // station mode
WiFi.disconnect(); // clear connections
delay(100);
}
void loop() { // ***** Arduino loop() *****
#define numL 13 // # of lines per page
M5.Lcd.fillScreen(BLACK); // clear screen
M5.Lcd.setTextColor(GREEN);
M5.Lcd.setCursor(50, 100);
M5.Lcd.println("Scanning..");
nNW = WiFi.scanNetworks();
if (nNW == 0) { // if no network
M5.Lcd.setCursor(50, 100);
M5.Lcd.println("No WiFi found");
} else { // if WiFi found
uint8_t nPages = nNW / numL + 1; // # of pages
uint8_t lastPlines = nNW % numL; // last page lines
if (lastPlines == 0) { // if 0 in last page
nPages--; // adjust nPages
}
for (uint8_t page = 0; page < nPages; page++) {
// *** draw page header
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setTextColor(GREEN);
M5.Lcd.setCursor(0, 0);
M5.Lcd.print("dBm "); // dB mW
M5.Lcd.print(nNW); // number of networks
M5.Lcd.print(" SSIDs page");
M5.Lcd.print(page + 1); // page number
M5.Lcd.print("/");
M5.Lcd.print(nPages); // total number of pages
M5.Lcd.println(" e-c"); // encrypt.type & channel
// *** draw page body
if (page == nPages - 1) { // if last page
for ( nN = page * numL; nN < nNW; nN++) {
listNW();
}
} else {
for ( nN = page * numL; nN < (page + 1)*numL; nN++) {
listNW();
}
}
delay(10);
if (page < nPages - 1) {
M5.Lcd.setTextColor(GREEN);
M5.Lcd.println("Button A for next page");
}
if (page >= nPages - 1) break;
while (M5.BtnA.read() == 0) {} // wait A button
}
}
M5.Lcd.setTextColor(GREEN);
M5.Lcd.setCursor(0, 224);
M5.Lcd.println(" Button B to re-scan");
while (M5.BtnB.read() == 0) {} // wait B button
}
/***********************************************
User defined function(s)
***********************************************/
// *** listNW() *** list-up detected SSIDs ***
void listNW(void) {
int8_t dBm = WiFi.RSSI(nN);
M5.Lcd.setTextColor(WHITE); // default White
if (dBm > -50) { // if strong,
M5.Lcd.setTextColor(ORANGE); // then Orange
} else if (dBm > -85) { // if medium,
M5.Lcd.setTextColor(YELLOW); // then Yellow
}
M5.Lcd.print(dBm); // dB milliWatt
M5.Lcd.print(" ");
String ss = WiFi.SSID(nN); // SSID name
uint8_t sspadlen = 18 - ss.length();
String space = " ";
ss.concat(space.substring(0, sspadlen));
M5.Lcd.print(ss); // show SSID
M5.Lcd.print(WiFi.encryptionType(nN));
M5.Lcd.print("-");
M5.Lcd.println(WiFi.channel(nN));
}
// *** end of program
M5 Stackは二次電池も内蔵して小さく、ポケットに収まるので持ち歩き使用にも便利ですね。
なお、信号強度のdBm(デシベルミリワット)の説明は次の記事の中に書きましたので、もし必要な方はご参照ください。
かんたんにできるWiFi信号レベル表示器(テレワークに便利) - 勝手な電子工作・・
今回はごく簡単なご紹介でしたが、皆様のお役に立てば幸いです。
©2021 Akira Tominaga, All rights reserved.