・2021/12/05
ESP8266で Python言語 MicroPythonを動かす方法
(Windows 10の WSL環境で ESP8266で Python言語 MicroPythonを動かします)
Tags: [電子工作]
● ESP8266で Python言語 MicroPythonを動かす方法
Windows 10の WSL環境で ESP8266で Python言語 Micro Pythonを動かします。
WSL環境は WSL1で OSは Ubuntuを使いました。
※ WSL1は USB Serialが使えます。WSL2は USB Serialに非対応。
※ WSL環境のお陰で Windows環境でも簡単に Linux系の作業ができる様になりました
ESP8266 での MicroPython の始め方
ESP8266 用クイックリファレンス
MicroPython downloads
Port: esp8266
ESP8266 with 2MiB+ flash
手持ちの ESP8266モジュールは Flash ROMが 4MB版だったので ESP8266 with 2MiB+ flash版をインストールしました。
esp8266-20210902-v1.17.bin
esp8266-20210902-v1.17.bin v1.17 (2021-09-02) .bin
・ESP8266で Python言語 MicroPythonを動かす方法

・ESP8266で Python言語 MicroPythonを動かす方法

・ESP8266で Python言語 MicroPythonを動かす方法





● /dev/ttyS21 の 21の番号は Windowsのデバイスマネージャで確認します。

