M5StackシリーズのATOM Liteを購入しました。今回は、MicroPythonをインストールして、インターネットにアクセスするとこまでやっていきます。
前回、RaspberryPi Picoを使って、RaspberryPi Zeroをソーラーパネルで駆動させる装置を作りましたが、その際、省電力ってメリット大きいと感じたので、この省電力であろうマイコンボードでWifi、Bluetoothを搭載、そして何よりMicroPythonが使える(これマスト)こいつを使ってみたくなりました。
■ MicroPythonのインストール
インストールは下記のサイトを参考にしました。
MicroPython的午睡(36) ThonnyでATOM Liteにインストール
https://jhalfmoon.com/dbc/2021/07/29/micropython的午睡36-thonnyでatom-liteにインストール/
スクショ付きで説明してくれているので、細かいことは上記サイトに任せて、要約だけ以下に書きます。
1. Thonnyのインストール
https://thonny.org
・最初はシンプルモードになっているので右上の「Switch to regular mode」をクリックして再起動
2. MicroPythonのダウンロード
https://micropython.org/download/esp32/
現時点で、最新である「v1.17 (2021-09-02) .bin」をダウンロードしました。
3. ATOM LiteをPC接続
・Windowsの認識が完了するのを待つ
4. MicroPythonのインストール
・Thonny起動
・「ツール」→「Option」→「インタプリタ」→インタプリタに「MicroPython(EPS32)」を選択
・ダイアログ右下の方「Install or update firmware」をクリック
・「Port」にそれらしきポートを選択、「Firmware」にダウンロードしたbinファイルを選択
・「インストール」で書き込み開始→100%になるまでワクワクして待つ
いやぁ簡単。とりあえずShellにhelp()と打って、Welcomeの表示を見てテンションを上げておきましょう。
■ MicroPythonでLチカ
ソース
import time
import machine,neopixel
pin = machine.Pin(27, machine.Pin.OUT)
np = neopixel.NeoPixel(pin, 1)
while True:
np[0] = (0, 0, 0)
np.write()
time.sleep(1)
np[0] = (0, 0, 255) #RGB
np.write()
time.sleep(1)
・保存→どこに保存するか聞かれるので「MicroPython device」を選択
・main.pyで保存(main.pyで保存すると起動時に自動実行される)
・実行→Lチカ
・Ctrl+Cで終了
Picoだと無限ループでも、ツールバーのStopを押したら止まりましたが、これだとCtrl+Cで止めるようです。
あとboot.pyも起動時に実行されるファイルで、main.pyはboot.pyの後に実行されるそうな。
neopixelというモジュールも初めて使いました。フルカラーLEDなので、1個でもいろいろ表現できますな。
ATOM Lite(M5Atom)でmicropythonを使ってLチカする
https://zenn.dev/nnabeyang/articles/d4ed88d1146530
11. NeoPixel の制御
https://micropython-docs-ja.readthedocs.io/ja/latest/esp8266/tutorial/neopixel.html
■ MicroPythonでWEBページにアクセス
ソース
def do_connect():
import network
sta_if = network.WLAN(network.STA_IF)
if not sta_if.isconnected():
print('connecting to network...')
sta_if.active(True)
sta_if.connect('', '') #要変更
while not sta_if.isconnected():
pass
print('network config:', sta_if.ifconfig())
def http_get(url):
import socket
_, _, host, path = url.split('/', 3)
addr = socket.getaddrinfo(host, 80)[0][-1]
s = socket.socket()
s.connect(addr)
s.send(bytes('GET /%s HTTP/1.0\r\nHost: %s\r\n\r\n' % (path, host), 'utf8'))
while True:
data = s.recv(100)
if data:
print(str(data, 'utf8'), end='')
else:
break
s.close()
do_connect()
http_get('http://micropython.org/ks/test.html')
チュートリアルのコピペです。
このコードではSSL化されたサイト(https)は取得できません。
あと日本語を読み込むとデコードする時にUnicodeErrorになります。
MicroPythonチュートリアル 4.ネットワークの基礎
https://micropython-docs-ja.readthedocs.io/ja/latest/esp8266/tutorial/network_basics.html
これだけでもGET値でデータをサーバーに送ることは出来ますし、読み込んだテキストを元に処理できるので、サイトから操作することもできます。
SSL化したサイトの読み込みは今回できなかったので、前回作ったデータ確認ツールをhttpでもアクセスできるようにしときました。これで手軽にログも取れるようになって、かなり使い勝手の良いデバイスになりそうです。
データ/デバイス死活確認ツール
https://webapps.tiblab.net/device/alive-monitor/


1 Comment
Add a Comment