MicroPythonのWiFi設定を整える

MicroPythonをデフォルト設定のまま使っていると、アクセスポイント名がMicroPython-XXXXXという「いかにも」な名前だったり、そもそもアクセスポイントは不要だよねとか、色々変えたくなってくる。そこで今回はMicroPythonのWiFi設定を整えてみた。

スポンサーリンク

オブジェクトの準備

MicroPythonは端末とアクセスポイント両方のインタフェースを持っている。
設定を行うには、まずnetworkモジュールのオブジェクト変数をそれぞれ作成する。

インタープリタで以下を実行。

>>> import network
>>> sta_if = network.WLAN(network.STA_IF)
>>> ap_if = network.WLAN(network.AP_IF)

すると以降は、オブジェクト変数を介してそれぞれ設定が可能になる。

  • sta_if : 端末
  • ap_if : アクセスポイント

アクセスポイントとしての設定を変更する

アクセスポイントのESSIDを某社製アクセスポイント風に”Buffalo-G-E123″としたければ、

>>> ap_if.config(essid='Buffalo-G-E123')

パスコードの変更

>>> ap_if.config(password='abcdefgh')

SSIDを非公開にする

>>> ap_if.config(hidden=True)

3つ同時に設定出来る

>>> ap_if.config(essid='Buffalo-G-E123',password='abcdefgh',hidden=True)

アクセスポイントを無効化

>>> ap_if.active(False)

端末としての設定を変更する

インストール直後は端末インタフェースが無効化されている。有効化には以下を実行。

>>> sta_if.active(True)

以下で端末としてアクセスポイントに接続出来る。

>>> sta_if.connect('接続先のSSID','パスコード')

接続状態を確認する。

>>> sta_if.ifconfig()
('192.168.11.11', '255.255.255.0', '192.168.11.1', '10.0.0.1')

MACアドレスを確認。sta_if.config(‘mac’)で取得出来るが、バイト列で返ってきてしまうのでヘキサ化して読めるようにする。b’123456789abcはMACアドレスの普通の表記で12:34:56:78:9a:bcの意味。

>>> import ubinascii
>>> ubinascii.hexlify(sta_if.config('mac'))
b'123456789abc'

端末として固定IPで接続させる

MicroPythonをWiFiルーターに接続させた後、ifconfigメソッドでIPアドレスを固定させる事が出来る。ifconfigメソッドについては、公式ドキュメントに解説がある。

クラス WLAN -- 組込み WiFi インタフェースの制御 — MicroPython latest ドキュメント

以下のコードでは、

  • 6行目でアクセスポイントに接続(‘SSID’と’パスコード’は接続先に合わせて書く)
  • 9行目で固定IPアドレス(192.168.1.11)を設定

を行っている。

import network

def wifi_startup():
    sta_if = network.WLAN(network.STA_IF)
    if sta_if.active(True):
        sta_if.connect('SSID','パスコード')
        while not sta_if.isconnected():
            pass
        sta_if.ifconfig(('192.168.1.11', '255.255.255.0', '192.168.1.1', '192.168.1.1'))

このコードをwifi_startup.pyに保存してampy等で本体に送り、boot.pyかmain.pyに以下のコードを書いておけば、起動時に固定IPアドレスでMicroPythonに接続出来るようになる。

from wifi_startup import wifi_startup
wifi_startup()

接続先アクセスポイントの設定で固定IPアドレス化

ifconfigメソッドで直接IPアドレス指定するのではなく、アクセスポイント側でMACアドレスとIPアドレスを紐付けておく方法もある。
Ubuntu18.04に設定したアクセスポイント(こちらの記事を参照)ならDHCPサーバの設定ファイルに以下を追加するだけで簡単に実現する。

/etc/dhcp/dhcpd.conf

host MicroPython {
  hardware ethernet 12:34:56:78:9a:bc
  fixed-address 192.168.11.101;
}

DHCPサーバを再起動すれば反映される。

$ sudo systemctl restart isc-dhcp-server

まとめ

MicroPythonをWiFi接続する方法は色々あるけれど、固定IPアドレスを持たせたほうが何かと便利。ifconfigメソッドで直接IPアドレスを設定してしまう方法の他、DHCPサーバから所定のIPアドレスを配らせる方法を紹介した。

コメント