UMEHOSHI ITA TOP PAGE COMPUTER SHIEN LAB
[UMEHOSHI ITA]の制御で使っているIC「PIC32MX270F256B-I/SO」のフラッシュメモリには、テスト用プログラムが書き込まれいています。
以降では、このプログラムを「テスト・ウメ・フラッシュ」と呼ぶことにして解説します。
また、「テスト・ウメ・フラッシュ」を利用したユーザー用のプログラムを
「ウメ・エディットプログラム」と呼ぶことにします。
「ウメ・エディットプログラム」の開発では「umehoshiEditツール」が必要で、
その取得や最初の操作情報は、こちらを参照してください。
以下は[UMEHOSHI ITA]に、
こちらで示したように「ESP32-WROOM-32D」を取り付けて、これにmicropythonをインストールした基板
に対するサンプル例です。
[UMEHOSHI ITA]で動作させる時に必要な部品の追加のリンクです。
このように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)
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())
import os fs=os.listdir("..") print(fs) with open(fs[0]) as f: ss=f.readlines() for s in ss: print(s,end="")上記で親ディレクトリのリストを確認して、最初のファイルの内容を表示している例です。
# This file is executed on every boot (including wake-boot from deepsleep) #import esp #esp.osdebug(None) #import webrepl #webrepl.start()
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のバイナリを読める形式に変換しています。
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> |