UMEHOSHI ITA TOP PAGE    COMPUTER SHIEN LAB

[UMEHOSHI ITA]の制御で使っているIC「PIC32MX270F256B-I/SO」のフラッシュメモリには、テスト用プログラムが書き込まれいています。
以降では、このプログラムを「テスト・ウメ・フラッシュ」と呼ぶことにして解説します。
また、「テスト・ウメ・フラッシュ」を利用したユーザー用のプログラムを 「ウメ・エディットプログラム」と呼ぶことにします。
「ウメ・エディットプログラム」の開発では「umehoshiEditツール」が必要で、 その取得や最初の操作情報は、こちらを参照してください。

以下は[UMEHOSHI ITA]に、 こちらで示したように「ESP32-WROOM-32D」を取り付けて、これにmicropythonをインストールした基板 に対するサンプル例です。

UART を介して、ESP32-WROOM-32Dをmicropython制御

参考:  micropythonのオンラインマニュアル
    docs.micropython.org

[UMEHOSHI ITA]で動作させる時に必要な部品の追加のリンクです。

スルーモードで、ESP32-WROOM-32Dのmicropythonをターミナル(「Tera Term」など)から動かす

このようにESP32を追加した基板を使うには、大きなUSB電源供給能力(ピークで1.5A程度)が必要です。
PCやスマフォと直接USB接続しないで、別電源付きのUSBハブを経由して接続した方が良いでしょう。

(USB2.0の給電能力が500mA、USB3.0で900mAのため、規格を超えて使うことになります)

このリンクの説明に従って、 PCとUSBで接続して、
「Tera Term」のターミナルを起動して、『[Enter]と[T]と[Enter]と[Enter]』の入力操作で、 [UMEHOSHI ITA]を一時スルーモードにしてから操作します。
この状態で、ターミナル画面にはMicropPythonの会話モードの「>>>」のプロンプトが出現しているはずです。
そして「Tera Term」でのキー入力は、[UMEHOSHI ITA]を介して「ESP32-WROOM-32D」への入力となり、、 「ESP32-WROOM-32D」からの出力は「Tera Term」に送られて、見えるようになっています。

この状態で、以下の各コードは、コピー貼り付けで動作できるでしょう。
(貼り付けコードサイズが大きすぎると、正しく貼り付けられないことがあります。 その場合、うまく分割して貼り付け操作をしてください。)

以下はMACアドレスを表示し、周辺のWifiのAPデバイスをスキャンして、情報を表示するプログラムです
以下でimportしているnetworkは、MicroPython用に特別に組み込まれるモジュールで、組み込み対象のハードウェア用のネットワークドライバーの ハードウェアネットワークインタフェースを設定するために使われます。

import network
wlan = network.WLAN(network.STA_IF)   # create station interface
mac=wlan.config('mac')  # get the interface's MAC address
print("MAC address:", mac)
wlan.active(True) # activate the interface
list=wlan.scan()             # scan for access points
for device in list:
   ssid = device[0].decode()
   print("{:32}{:}".format( ssid, device[1:] ) )


以下は、Wifiアクセスポイントに接続して各種アドレスを表示するコードです。
下記の'999740E60153''Password phrase str'の部分は、 使っているWifiのアクセスポイントに合わせて変更してください。

import network
wlan = network.WLAN(network.STA_IF)   # create station interface
wlan.active(True) # activate the interface

msg="check if the station is connected to an AP :"
print(msg,wlan.isconnected()) 

ssid='999740E60153'
password='Password phrase str'
wlan.connect(ssid, password) # connect to an AP
while not wlan.isconnected(): pass      

conf=wlan.ifconfig() # get various interface addresses
print("IP,netmask,gw,DNS\n", conf)


socketによるwebクライアントプログラムで。上記Wifiアクセスポイントに接続後で行う
(MicropPythonに限ったコードではありませんが、HTTPの応答メッセージのヘッダーに "Content-Length: "が含まれない時は動きません。)
def getHeader(head:str, name:str): # ヘッダ文字列の取得
  i=head.find(name)
  if i == -1: return ''
  i += len(name)
  i2=head.find("\r\n", i)
  return head[i:i2]


import socket
addr_info = socket.getaddrinfo("google.co.jp", 80)
print(addr_info)
addr=addr_info[-1][-1]
client = socket.socket()
client.connect(addr)
client.send(bytes('GET / HTTP/1.0\r\nHost: %s\r\n\r\n'% addr[0], 'utf8'))
head = ""
while True:
  data = client.recv(1)
  if not data : raise RuntimeError("socket connection broken")
  head +=data.decode('utf-8')
  print(str(data,'utf8'), end='')
  if head[-4:] == '\r\n\r\n': break


content_len=getHeader(head, "Content-Length: ")
content_len=int(content_len)
body=client.recv(content_len) # HTTPボディ部受信
client.close()
print(body.decode())

ESP32 MicroPythonでファイル内容をちょっと確認する方法を示します。
import os
fs=os.listdir("..")
print(fs)
with open(fs[0])  as f: ss=f.readlines()

for s in ss: print(s,end="")
上記で親ディレクトリのリストを確認して、最初のファイルの内容を表示している例です。
最初のファイルがboot.pyの場合で、その内容を表示している例を以下に示しています。
# This file is executed on every boot (including wake-boot from deepsleep)
#import esp
#esp.osdebug(None)
#import webrepl
#webrepl.start()

ampyを使って ファイルを転送して動作させる

