M5CAMERAでラジコン戦車作ってみた〜【Part4: M5CAMERAとPCをWiFi接続してみる】
はじめに
前回は、USB接続による有線でモータを動かしました。今回は、M5CAMERAとPCをWiFi接続してみます。
ステーションモードとアクセスポイントモード
M5CAMERAとPCをWiFi接続する方法は2つのモードがあります。
ステーション・モードとアクセスポイント・モードのメリットとデメリットを以下に示します。
メリット | デメリット | |
ステーション・モード | WiFiの範囲内であれば、PCとM5の距離が遠くても通信可能 | 特になし |
アクセスポイント・モード | 自宅にWiFiがなくてもPCとM5間の無線通信が可能 |
PCとM5の距離が遠いと通信できなくなる |
ここでは、ステーション・モードで進めたいと思います。
WiFi接続のプログラム
M5CAMERAの電源を投入すると、M5CAMERAに格納したパイソンプログラムファイル、boot.py が自動的に実行されます。電源投入と同時にWiFi接続するように、ファイル名:boot.py として、PC上に次のプログラムを作成します。
# boot.pyの参考プログラム例
import network
import utime
import ntptime
from machine import Pin
from time import sleep
#station mode
def do_connect():
sta_if = network.WLAN(network.STA_IF)
time_out = False
start_time = utime.time()
if not sta_if.isconnected():
print('connecting to network...')
sta_if.active(True)
sta_if.connect('WiFi-Name', 'SSID')
while not sta_if.isconnected() and not time_out:
if utime.time() - start_time >= 10:
timed_out = True
else:
pass
if sta_if.isconnected():
for n in range(0,10):
Pin(14, Pin.OUT).value(0)
sleep(0.2)
Pin(14, Pin.OUT).value(1)
sleep(0.2)
Pin(14, Pin.OUT).value(0)
print('network config:', sta_if.ifconfig())
else:
for n in range(0,20):
Pin(14, Pin.OUT).value(0)
sleep(0.2)
Pin(14, Pin.OUT).value(1)
sleep(0.2)
Pin(14, Pin.OUT).value(1)
print('disable to connect WiFi')
do_connect()
boot.pyがPythonスクリプトで実行されると、M5カメラをWiFiに接続します。sta_if.connect('WiFi-Name', 'SSID')で指定したWiFiに、SSIDを使って接続を行います。WiFi-NameとSSIDは、自分のWiFiに合わせて書き換えが必要です。
接続成功した時は、M5カメラの横にある内蔵LEDを10回点滅した後、接続中の目印としてLEDを光らせています。
20秒間接続を試みても接続できない時は、LEDを20回点滅した後、接続失敗の目標としてLEDを消灯します。
接続プログラムをM5CAMERAにampyで転送する
PC上に作成したboot.pyファイルをM5CAMERAにコピーします。ファイルの転送には、ampyを使います。ampyは、micropythonと通信するPC用のpythonプログラムで、PC側のファイルをM5CAMERAに転送する、転送したボード上のファイルを実行するなどの操作が可能です。
ローカルのboot.pyをM5CAMERAに転送するには、次のコマンドを実行します
ampy --port /dev/tty.usbserial-01EF52FF put boot.py
ボード側のファイルを確認するに次のコマンドを実行します
boot.pyを実行
ボード側に転送したboot.pyを実行するには、M5STACKのリセットスイッチを押すか、ampyのコマンドでboot.pyを実行します。
usagi@usagi-mba% ampy --port /dev/tty.usbserial-01EF52FF run boot.py
プログラムが上手く走り、WiFiに接続すると、M5CAMERAのLEDが点滅の後に点灯します。
動画をここに入れる。
boot.pyの動きを観察するには、screenコマンドでM5CAMERAに接続した状態で本体のリセットボタンを押します
写真で指示。
接続過程を確認する
WiFiへの接続が成功したかどうかは、M5CAMERA正面のLEDの点滅状態で確認できますが、より詳細なboot.pyの進捗状況を確認するには、screenコマンドで対話モードの状態にしておいてリセットボタンを押すことで状況確認が可能です。
>>> ets Jun 8 2016 00:22:57
rst:0x1 (POWERON_RESET),boot:0x37 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:5180
load:0x40078000,len:14032
load:0x40080400,len:3800
entry 0x4008063c
connecting to network...
network config: ('●.●.●.●', '▲.▲.▲.▲', '■.■.■.■', '×.×.×.×')
MicroPython v1.13-153-g9c0ac7e6a-dirty on 2020-11-07; Camera Module (i2s) with ESP32
Type "help()" for more information.
>>>
上に示すように、boot.pyの中に記述した、print('network config:', sta_if.ifconfig()) の内容がコンソールに表示されます。●.●.●.●の部分がM5CAMERAに割り当てられたIPアドレスで、通常は192.168.***のような3桁の数値×4セットをコンマで区切った文字列です。表示されたアドレスにpingコマンドを実行し、以下のように返事が返って来れば、PCとM5CAMERAの物理的な接続はできています。
usagi@usagi-mba ~ % ping ●.●.●.●
PING ●.●.●.● (●.●.●.●): 56 data bytes
64 bytes from ●.●.●.●: icmp_seq=0 ttl=255 time=299.085 ms
64 bytes from ●.●.●.●: icmp_seq=1 ttl=255 time=62.754 ms
64 bytes from ●.●.●.●: icmp_seq=2 ttl=255 time=83.577 ms
64 bytes from ●.●.●.●: icmp_seq=3 ttl=255 time=98.869 ms
^C
--- ●.●.●.● ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 62.754/136.071/299.085/94.985 ms
usagi@usagi-mba ~ %
以上、M5CAMERAをWiFi接続する手順でした。
※本ブログは管理者の備忘録であることをご理解いただき、ホビーの範囲でお楽しみください ^^)