Pico三昧(62) ラズパイPico 2 W、WiFi ネットワーク・ステータス

Joseph Halfmoon

前回は「後攻、有線LAN」だったので今回は「先行、無線LAN」に戻ります。前々回、無線LANはラズパイPico 2 W上のMicroPythonから手近なアクセスポイントに接続できたところで終わってました。今回は、プラットフォームとネットワークの接続ステータスなどをも少し丁寧に確認していきたいと思います。

※Pico関係投稿一覧は こちら

ifconfig()関数は非推奨になってた

以下のMicroPython公式のドキュメントを読んでいて気付きました。

network — ネットワーク設定

前回、ネットワークに接続できた後、DHCPで割り当てられたIPアドレスを確認するのに以下の関数を使わせていただきました。

ifconfig()

しかし、以下は上記のドキュメント註釈からの引用であります

この関数は非推奨です。代わりに ipconfig()を使ってください。

ああ、いつの間にか非推奨になっていたのね。。。それにしてもLinux風のifconfigではなく、Windows風なipconfigに統一なのね。知らんけど。

まあ、上記のドキュメント読むといろいろ書いてあるので、今回はその辺を「盛った」WLANのステータス確認用のスクリプトを作成してみます。こんな感じ。

import network
import time
import uctypes
import sys

SYSINFO_BASE = 0x40000000
CHIP_ID = 0x00
PPB_BASE = 0xE0000000
CPUID = 0xED00

CHIP_ID_REG = {
    "CID": 0 | uctypes.UINT32,
    "PLT": 4 | uctypes.UINT32
}

CPU_ID_REG = {
    "CPU": 0 | uctypes.UINT32
}

def chipInfo():
    #cpu = uctypes.struct(PPB_BASE+CPUID, CPU_ID_REG)
    machine=sys.implementation[2]
    print("sys.implementation[2]: ",machine)
    cid = uctypes.struct(SYSINFO_BASE+CHIP_ID, CHIP_ID_REG)
    print("SYSINFO::CHIP_ID:  0x{0:08x}".format(cid.CID))
    print("SYSINFO::PLATFORM: 0x{0:08x}".format(cid.PLT))
    if "ESP8266" in machine.upper():
        return True
    else:
        return False

def conWiFi():
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    wlan.connect('YOUR SSDI', 'YOUR PASSWD')

    while not wlan.isconnected() and wlan.status() >= 0:
        print("Waiting to connect:")
        time.sleep(1)
    return wlan

def networkInfo():
    phy_modeP = chipInfo()
    print("NETWORK::COUNTRY_CODE: ",network.country())
    print("NETWORK::HOSTNAME: ",network.hostname())
    if phy_modeP:
        print("NETWORK::PHY_MODE: ",network.phy_mode())

def networkStat(wlan):
    print("NIC.active:", wlan.active())
    print("NIC.isconnected:", wlan.isconnected())
    print("NIC.status:", end="")
    stat = wlan.status()
    if stat == network.STAT_IDLE:
        print("IDLE")
    elif stat == network.STAT_CONNECTING:
        print("CONNECTING")
    elif stat == network.STAT_GOT_IP:
        print("GOT_IP")
    else:
        print("??? CODE={0}".format(stat))    

def main():
    networkInfo()
    wlan = conWiFi()
    networkStat(wlan)
    #print(wlan.ifconfig())

if __name__ == "__main__":
    main()

ちょっとRP2350のハードウエアを直接アクセスしたりして、お惚け老人の色を出してみました。そんなもん、いらんぞなもし。

上記スクリプトの実行結果

実行結果が以下に。networkStatus

当然すぎるっちゃ、当然すぎますが、RP2350登載のRaspberry Pi Pico 2 Wと認識されており、デフォルトでWLANのカントリーコードは未設定、hostnameはPico2Wであります。そしてAPへの接続はOKとな。

Pico三昧(61) W5100S_EVB_PICO、有線LAN、Micropython起動 へ戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です