05.Wio TerminalのWi-Fi Scan


05.Wio TerminalのWi-Fi Scan

Wi-Fiネットワークをスキャンするスケッチです。
最初上から表示しますが、下まで行くとスクロール表示します。
Seeed Wiki > Platform > Wio Terminal > Network > Wi-Fi の
https://wiki.seeedstudio.com/Wio-Terminal-Wi-Fi/
に出ているSTAモードのWi-Fiネットワークスキャンのスケッチを少し変更して日本語で画面表示してみました。
ステーション(STA)モードは、Wio Terminalを無線LAN子機として使うモードです。
スケッチ作成中、英数固定長のフォントでは漢字以外は表示できました。しかし、"02.Wio Terminal"の日本語表示で使用したefontではエラーが出てしまいましたので違うフォントを探してみました。
lgfxJapanGothicは全文字固定長のIPAゴシックで、軽量ライブラリです。フォントの表示行と今回のスケッチでのメモリ使用率を測定しました。
フォント
フォントのFlash
容量(kB)
表示行メモ
リ使
用率(%)
lgfxJapanGothic_8622629
lgfxJapanGothic_12991837
lgfxJapanGothic_161451547
lgfxJapanGothic_201981258
lgfxJapanGothic_242561070
lgfxJapanGothic_28308882
lgfxJapanGothic_32365794
lgfxJapanGothic_36430NGNG
lgfxJapanGothic_40490NGNG
縦8ドットは"暗号"の漢字がつぶれて読めず、12ドットは読みづらかったで、16ドットを使用しました。また、0には斜線が入っています。簡単なスケッチで、すでにflash容量が半分になってしまうのは問題です。

スケッチ


// NetScan.ino  WiFiをScanし画面表示
#include <rpcWiFi.h>      // Wi-Fi使用
#define LGFX_AUTODETECT   // LovyanGFX対応機種を自動認識
#include <LovyanGFX.hpp>  // LovyanGFXを使用
static LGFX lcd;          // LGFXのインスタンスを作成

void setup() {
  lcd.init();                        // LCD初期化
  lcd.setBrightness(64);             // バックライト輝度(暗0-255明)
  lcd.setFont(&lgfxJapanGothic_16);  // フォント ゴシック固定長縦16ドット
  lcd.setTextScroll(true);           // 画面下端に到達後スクロール
  lcd.setScrollRect(0, 0, lcd.width(), lcd.height());
  // スクロール範囲(X,Y,W,H,スクロール後の色(省略時は変更なし)) (未指定時は画面全体)
  lcd.setTextSize(1.0);                   // 文字サイズ(横縦幅倍数)
  lcd.setTextColor(TFT_GREEN, TFT_BLACK); // (文字色,背景色)
  lcd.setCursor(0, 0);  // 画面左上から開始
  WiFi.mode(WIFI_STA);  // ステーションモード(子機) 今まで接続時はAPから切断
  WiFi.disconnect();    // 現在のネットワークからWiFiシールドを切断
  delay(100);           // 0.1秒待つ
}

void loop() {
  int n = WiFi.scanNetworks();   // 利用可能なWiFiネットワークをスキャンした検出数
  if (n == 0) {                  // n=0の時
    lcd.println("ネットワークが見つかりません");  // 表示
  } else {                       // n>0の時
    if (n > 14) n = 14;          // nは1画面15行まで表示
    lcd.println("no *暗号 (dBm) SSID");  // タイトル表示
    for (int i = 0; i < n; ++i) {       // 検出数分を表示
      if (WiFi.RSSI(i) > -100) {        // 表示は-100dBmより強い物のみ
        lcd.printf("%02d", i + 1);      // 検出番号
        if (WiFi.encryptionType(i) == WIFI_AUTH_OPEN) {
          lcd.print(" ");               // 開放は" "と表示
        } else {
          lcd.print("*");               // 暗号化は"*"と表示
        }  // 暗号化の種類 WIFI_AUTH_OPEN, WIFI_AUTH_WEP ,WIFI_AUTH_WPA_PSK,
        // WIFI_AUTH_WPA2_PSK,WIFI_AUTH_WPA_WPA2_PSK, WIFI_AUTH_WPA2_ENTERPRISE
        lcd.printf("(%ld)", WiFi.RSSI(i));  // ルーターへの接続の受信信号強度(dBm)
        lcd.println(WiFi.SSID(i));          // SSID表示
        delay(10);                          // 10mS待つ
      }
    }
  }
  lcd.println("");  // 改行 1行開ける
  delay(5000);      // 5秒待つ スキャン間隔
}
* フラッシュメモリの47%を使用。