ampyはAdafruit(エイダフルート)社が開発したMicroPython 用のToolです。
具体的は、PC側のampyコマンドを使うことで、ESP8266関連チップを シリアルポート経由でファイル操作やプログラムの実行ができるようするものです。
ここで使っているESP32も操作対象になります。

PC側で、ampyをインストールする場合、Python用のpipが使える環境で、 次ようにコマンド実行することでインストールできます。

pip install adafruit-ampy

このインストール後、[UMEHOSHI ITA]側のPythonが使えるコマンドプロンプトですぐ使えます。以下に操作例を示します。
このリンクの説明に従ってPCとUSBで接続し、
「Tera Term」のターミナルで『[Enter]と[T]と[Enter]と[Enter]』の入力操作を行って [UMEHOSHI ITA]を一時スルーモードにして使います。)
COM8のポート番号の8は、環境に合わせて変更してください。(この例はPC側OSがWindowsの例です)

操作例のコマンド説明
ampy -p COM8 -b 11500 ls [UMEHOSHI ITA]側でlsのファイルやディレクトリリストを実行する
ampy -p COM8 -b 11500 reset [UMEHOSHI ITA]側でソフトリセットとブートを実行する
ampy -p COM8 -b 11500 get /boot.py boot.py [UMEHOSHI ITA]側からPCにファイルを転送する
ampy -p COM8 -b 11500 put setap.py PCから[UMEHOSHI ITA]側にファイルを転送する
ampy -p COM8 -b 11500 rm udpsvr.py [UMEHOSHI ITA]側でrmの削除を実行する
ampy -p COM8 -b 11500 run udpsvr.py [UMEHOSHI ITA]側でプログラムファイルを実行する


上記のコマンドを使えば、micro pythonのソースをPCで作り、ターミナル操作でソースをでESP32に送信して実行できます。
USBを介してターミナルでの文字列表示ができますが、UMEHOSHI ITA 単体ではLED発光かブザー音程度の出力しかできなにので、デバックが大変です。
このデバックを少しでも容易にするため、デバック用のumedebugモジュールとその紹介のページを用意しました。
希望したプログラムが動作出来ない場合の、このumedebugモジュールのご利用をお勧めします。
ume_debug00.html



アクセスポイントとして動作させる実験。

上記のampyの機能を使って、下記の内容のファイル(setap.py)を、転送して実行させます。

import network
ap = network.WLAN(network.AP_IF) # create access-point interface
ap.config(essid='ESP-AP') # set the ESSID of the access point
ap.config(max_clients=10) # set how many clients can connect to the network
ap.ifconfig(('192.168.222.1', '255.255.255.0', '192.168.222.1', '8.8.8.8'))
# set (ip address, subnet mast, default gateway, dns ip address)
ap.active(True)         # activate the interface
import ubinascii
b=ap.config('mac')
print("mac address:", ubinascii.hexlify(b))
conf=ap.ifconfig() # get various interface addresses
print("IP,netmask,gw,DNS:", conf)
なお、上記「import ubinascii」でmac addressのバイナリを読める形式に変換しています。
他に「import binascii」で base64 crc などの変換関数が利用できるようです。
上記では、MACアドレスをmac address: b'30aea49c7de5'のような表示をして
最後にネットワーク設定情報をIP,netmask,gw,DNS:('192.168.222.1', '255.255.255.0', '192.168.222.1', '8.8.8.8')と表示します。

PC側のampyやpythonが動作できる箇所で、上記の内容のsetap.pyで作成します。
そして、「ampy -p COM8 -b 11500 put setap.py」の操作でファイルを転送します。
[UMEHOSHI ITA]はスルーモードにする必要がありますが、「Tera Term」などターミナルと通信中は、ampy コマンドが使えません。
「Tera Term」などターミナルは閉じてから行ってください。
パワーオンの状態で、SW1とSW2を押して、SW1を離してから4秒以上後にSW2を離す操作で スルーモードにするのが簡単でしょう。
(D1のLEDが一時消灯してから点灯に変化したタイミングでSW2を放すとよいでしょう)
以下は、setap.pyがある位置をカレントディレクトリとするampyやpythonが動作できるコマンドプロンプトで、 setap.pyファイルをESP32に転送して、それを実行させている動作例です。
その後で、WindowsのWifi接続先をこのESPに変更しています。(SSIDが「ESP-AP」でパスワードは無し)

R:\MicroPythonFolder>ampy -p COM8 -b 11500 put setap.py

R:\MicroPythonFolder>ampy -p COM8 -b 11500 run setap.py
mac address: b'30aea49c7de5'
IP,netmask,gw,DNS: ('192.168.222.1', '255.255.255.0', '192.168.222.1', '8.8.8.8')

R:\MicroPythonFolder>ping 192.168.222.1

192.168.222.1 に ping を送信しています 32 バイトのデータ:
192.168.222.1 からの応答: バイト数 =32 時間 =2ms TTL=255
192.168.222.1 からの応答: バイト数 =32 時間 =2ms TTL=255
192.168.222.1 からの応答: バイト数 =32 時間 =1ms TTL=255
192.168.222.1 からの応答: バイト数 =32 時間 =1ms TTL=255

192.168.222.1 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 1ms、最大 = 2ms、平均 = 1ms

R:\MicroPythonFolder>

上記右イメージはWindowsからESP32のアクセスポイントに接続した直後のイメージです。
その後で、通信できているかをpingコマンドで確認している様子です。


このアクセスポイントモジュールを利用して、UDPやTCPを使った通信が可能になるでしょう。
UDPやTCPを使った通信例は、このページで示しています。