ラビット・エンジニアリング

趣味の電子工作を、備忘録もかねて・・・・

M5CAMERAでラジコン戦車作ってみた〜【Part4: M5CAMERAとPCをWiFi接続してみる】

はじめに

前回は、USB接続による有線でモータを動かしました。今回は、M5CAMERAとPCをWiFi接続してみます。

f:id:Pin-Pon-Usagi:20210612093925j:plain 

 

 

ステーションモードとアクセスポイントモード

M5CAMERAとPCをWiFi接続する方法は2つのモードがあります。

 

  • 自宅のWiFiに、PCもM5CAMERAも参加させる、ステーションモード
  • M5CAMERAが発するWiFiに、PCを接続する、アクセスポイントモード

f:id:Pin-Pon-Usagi:20210531125914p:plain

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-NameSSIDは、自分の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

 

ボード側のファイルを確認するに次のコマンドを実行します

 

usagi@usagi-mba% ampy --port /dev/tty.usbserial-01EF52FF ls
/boot.py
usagi@usagi-mba%

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に接続した状態で本体のリセットボタンを押します

写真で指示。

 

f:id:Pin-Pon-Usagi:20210602154548j:plain

黄色の丸で囲った部分を押すと、リセットかかる

 

接続過程を確認する

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接続する手順でした。

 

※本ブログは管理者の備忘録であることをご理解いただき、ホビーの範囲でお楽しみください ^^)