Site cover image

Site icon image電子工作 ~ 50歳の手習い

本職はソフトウェアエンジニア。最近組み込みの仕事がよくあるので勉強がてら楽しんでます。

MycroPython で Raspberry Piの picoと pico w をプログラムで判別してみた

こんにちは、「MAKO」と言います。

今回の記事は、Raspberry Piの「Pico」と「Pico W」の判別をMicroPythonで行うプログラムをMicroPythonで書いてみました。

「Pico」と「Pico W」の違いは無線チップが乗っているかどうかの違いですので、Wi-Fiモジュールの初期化が成功するか、例外が発生するかで判断しようとしましたが、「Pico」の場合はその前段階の「network」パッケージのimport の段階で 「ImportError」の例外が発生しました。

そもそも「Pico」はネットワークの機能をもっていないので、「Pico」用のMycroPythonの実行環境のuf2 ファイルには含まれていないのでしょうね。。

よって、性格な判断だとちょっとなんだかなという感じもしますが、 「import network」で例外が発生した場合には、「Pico」、そうでない場合(+WIFIモジュールの初期化も成功の場合)に「Pico W」と判断するプログラムを作ってみました。

「Pico」の場合は3秒間隔、「Pico W」の場合は1秒間隔で内蔵LEDを点滅させています。

# micropythonを使ってRaspberry Pi picoとpico w を区別するプログラム

import machine
import time

# Wi-Fiモジュールの有無をチェックする関数
def check_wifi():
    try:
        # networ を importする
        import network
    except:
        # pico の場合は network のパッケージが存在しないため ImporError でException する
        return False
        
    try:
        # Wi-Fiモジュールを初期化する
        wifi = network.WLAN(network.STA_IF)
        # Wi-FiモジュールがあればTrueを返す
        return True
    except:
        # Wi-FiモジュールがなければFalseを返す
        return False

# Wi-Fiモジュールの有無をチェックする
wifi = check_wifi()

if wifi:
    print("This is pico w")
    
    # LEDを制御するためのピンを設定する
    led = machine.Pin("LED", machine.Pin.OUT)

    while True:
        led.toggle()
        time.sleep(1)
else:
    print("This is pico")
    # LEDを制御するためのピンを設定する
    led = machine.Pin(25, machine.Pin.OUT)

    while True:
        led.toggle()
        time.sleep(3)


内蔵LEDの点滅についてはいかに記事にしていますので、併せてごらんになって頂ければありがたいです。

📄Arrow icon of a page linkMicroPython で 内蔵LEDのLチカさせてみました(Paspberry Pi Pico編)

📄Arrow icon of a page linkMicroPython で 内蔵LEDのLチカさせてみました(Paspberry Pi Pico W編)