Windows 10の WSL1で Ubuntuを動かして ESP8266に MicroPythonをインストールします。
# Windows 10 WSL1 Ubuntu
cd
mkdir esp8266
cd esp8266
# esptoolをインストール
pip install esptool
# MicroPythonのバイナリをダウンロード
# ESP8266 with 2MiB+ flash
wget https://micropython.org/resources/firmware/esp8266-20210902-v1.17.bin
ls -l
# -rw-r--r-- 1 user user 633688 Sep 2 10:30 esp8266-20210902-v1.17.bin
# 消去
esptool.py --port /dev/ttyS21 erase_flash
# 書き込み
esptool.py --port /dev/ttyS21 write_flash --flash_size=detect 0 esp8266-20210902-v1.17.bin
手持ちの ESP8266モジュールは RESETボタンや FLASHボタンを押さなくても自動的に esptoolが動いてくれました。
※ ESP32モジュールの方はコマンド実行前に Bootボタンを押したままにする必要があった。
● esptool.py erase_flashコマンド
$ time esptool.py --port /dev/ttyS21 erase_flash
esptool.py v3.2
Serial port /dev/ttyS21
Connecting....
Detecting chip type... Unsupported detection protocol, switching and trying again...
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: 60:01:94:xx:xx:xx
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 11.9s
Hard resetting via RTS pin...
real 0m13.970s
user 0m0.047s
sys 0m0.063s
● esptool.py write_flashコマンド
$ time esptool.py --port /dev/ttyS21 write_flash --flash_size=detect 0 esp8266-20210902-v1.17.bin
esptool.py v3.2
Serial port /dev/ttyS21
Connecting....
Detecting chip type... Unsupported detection protocol, switching and trying again...
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: 60:01:94:xx:xx:xx
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 4MB
Flash will be erased from 0x00000000 to 0x0009afff...
Flash params set to 0x0040
Compressed 633688 bytes to 416262...
Wrote 633688 bytes (416262 compressed) at 0x00000000 in 36.8 seconds (effective 137.9 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
real 0m39.686s
user 0m0.172s
sys 0m0.063s
● esptool.py write_flashコマンド
$ esptool.py write_flash
usage: esptool write_flash [-h] [--erase-all] [--flash_freq {keep,40m,26m,20m,80m}]
[--flash_mode {keep,qio,qout,dio,dout}] [--flash_size FLASH_SIZE]
[--spi-connection SPI_CONNECTION] [--no-progress] [--verify] [--encrypt]
[--encrypt-files <address> <filename> [<address> <filename> ...]]
[--ignore-flash-encryption-efuse-setting] [--compress | --no-compress]
<address> <filename> [<address> <filename> ...]
esptool write_flash: error: the following arguments are required: <address> <filename>
-fm dout オプション(最低速オプション)
qio Quad I/O
qout Quad Output
dio Dual I/O
dout Dual Output
● esptool.pyコマンド
$ esptool.py
esptool.py v3.2
usage: esptool [-h] [--chip {auto,esp8266,esp32,esp32s2,esp32s3beta2,esp32s3,esp32c3,esp32c6beta,esp32h2,esp8684}]
[--port PORT] [--baud BAUD] [--before {default_reset,usb_reset,no_reset,no_reset_no_sync}]
[--after {hard_reset,soft_reset,no_reset,no_reset_stub}] [--no-stub] [--trace]
[--override-vddsdio [{1.8V,1.9V,OFF}]] [--connect-attempts CONNECT_ATTEMPTS]
{load_ram,dump_mem,read_mem,write_mem,write_flash,run,image_info,make_image,elf2image,read_mac,chip_id,flash_id,read_flash_status,write_flash_status,read_flash,verify_flash,erase_flash,erase_region,merge_bin,version,get_security_info}
...
esptool.py v3.2 - ESP8266 ROM Bootloader Utility
positional arguments:
{load_ram,dump_mem,read_mem,write_mem,write_flash,run,image_info,make_image,elf2image,read_mac,chip_id,flash_id,read_flash_status,write_flash_status,read_flash,verify_flash,erase_flash,erase_region,merge_bin,version,get_security_info}
Run esptool {command} -h for additional help
load_ram Download an image to RAM and execute
dump_mem Dump arbitrary memory to disk
read_mem Read arbitrary memory location
write_mem Read-modify-write to arbitrary memory location
write_flash Write a binary blob to flash
run Run application code in flash
image_info Dump headers from an application image
make_image Create an application image from binary files
elf2image Create an application image from ELF file
read_mac Read MAC address from OTP ROM
chip_id Read Chip ID from OTP ROM
flash_id Read SPI flash manufacturer and device ID
read_flash_status Read SPI flash status register
write_flash_status Write SPI flash status register
read_flash Read SPI flash content
verify_flash Verify a binary blob against flash
erase_flash Perform Chip Erase on SPI flash
erase_region Erase a region of the flash
merge_bin Merge multiple raw binary files into a single file for later flashing
version Print esptool version
get_security_info Get some security-related data
optional arguments:
-h, --help show this help message and exit
--chip {auto,esp8266,esp32,esp32s2,esp32s3beta2,esp32s3,esp32c3,esp32c6beta,esp32h2,esp8684}, -c {auto,esp8266,esp32,esp32s2,esp32s3beta2,esp32s3,esp32c3,esp32c6beta,esp32h2,esp8684}
Target chip type
--port PORT, -p PORT Serial port device
--baud BAUD, -b BAUD Serial port baud rate used when flashing/reading
--before {default_reset,usb_reset,no_reset,no_reset_no_sync}
What to do before connecting to the chip
--after {hard_reset,soft_reset,no_reset,no_reset_stub}, -a {hard_reset,soft_reset,no_reset,no_reset_stub}
What to do after esptool.py is finished
--no-stub Disable launching the flasher stub, only talk to ROM bootloader. Some features will not be
available.
--trace, -t Enable trace-level output of esptool.py interactions.
--override-vddsdio [{1.8V,1.9V,OFF}]
Override ESP32 VDDSDIO internal voltage regulator (use with care)
--connect-attempts CONNECT_ATTEMPTS
Number of attempts to connect, negative or 0 for infinite. Default: 7.
● ESP8266の詳細を知る方法、Flash ROMのサイズ、Chip ID、MACアドレス
● ESP8266の詳細を知る方法、Flash ROMのサイズ
$ esptool.py --port /dev/ttyS21 flash_id
esptool.py v3.2
Serial port /dev/ttyS21
Connecting....
Detecting chip type... Unsupported detection protocol, switching and trying again...
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: 60:01:94:xx:xx:xx
Uploading stub...
Running stub...
Stub running...
Manufacturer: e0
Device: 4016
Detected flash size: 4MB
Hard resetting via RTS pin...
● ESP8266の詳細を知る方法、Chip ID
$ esptool.py --port /dev/ttyS21 chip_id
esptool.py v3.2
Serial port /dev/ttyS21
Connecting....
Detecting chip type... Unsupported detection protocol, switching and trying again...
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: 60:01:94:xx:xx:xx
Uploading stub...
Running stub...
Stub running...
Chip ID: 0x0004bdc7
Hard resetting via RTS pin...
● ESP8266の詳細を知る方法、MACアドレス
$ esptool.py --port /dev/ttyS21 read_mac
esptool.py v3.2
Serial port /dev/ttyS21
Connecting....
Detecting chip type... Unsupported detection protocol, switching and trying again...
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: 60:01:94:xx:xx:xx
Uploading stub...
Running stub...
Stub running...
MAC: 60:01:94:xx:xx:xx
Hard resetting via RTS pin...
● ESP8266の Flash ROMの内容を丸ごとバックアップする方法
read_flashコマンドで 4MBの全部をダンプします。
--baud 115200で 115200bpsの通信速度で転送。
# 0x400000 = 4MB
$ time esptool.py --port /dev/ttyS21 --baud 115200 read_flash 0x00000 0x400000 backup.img
esptool.py v3.2
Serial port /dev/ttyS21
Connecting....
Detecting chip type... Unsupported detection protocol, switching and trying again...
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: 60:01:94:xx:xx:xx
Uploading stub...
Running stub...
Stub running...
4194304 (100 %)
4194304 (100 %)
Read 4194304 bytes at 0x0 in 381.5 seconds (88.0 kbit/s)...
Hard resetting via RTS pin...
real 6m23.555s
user 0m26.484s
sys 0m17.750s
● ESP8266の Flash ROMの内容を丸ごとバックアップする方法
read_flashコマンドで 4MBの全部をダンプします。
--baud 230400で 230400bpsの通信速度で転送。(当然の事ながら 115200bpsの倍速い)
※ 私の手持ちの ESP8266は 460800bpsには対応していなかった
$ time esptool.py --port /dev/ttyS21 --baud 230400 read_flash 0x00000 0x400000 backup.img
esptool.py v3.2
Serial port /dev/ttyS21
Connecting....
Detecting chip type... Unsupported detection protocol, switching and trying again...
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: 60:01:94:xx:xx:xx
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 230400
Changed.
4194304 (100 %)
4194304 (100 %)
Read 4194304 bytes at 0x0 in 192.7 seconds (174.1 kbit/s)...
Hard resetting via RTS pin...
real 3m14.826s
user 0m12.359s
sys 0m8.500s
ls -l
# -rw-r--r-- 1 user user 4194304 Dec 5 15:44 backup.img
● ESP8266の Flash ROMにバックアップしたファイルの内容を書き込む方法
write_flashコマンドで書き込みます。
$ time esptool.py --port /dev/ttyS21 write_flash 0x00000 backup.img
esptool.py v3.2
Serial port /dev/ttyS21
Connecting....
Detecting chip type... Unsupported detection protocol, switching and trying again...
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: 60:01:94:xx:xx:xx
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Flash will be erased from 0x00000000 to 0x003fffff...
Compressed 4194304 bytes to 305524...
Wrote 4194304 bytes (305524 compressed) at 0x00000000 in 40.5 seconds (effective 828.9 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
real 0m47.556s
user 0m0.172s
sys 0m0.094s
●シリアル通信に対応のターミナルソフトで ESP8266の MicroPythonに接続します
ボーレート 115200(115200bps)で接続します。





・ESP8266で Python言語 MicroPythonを動かす方法





● ESP8266 MicroPythonで SSD1306 OLED ディスプレイの使い方
14. SSD1306 OLED ディスプレイの使い方
D1 | GPIO5 | often used as SCL (I2C) |
D2 | GPIO4 | often used as SDA (I2C) |
● I2C
from machine import Pin, I2C
import ssd1306
# using default address 0x3C
i2c = I2C(sda=Pin(4), scl=Pin(5))
display = ssd1306.SSD1306_I2C(128, 64, i2c)
display.text('Hello, World!', 0, 0, 1)
display.show()
>>> display = ssd1306.SSD1306_I2C(128, 64, i2c)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "ssd1306.py", line 118, in __init__
File "ssd1306.py", line 37, in __init__
File "ssd1306.py", line 74, in init_display
File "ssd1306.py", line 123, in write_cmd
OSError: [Errno 19] ENODEV
手持ちの ESP8266 + OLEDモジュールの場合は
i2c = I2C(sda=Pin(5), scl=Pin(4))
で動いた。
from machine import Pin, I2C
import ssd1306
# using default address 0x3C
i2c = I2C(sda=Pin(5), scl=Pin(4))
display = ssd1306.SSD1306_I2C(128, 64, i2c)
display.text('Hello, World!', 0, 0, 1)
display.text('ESP8266', 0, 8, 1)
display.text('MicroPython', 0, 16, 1)
display.text('FREE WING', 0, 24, 1)
display.text('1234567890123456', 0, 40, 1)
display.text('1234567890123456', 0, 48, 1)
display.text('1234567890123456', 0, 56, 1)
display.show()

● ssd1306ライブラリのコマンド色々
display.poweroff() # ディスプレイの電源オフ、ピクセルはメモリに残存
display.poweron() # ディスプレイの電源オン、ピクセルを再描画
display.contrast(0) # 暗くする
display.contrast(64)
display.contrast(128)
display.contrast(255) # 明るくする
display.invert(1) # 反転
display.invert(0) # 通常表示
display.rotate(True) # 180度回転
display.rotate(False) # 0度回転
display.show() # FrameBuffer の内容をディスプレイメモリに書き出す
display.fill(0)
display.fill_rect(0, 0, 32, 32, 1)
display.fill_rect(2, 2, 28, 28, 0)
display.vline(9, 8, 22, 1)
display.vline(16, 2, 22, 1)
display.vline(23, 8, 22, 1)
display.fill_rect(26, 24, 2, 4, 1)
display.text('MicroPython', 40, 0, 1)
display.text('SSD1306', 40, 12, 1)
display.text('OLED 128x64', 40, 24, 1)
display.show()
・ESP8266で Python言語 MicroPythonを動かす方法

● ESP8266 MicroPythonで GPIOの使い方
6. GPIO ピン
D3 | GPIO0 | connected to FLASH button with pull up |
from machine import Pin
# GPIO0 Flash Button
p0 = Pin(0, Pin.IN) # GPIO0 の入力ピンを作成
print(p0.value()) # 値 0 または 1 を取得
● ESP8266 MicroPythonの RTC
リアルタイムクロック (RTC)
from machine import RTC
rtc = RTC()
rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # 指定の日時を設定
rtc.datetime() # 日時を取得
● ESP8266 MicroPythonのファイルシステム、OSバージョン
3.2. ファイルのリスト表示など
>>> import os
>>> os.listdir()
['boot.py']
>>> os.uname().release
'2.0.0(5a875ba)'
● ESP8266 MicroPythonの REPL プロンプト、WebREPL
2. MicroPython REPL プロンプトの始め方
WebREPL client for MicroPython
>>> import webrepl_setup
WebREPL daemon auto-start status: disabled
Would you like to (E)nable or (D)isable it running on boot?
(Empty line to quit)
>
No further action required
WebREPL (Web ベースの対話プロンプト)
import webrepl
webrepl.start()
● ESP8266 MicroPythonのネットワーク
4. ネットワークの基礎
>>> import network
>>> sta_if = network.WLAN(network.STA_IF)
>>> ap_if = network.WLAN(network.AP_IF)
>>> sta_if.active()
False
>>> ap_if.active()
True
ap_if.active(False)
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect("WIFI-SSID", "WIFI-PASSWORD")
>>> print(sta_if.isconnected())
False
>>> print(sta_if.isconnected())
False
>>> print(sta_if.isconnected())
True
>>> print(sta_if.isconnected())
True
6秒程で接続する
>>> sta_if.ifconfig()
('192.168.xxx.xxx', '255.255.255.0', '192.168.xxx.xxx', '192.168.xx.xxx')
戻り値は、IPアドレス、ネットマスク、ゲートウェイ、DNS です。
>>> ap_if.ifconfig()
('0.0.0.0', '0.0.0.0', '0.0.0.0', '192.168.xxx.xxx')
● ESP8266 MicroPythonを WiFiに接続する方法
sta_if.connect("WIFI-SSID", "WIFI-PASSWORD")
import network
sta_if = network.WLAN(network.STA_IF)
ap_if = network.WLAN(network.AP_IF)
sta_if.active()
# False
ap_if.active()
# True
ap_if.active(False)
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect("WIFI-SSID", "WIFI-PASSWORD")
print(sta_if.isconnected())
● ESP8266 MicroPythonの WiFiアクセスポイント
SSID: MicroPython-xxxxxx
Password: micropythoN
1. Getting started with MicroPython on the ESP8266
●1.6. WiFi
新規のインストールとブートの後、デバイスは接続可能な WiFi アクセスポイント(AP)として設定されます。ESSID は、MicroPython-xxxxxx という形式です。x はデバイスのMAC アドレスの一部に置き換えられます(毎回同じで、すべての ESP8266 チップではおそらく同じです)。WiFi のパスワードは micropythoN です(大文字の N に注意してください)。一度ネットワークに接続すると、そのIPアドレスは 192.168.4.1 になります。WiFi の設定については、チュートリアルの後半で詳しく説明します。
1. Getting started with MicroPython on the ESP8266
●1.6. WiFi
After a fresh install and boot the device configures itself as a WiFi access point (AP) that you can connect to. The ESSID is of the form MicroPython-xxxxxx where the x’s are replaced with part of the MAC address of your device (so will be the same everytime, and most likely different for all ESP8266 chips). The password for the WiFi is micropythoN (note the upper-case N). Its IP address will be 192.168.4.1 once you connect to its network. WiFi configuration will be discussed in more detail later in the tutorial.
WLAN step by step
● ESP8266 MicroPythonの通信エラー
$ esptool.py --port /dev/ttyS21 --baud 115200 flash_id
esptool.py v3.2
Serial port /dev/ttyS21
Connecting......................................
A fatal error occurred: Failed to connect to Espressif device: No serial data received.
For troubleshooting steps visit: https://github.com/espressif/esptool#troubleshooting
$ esptool.py --port /dev/ttyS21 --baud 115200 flash_id
esptool.py v3.2
Serial port /dev/ttyS21
Traceback (most recent call last):
File "/home/user/.local/bin/esptool.py", line 5143, in <module>
_main()
File "/home/user/.local/bin/esptool.py", line 5136, in _main
main()
File "/home/user/.local/bin/esptool.py", line 4541, in main
esp = esp or get_default_connected_device(ser_list, port=args.port, connect_attempts=args.connect_attempts,
File "/home/user/.local/bin/esptool.py", line 121, in get_default_connected_device
_esp = ESPLoader.detect_chip(each_port, initial_baud, before, trace,
File "/home/user/.local/bin/esptool.py", line 372, in detect_chip
detect_port = ESPLoader(port, baud, trace_enabled=trace_enabled)
File "/home/user/.local/bin/esptool.py", line 337, in __init__
self._set_port_baudrate(baud)
File "/home/user/.local/bin/esptool.py", line 353, in _set_port_baudrate
self._port.baudrate = baud
File "/usr/lib/python3/dist-packages/serial/serialutil.py", line 295, in baudrate
self._reconfigure_port()
File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 435, in _reconfigure_port
termios.tcsetattr(
termios.error: (5, 'Input/output error')
・ESP8266で Python言語 MicroPythonを動かす方法









・ESP8266で Python言語 MicroPythonを動かす方法



● MicroPythonのファイルエリアをいじるのに便利っぽい
● Thonny Python IDE
Thonny Python IDE for beginners
Download version 3.3.13 for Windows, Mac, Linux
● uPyCraft is an IDE
Introduction of uPyCraft
uPyCraft is an IDE works with Windows and Mac
uPyCraft
uPyCraft_src
・ESP32で Python言語 MicroPythonを動かす方法








Tags: [電子工作]
●関連するコンテンツ(この記事を読んだ人は、次の記事も読んでいます)
Raspberry Pi Zero Wを海外通販の Pimoroni等での購入方法、購入できる通販ショップ一覧まとめ
ラズパイゼロW ワイヤレスモデルを海外通販でサクッと簡単に個人輸入で入手。技適通過でも国内販売は常に品切れ
大人気の CPUボード、Raspberry Pi 3 Model Bで作ってみよう
Raspberry Piの開発環境の構築やタッチパネル付き液晶ディスプレイや各種センサーの使い方まとめ
STM32 STM32F103C8T6マイコンボードを ST-Link V2(中華製の互換ドングル)を使って開発
STM32F103C8 ARM Cortex-M3 72MHz CPU、ST-LINK Utilityでファームのアップデート
Espressif ESP32 Arduino互換でスケッチが使える WROOM32開発基板
Espressif ESP32 32ビット Arduino互換マイコンボードをお手軽に開発する方法
Espressif ESP8266 Arduino互換でスケッチが使える ESP-12Eモジュール基板
Espressif ESP8266 ESP-12-E NodeMCU V1 ESP12 CP2102
BangGood通販はドローン以外にも面白い商品がまだまだ有った(電子工作編)
レーザー彫刻機、カラー液晶の DIYオシロ、Arduinoや Raspberry Pi用の小型カラー液晶
ESP32で Python言語 MicroPythonを動かす方法
Windows 10の WSL環境で ESP32で Python言語 MicroPythonを動かします
LilyGO TTGO T-display ESP32/ RP2040/ GD32 GD32VF103CBT6を買ってみた
LilyGO TTGO T-display ESP32/ RP2040/ GD32 GD32VF103CBT6を買ってみた
LoRa通信を使用してポストに郵便物が投函されるとスマホの LINE宛に通知する IoTの作り方
LoRaを使用した IoT郵便受け LoRa IoT Mailbox Sensor with LINE Messaging API
ESP32で Slackに「勤怠管理」メッセージをワンボタン操作で投稿する方法
Slackの勤怠チャンネルに毎日毎日毎日毎日 手動で投稿するのが馬鹿らしいので ESP32で作った
[HOME]
|
[BACK]
リンクフリー(連絡不要、ただしトップページ以外は Web構成の変更で移動する場合があります)
Copyright (c)
2021 FREE WING,Y.Sakamoto
Powered by 猫屋敷工房 & HTML Generator
http://www.neko.ne.jp/~freewing/hardware/espressif_esp8266_pyhon_micropython_with_wsl/