MicroPythonのスレ Part 01
MaixduinoやMaixbit、M5StickVならRAMが6MBもあるので
これも大容量のヒープが扱えます
また、MaixPy、M5StickV専用のMicroPythonの派生版のMaixPyが使えます
MaixduinoならMaixPyからWiFiが使えます
Maxiduino、MaixBit、M5StickVはQVGAのカラー液晶LCDやカメラが標準装備なので
MaixPyから簡単にLCDやカメラが扱えます プログラム板に立てなかったのは電子工作も含めた内容にしたいからです
MicroPythonの派生版もここでOKです --~~~-~-~~~--~---~~~-~---~---~-~~-~~-~~----~-~~~--~~--~-~-~~~-~-~~~~-~---~--
--~~~--~~~~~~~---~~~-~--~~---~~-~-~--~-~-~--~~-~~~-~~-~~~---~--~~-----~-~---
~-~--~~~-~~---~~~--~----~-~-~~-~--~~-~~----~---~~~~---~--~-~-~~-~-~---~~~~~~
-~-~~~~--~-~-~~-~-~~---~~~~-~--~-~~~-~-~---~----~~~--~~---~-~--~~-~~--~--~-~
--~-~~~-~-~---~-~--~~----~~~~-~-~~--~~~--~~~-~-~--~~~~~----~~~-~~--~----~-~-
~----~~-~~~~--~~--~~-~---~-~~~~~~-~---~~-~~-~-~~-------~-~~-~~~~~~-~----~---
~~---~-~~~~---~--~-~~~~~--~-~~~-~-~-~-~~~~~~---~-~-~~-~------~-~--~--~-~~---
~-----~--~~~~--~-~~~-~-~~--~-~~--------~~-~-~~~~~------~~-~-~~-~-~-~~~-~-~~~
-~~--~-~~--~~~-~-~~~-~~-~-~~--~---~-~~~~~--~--~---~~~-----~-~--~~~-~~--~-~--
~~--~-~--~-~~-~--~~--~---~~~---~---~-------~~~~~--~--~-~-~~~--~~~--~~~~~~-~~
-~-~~~---~--~-~~~-~~-~~~---~~~--~~~-~~-~--~~~~--~-~--~~-~---~~~~-~----~-----
~--~~-~~-~~-~~~--~~~--~-~----~---~--~~~--~-~--~~---~~~-~~-~~-~~-~----~-~~-~-
--~---~~--~---~--~~--~--~---~-~~~-~~~~~~----~~~~---~---~~~~~~--~~~~-----~~~~
----~~-~--~--~~-~~~~--~~~~----~~---~~---~-~-~~~-~-~--------~~~~--~~~~--~~~~~
-----~----~~-~~~~-~--~-~~-~---~~~~~~~--~-~~~~--~-~--~~~-~-~~~-~-~-~-~-~-----
~~--~-------~~~~~-~~-~~~---~~~--~~-~~~~------~~---~~-~~---~-~-~--~~-~-~~--~~
~~~~----~--~~~~-~-~~~-~~----~-~~-~~~~-~-----~--~~-~--~~----~~------~~--~~~~~
--~-----~~~~----~~-~~~~-~~-~-~~~~~-~~~--~~~-~-~-~-~-----~-----~-~--~~~-~-~-~
-------~----~~~---~~~----~~~-~~~-~--~~--~~--~---~---~~~-~~~~--~-~-~~~~-~~~~~
-----~--~-~--~--~-~~~~-~~~-~--~~~~--~-~--~--~-~-~~~~--~-~~~~-~-~-~~---~~-~--
-~-~~~~--~~~--~~--~-~~---~~~~--~-~-~~~--~--~~-~-~~~-~---~~~---~~~~---~------
-~~--~----~~-~~~-~--~~~--~-~~~~--~~----~---~~~~~---~~-~~-~--~---~-~---~~~-~~
--~--~~---~~----~~~-~~~~~~~--~~-~~-~---~~~---~~-----~-~-~~--~--~~~~-~--~--~~
-~~--~~~~-----~----~-~-~--~~~-~~-~~-~~~----~~~-~~--~~--~~----~~~---~~---~~~~
~-~-~-~----~~~~---~--~----~----~--~~~~-~-~-~---~~--~~-~-~~~-~~~~----~~~~-~~~
-~~~-----~-~~---~~-~~-------~~-~~-~-~--~-~~-~-~~~-------~-~~~~~~~~--~~--~~~~
---~~-~~-~-~~-----~----~~~~~~~~-~~~--~-~--~---~--~-~---~~-~~~--~~~~~--~---~~
-~~-~--~~~--~~----~~~~--~--~~~-~~~~-~~-~~~--~---~~----~~---~~-~-~-~~~~------
~--~--~~---~-~~---~-~--~~~-~~----~--~---~~~~---~-~~~~~~~-~~~-~~--~~~~-----~-
--~~--~~~~~~~~~~---~-~~~~~~-----~~~-~------~-~----~--~~-~~~~-------~-~~-~~~-
-~~-----~--~-~~-~-~---~~---~~~-~-~----~~-~~----~~~~~---~-~~-~--~--~~~~-~~~~~
-~---~~~~~~--~~-~~~~~~-~--~--~~-~~~-~~------~----~-~~--~-~-~--~~~-~~-~-~----
~--~~~---~~~~-~-----~-~~~~---~~~~-~~-~-~----~~-~---~~-~----~-----~-~~~~~~-~~
-~-~-~-------~-~---~~~-~--~~---~~-~~~--~-~--~~~~--~~-~-~~~-~-~---~--~~-~~~~~
----~-~----~--~~--~-~-~~~~~----~-~~~-~~~----~-~~-~-~-~~---~~-~~~~~~---~~--~~
--~~-~~------~--~---~~----~~--~~~---~~--~~~-~--~~--~~-~~-~~~~~~~--~~---~~-~~
~--~~-~~-~-~-~~~--~~~-~-~-~~~~~~~---~-~~-~~-------------~~~--~-~-~--~--~~-~~
~~~~-~----~~~~--~-~~--~~-~-~--~~-----~--~-~~~-~~~~-~-~~~--------~~~~~--~~---
~~--~--~~~~------~--~----~-~-~-~~----~~~~--~~~-~~-~~~~----~~-~--~~--~~~~--~~
~---~~~-~~~-----~-~-~-~--~~--~-~~-~~~--~-~-------~-~~-~~--~~-~--~-~~~~-~~~-~
~--~--~~------~-~~~-~~~-~--~~----~-~-~~-~------~~~--~~~-~~---~~-~-~~-~~-~~~~
~~~~~-~~-~~-----~~-~-~~---~--~~-~~~--~-~---~-~-----~-~-~~~-~--~~-~--~-~--~~~
--~~~-~--~-~~~---~~~~---~---~~--~~---~--~-~---~-~--~--~-~-~~-~~~-~~~~~--~-~~
~-~~-~~~~~--~-~--~~~~---~-~--~---~~~-~~~--~-~--~-~~-----~-~--~--~--~~~--~-~~
--~~-~-~-~~~~~-~-~~~-~---~-~----~-~~-~~-~--~-~~----~---~-~--~-~~~-~~--~-~-~~
~-~~~---~~~-~~~---~--~~~~~~-~~---~--~-~----~~~-~--~-~----~---~~~~~~~~----~--
-~----~--~~~--~---~~--~~-~~---~-~~---~--~-~~--~-~-~~~--~--~~~~~~--~~-~~--~~~
-~-~~-~~-~~~~-~-~-~--~~~~~~----~~-~~-~---~~~-~~~~--~~-~~--~-----~-~---~-----
~~---~--~-----~~~~~~~-~~-~-~~-~~-~~~~~~--~-~--~-~---~---~-----~~~-~----~-~~~
----~~~~~~-~~---~-~~~~~~~~--~~~---~-~~----~~~~----~~--~--~-~--~~~~-~-~------ 素数を求めるプログラムです
ベンチマークとして使えます
https://pastebin.com/AxxVNxTB
MaixduinoでMaixPyのfirmwareをmaixpy_v0.5.0_12_g284ce83.binにして
import(Maix)
Maix.utils.gc_heap_size(3000000)
を実行して3Mのヒープを確保して実行したところ
260000桁まで計算できました
実行時間は3.3400秒でした
Maix.utils.gc_heap_size(3000000)はあまり大きな値を指定すると起動できなくなります
Maix.utils.gc_heap_size(4000000)では起動できなくなりました
復旧方法はここを参照してください
http://rio2016.5ch.net/test/read.cgi/denki/1573512764/67 ESP32-WROVER-Bモジュールで
本家MicroPythonのesp32spiram-idf3-20191220-v1.12.binで試したところ
52万3000桁まで計算できました
実行時間は44.5420秒です
26万桁で試したところ
実行時間は22.5000秒でした ESP32-WROVER-Bモジュールで
本家MicroPythonのPSRAM版ではない通常版のesp32-idf3-20191220-v1.12.binで試したところ
1万6300桁まで計算できました
実行時間は0.7970秒です Maixシリーズでヒープサイズ設定後、その設定が有効になるのはハードリセット後です
ソフトリセットでは有効にならないので要注意です ttps://cheeseshop.hatenadiary.org/entry/20080314/1236237562
ここのページの1番目のPIの計算プログラムを少しだけ改変して実行時間を計測してみました
https://pastebin.com/uZbrwhhJ
MaixduinoでMaixPyのmaixpy_v0.5.0_12_g284ce83.binで
8000桁で21.276秒
ESP32-WROVER-Bモジュールで
本家MicroPythonのesp32spiram-idf3-20191220-v1.12.binで
8000桁で217.121秒でした なぜか、ボードのリセットボタンを押してハードリセットしたらどちらも早くなりました
MaixduinoでMaixPyのmaixpy_v0.5.0_12_g284ce83.binで
8000桁で5.595秒
ESP32-WROVER-Bモジュールで
本家MicroPythonのesp32spiram-idf3-20191220-v1.12.binで
8000桁で31.904秒でした ESP32-WROVER-Bモジュールで
本家MicroPythonのPSRAM版ではない通常版のesp32-idf3-20191220-v1.12.binで
ハードリセット後実行して
8000桁で20.385秒でした
PSRAM版は多くのメモリを扱えますが多少遅くなることもあるようです ESP32-WROVER-Bモジュールで
通常版とPSRAM版でハードリセット直後のgc.mem_free()の値を見てみました
通常版(esp32-idf3-20191220-v1.12.bin) 114320
PSRAM版(esp32spiram-idf3-20191220-v1.12.bin) 4093584 電子工作ネタを一つ
気温、気圧、湿度センサーのBME280です
BME280モジュールはスイッチサイエンスや秋月で売ってます
https://www.switch-science.com/catalog/2236/
https://akizukidenshi.com/catalog/g/gK-09421/
BME280はSPIとI2Cを選べるのですがI2Cで接続での使用です
ここのサイトに接続方法が詳しく載ってます
秋月のでもJ3をはんだでショートしなくてもI2Cで使えるようです
ttps://iot-gym.com/bme280-obniz/
https://github.com/SWITCHSCIENCE/BME280
スイッチサイエンスのPython用のサンプルコードを改変して
MaixPyで使えるようにしたものをESP32で使えるようにしてみました
(ほんの少し修正しただけです)
i2c_addressにはBME280のアドレスを入れます(このプログラムでは0x76になってます)
ESP32本家MicroPython用
https://pastebin.com/f6gjgYM0
MaixPy用
https://pastebin.com/QyV9qssY
M5StickVでもSCL=34 SDA=35もしくはSCL=35 SDA=34にすればおそらく使えると思います BME280はGroveタイプのものもあるようです
GROVE - 温湿度・気圧センサ(BME280)
https://www.switch-science.com/catalog/3374/ MicroPythonのLoborisのPSRAM版ですが
基本的には下記URLのwikiに書かれたとおりにビルドすればいいのですが
https://github.com/loboris/MicroPython_ESP32_psRAM_LoBo/wiki/build
その通りにビルドしただけでは
usslのussl.wrap_socket()を使うとエラーが出るようです
これはhttpsでアクセスするときに使います
BUILD.sh menuconfigで設定するときに
→ Component config → mbedTLS → SDK (8192) TLS maximum message content length
この値を16384に設定することで正常に動作するようになります
ここに書いてあり、実際にやってみてSSLの通信ができることを確認しました
https://loboris.eu/forum/showthread.php?tid=61
また、デフォルトではヒープサイズが512KBになってるのでデフォルトでビルドしても
PSRAMを512MBしか使ってくれません
→ MicroPython → System settings → MicroPython heap size (KB)
ここを変更することで多くのメモリを確保できます
(最大で3840まで設定可能で3840で起動できることを確認しました)
3840KBに設定してビルドした時のハードリセット後gc.mem_free()を実行したところ
3835168
と出ました SSLの通信のテストプログラムとしてSipeedのMaixGo用のサンプルプログラムを引用しました
https://github.com/sipeed/MaixPy_scripts/blob/master/network/demo_http.py
ESP32のMicroPython用に改変してあります
本家MicroPythonのPSRAM版とLoborisのPSRAM版で動作することを確認してあります
JPEGの画像をダウンロードしてSPIFFSに保存するだけのプログラムです
ファイルはAlice.jpgという名前で保存されます
https://pastebin.com/TzM2fAeh SPIFFSへはuPyLoaderなどでアクセスできます
初回アクセス時はFileメニューのInit Transffer fileを実行してください
uPyLoader
https://github.com/BetaRavener/uPyLoader/releases 割り込みとかスリープへの対応って今後も予定無いの? MicroPython lobo版はWindowsからではビルドできなかったです
Linuxなどからビルドしてください
ESP-IDFのインストール方法はここを参照してください
https://docs.espressif.com/projects/esp-idf/en/stable/get-started/index.html
VMware上のLinuxでビルドする場合は仮想マシンにシリアルポートを追加して
ESP32のUSB SerialのCOMポートへ割り当ててください
flashへの書き込みは下記のようにシリアルポートを指定してボーレートを115200にして下さい
./BUILD.sh -p /dev/ttyS1 -b 115200 erase
./BUILD.sh -p /dev/ttyS1 -b 115200 flash 画像を扱う場合はESP32だとPSRAMがないときついね
だからM5CameraにはPSRAMがついてるんだろうね
https://www.switch-science.com/catalog/5207/
送料区分 500
税込単価 1,815 円
M5StickVやUNIT V、MaixduinoやMaix BitならRAMが6Mもあるから画像扱うのも楽
K210搭載モジュールはどれもスペックが似てるね
M5StickV
https://www.switch-science.com/catalog/5700/
送料区分 500
税込単価 3,080 円
UnitV AI Camera
https://www.switch-science.com/catalog/6212/
送料区分 150
税込単価 2,145 円 あと、MicroPythonならこれを忘れてはいけない
本家のpyboard
MICROPYTHON PYBOARD V1.1
https://www.marutsu.co.jp/pc/i/26920671/
¥6,460(税抜) K210用にはMicroPythonのloboris版もあるようです
https://github.com/loboris/MicroPython_K210_LoBo
K210でWiFiが使えるMaixduinoを買う場合に注意が必要なのは
MaixPyではWiFiアクセスポイントとしては使えないことと、
現時点ではSSLの通信に対応してないこと
Loboris版は試してないのでわかりません
K210は全モジュールで6MのRAMが載ってるので性能は高い
なお、大容量のヒープを使えるようにするのにはMaixPyv0.5.0以上が必要です
ヒープは
import Maix
Maix.utils.heap_size(1000000)
のように設定できます
あまり大きい値を設定すると起動できなくなります
ヒープサイズの設定はSPIFFSに保存されるので
空のSPIFFSイメージを書き込まないとリセットできませんので要注意です
Maix.utils.heap_size(4000000)
では起動できなくなりました MaixPyのヒープサイズの設定はリセットボタンを押してハードリセットした後で反映されます ESP32用のMicroPython lobo版は
→ MicroPython → Modules → SDK Enable framebuffer
→ MicroPython → Modules → Use Display module
→ MicroPython → Modules → Enable support for SPI TFT displays (NEW)
この3つにチェック入れてビルドすると
ST7789
ILI9341
ILI9488
ST7735
ST7735R
ST7735B
M5STACK
ssd1306
これだけのLCDに対応してる模様
試しにこれを買ってみました
HiLetgo® 2.8 "TFT LCDディスプレイ タッチパネル SPIシリアル240 * 320 ILI9341 5V / 3.3V STM32 [並行輸入品]
https://www.あまぞん.co.jp/dp/B072N551V3/ ちなみにMicroPython lobo版はWindowsではビルドできない模様
VMware上のUbuntu 18.04でビルドすると簡単にビルドできました
esp-idfやtoolchainはMicroPython lobo版の中に含まれているので
別途インストールする必要はありません
cd MicroPython_ESP32_psRAM_LoBo/MicroPython_BUILD
でディレクトリを移動して
./BUILD.sh menuconfig
を実行してパラメーターを設定して
./BUILD.sh -v
でコンパイル
./BUILD.sh erase
でFlashをクリア
./BUILD.sh flash
でFlashに書き込みです
./BUILD.sh erase
./BUILD.sh flash
は下記のようにシリアルのポートとスピードを指定できます
(VMwareから書き込みする際に指定する必要がありました)
./BUILD.sh -p /dev/ttyS1 -b 115200 erase
./BUILD.sh -p /dev/ttyS1 -b 115200 flash 必要なパラメータの設定は
→ Component config → mbedTLS → SDK (8192) TLS maximum message content length
これを16384に設定(これを16384にしないとSSLを使うと失敗する)
https://loboris.eu/forum/showthread.php?tid=61
→ MicroPython → Modules → SDK Enable framebuffer
→ MicroPython → Modules → Use Display module
→ MicroPython → Modules → Enable support for SPI TFT displays (NEW)
これらをチェック
→ MicroPython → Use OTA partition layout
のチェックを外す
→ MicroPython → File systems
SPIFFSを使用できるようにする(デフォルトでなってる模様)
PSRAM版は下記設定も必要
→ Component config → ESP32-specific → Support for external, SPI-connected RAM
をチェック
→ Component config → ESP32-specific → SPI RAM config → SPI RAM access method
をMake RAM allocatable using heap_caps_mallocに設定
→ MicroPython → System settings → MicroPython heap size (KB)
ヒープサイズを設定。デフォルトでは512になってます
(上限は3840で私の場合、3840にしました) Ubuntu 18.04ではaptでこれらを入れないとビルドできません
sudo apt-get install git wget make libncurses-dev flex bison gperf python python-serial
githubのURLは
https://github.com/loboris/MicroPython_ESP32_psRAM_LoBo lobo版をPSRAMのないESP32で試したところヒープが確保できなくて起動できませんでした
lobo版はPSRAM必須なようです
本家MicroPythonなら使えます
本家MicroPythonでgc.mem_free()を実行したところ
113200でした git clone https://github.com/loboris/MicroPython_ESP32_psRAM_LoBo.git
でまっさらな状態からやり直したところ、
PSRAMのないESP32でもMicroPython loboris版が使えました
パラメーターで変更した点は下記のみです
→ Component config → mbedTLS → SDK (8192) TLS maximum message content length
これを16384に設定
→ MicroPython → Modules → SDK [*] Enable framebuffer n --->
→ MicroPython → Modules → Use Display module
→ MicroPython → Modules → Enable support for SPI TFT displays (NEW)
の3つにチェックを入れる ビルド方法は
適当なディレクトリを作りその下で
git clone https://github.com/loboris/MicroPython_ESP32_psRAM_LoBo.git
を実行(ファイル容量は1GB以上あります)
cd MicroPython_ESP32_psRAM_LoBo/MicroPython_BUILD
でディレクトリを移動して
./BUILD.sh menuconfig
を実行
ここで上記パラメーターを変更します
./BUILD.sh -v
を実行してコンパイルをします
./BUILD.sh erase
を実行し、Flashの内容をクリア
./BUILD.sh flash
を実行しFlashにMicroPythonを書き込みます
./BUILD.sh -p /dev/ttyS1 -b 115200 erase
./BUILD.sh -p /dev/ttyS1 -b 115200 flash
のようにシリアルのポートと速度を指定することもできます
ハードリセット後のgc.mem_free()の結果は73504でした HiLetgo 2.8 "TFT LCDディスプレイ タッチパネル SPIシリアル240 * 320 ILI9341 5V / 3.3V STM32 [並行輸入品]
https://www.あまぞん.co.jp/dp/B072N551V3/
このLCDが届いたのでPSRAMのないESP32で使ってみたのですが
文字を表示したり、図形を描画したり、
SPIFFSに置いた50KBくらいの大きさの640x480のJPG画像の表示もできました
ただ、複数の画像を扱いたい場合はPSRAMがあった方がよさそうです
>>22のプログラムでダウンロードした画像をLCDに表示するようにしてみました
https://pastebin.com/9KpLk6bi
こちらは線を表示するdemoプログラムです
https://pastebin.com/yNCXbEqV PSRAMのないESP32でSPIFFSへのファイル転送を行うときは
uPyloaderは使わないほうがいいようです
途中でPCが固まることが何回かありました
ampyを使った方が無難です ampyはバイナリファイルの受信ができないようです
MicroPython loboris版ではymodemというモジュールがあって
これを使うとバイナリファイルの転送ができます
例えば、SPIFFSにphoto01.jpgというファイル名があった場合に
import ymodem
ymodem.send("Alice0.jpg")
と入力し、送信が始まったら
シリアルに接続してる通信ソフトからYMODEMでの受信を開始すればOKです
私はTeraTermを使ってるのですがTeraTermの場合は
ファイル→転送→YMODEM→受信をクリックします
するとTeraTermのプログラムがあるディレクトリにファイルが転送されます
送信は
import ymodem
ymodem.recv("photo01.jpg")
と入力すると受信待ちになるので
TeraTermのファイル→転送→YMODEM→送信をクリックし
送信したいファイルを選択します
すると送信が始まります >>40のプログラムでDC=17、Reset=16につないでいましたがどうやらPSRAMで使うようで
PSRAM付きのESP32では使えないようです
今後、もしILI9341互換LCDの出番があるときはDC=27、Reset=4でやっていこうと思います
tft.init(0, mosi=23, miso=19, clk=18, cs=5, dc=17, rst_pin=16, speed=40000000, bgr=True)
の部分は
tft.init(0, mosi=23, miso=19, clk=18, cs=5, dc=27, rst_pin= 4, speed=40000000, bgr=True)
でやっていきます ESP32のMicroPython Lobo版で
>>40のLCDの背面についてるSDカードスロットを使ってみました
LCDはmisoは19、LEDは3.3V、SCKは18、MOSIは23、DCは27、RESETは4、CSは5、VCCは3.3Vにつなぎます
SDカードの部分はSD_CSは13、SD_MOSIは15、SD_MISOは2、SD_SCKは14につなぎます
MicroPythonからのSDカードの使い方は
import uos
uos.sdconfig(uos.SDMODE_SPI, clk=14, mosi=15, miso=2, cs=13, maxspeed=8)
uos.mountsd()
この3行を実行すると
---------------------
Mode: SPI
Name: SA16G
Type: SDHC/SDXC
Speed: default speed (25 MHz)
SPI speed: 8 MHz
Size: 14772 MB
CSD: ver=1, sector_size=512, capacity=30253056 read_bl_len=9
SCR: sd_spec=2, bus_width=5
のように表示されてSDカードが/sdにマウントされます
uos.listdir('/sd')
を実行するとSDカードの中のファイルのリストを見ることができます
SDカードのアンマウントは
uos.umountsd()
になります
>>40のダウンロードした画像をLCDに表示するプログラムを
リストで指定したURLの画像を連続してダウンロードできるようにしてみました
MicroPythonはLobo版です。
(PSRAMのないESP32でもダウンロードできる画像を選んでみました)
https://pastebin.com/F85G6pL6 LCDの背面に付いてるSDカードスロットだと使いにくいので
これを買って付けてみました。使い方は全く同じです。
(VCCには5Vの電源をつなぐ必要があります
信号線は74VHC125のバッファをかませてあるようで5Vでも3.3Vでも使えます)
HiLetgo 3個セット Micro SD TFカードメモリシールドモジュール
Arduinoに対応 SPIマイクロSDアダプタ 6PIN
https://www.アマゾン.co.jp/gp/product/B010GXAFFU/
3個セットで500円だったのですが現在は品切れ中のようです もし、SDカードが認識されなかった場合はMOSI、MISO、CS、CLKの信号線を
10Kオームの抵抗で3.3Vでプルアップするといいかもしれません >>17をLCD表示するようにしてみました
ESP32のMicroPython Lobo版用です
https://pastebin.com/ZYDGEvYK CircuitPython 5.0のTeensy 4.0とMaixPy v0.5.0-22-g7ac6b09で
>>13のPiの計算の速度を計測してみました
CircuitPythonではutimeがなく時間計測にはtime.monotonic()を使うようです
CircuitPython用のPiの計算プログラム
https://pastebin.com/14GzFx6H
結果は
Maixduinoは5.517 秒
Teensy4.0は7.474 秒
Maixduinoの方が速い結果になりました
ArduinoでDhrystone 2.1で計測すると
Teensy4.0は2690347とMaixduinoより約2倍くらい速いのですが
MicroPythonではMaixduinoの方が速いようです MicroPythonとは関係ないですが
Teensy 4.0のDhrystone 2.1の結果はRaspberry Pi Zeroの2127659.5より速いです 先日、ESP32のmicropythonで素因数分解電卓作った。
10桁ぐらいの数も一瞬だからおどろいた。
すげぇな、ESP32。 ESP32は他のマイコンよりもRAMが多いからいいよね
特にPSRAM搭載のやつは4MB近くヒープを確保できる
PSRAM搭載のESP32-DevKitC-VBはmouserで税抜き1276円
ただし、mouserは税抜き送料6000円未満だと送料が2000円かかるけど
他のボード買うときについでにmouserでESP32-DevKitC-VBを買ってみたが
アメリカからの発送だった × 税抜き送料6000円未満
○ 税抜き6000円未満
mouserは税抜き価格で6000円以上だと送料無料
それ以下だと送料に2000円かかる ESP32は単体でWiFiが使えるのがいい点
単純な計算能力ならMaixduino、MaixBitやM5StickVの方が上で
デフォルトでLCD、カメラ、SDカードスロットが付いてる
6倍くらい計算能力が高い
MaixduinoはMicroPythonからオンボードのWiFiが使えるがSSLが使えないのが欠点
Maixduino、MaixBitはArduinoも使えるがMaixduinoのオンボードWiFiはArduinoからは使えない https://pastebin.com/s6ye07e3
この素因数分解のプログラムをやってみたら結果はこうなりました
ESP32 本家MicroPython PSRAMなし:17.811 秒
Teensy 4.0 CircuitPython 5.0:12.665 秒
Maixduino MaixPy v0.5.0-22-g7ac6b09:0.881 秒 ESP32やTeensy 4.0は32bitの範囲を超える値の演算をすると演算速度はかなり落ちますが
MaixPyは32bit以上64bit未満の値の演算をしても
32bit以下の値の演算の場合とほとんど計算速度がかわらないので
32bit以上64bit未満の値の演算は内部的に64bitの演算命令で計算してると思われます
なのでMaixPyは64bitの範囲の演算は32bitの他のCPUの場合よりもかなり速くなるようです 計算速度云々よりも
M5StickVのようにバッテリー内蔵でカメラ、LCDも付いてて簡単に持ち運べるようなのはいいね
WiFiも使えればさらに良かったけど
MaixPyはATコマンドのファームウェアを書き込んである8266をUARTでつなげば
とりあえず、MaixPyからnetwork.ESP8285を使うことでWiFiが使えるようにはなるね
(最新のファームウェアじゃないくて古いファームウェアの方がいいみたい)
ただし、MaixPyはSSLが使えないけど
もう一つ、Groveポートが付いてればよかったんだけどね ESP8266のATコマンドのファームウェアはここからダウンロードできます
https://www.espressif.com/en/support/download/at
私はMaixduino上のMaixPyで試したのですがESP8266でWiFi接続してサーバからデータを取ってくることはできました
使ったESP8266のファームウェアはESP8266 NonOS AT Bin V1.7.1です raspberry pi picoでmicropythonを始めてみました PicoのMicroPythonは本家のMicroPythonとの互換性は高いみたいだから
ESP32用のMicroPythonのプログラムでもピンの指定などをPicoに合わせて変更すれば
そのまま動く場合が多いよ
Lobo版のMicroPythonとは互換性は高くないので注意だけど
framebufモジュールを使うと画像の描画が可能です
ただし、framebufモジュールは円の描画には対応してないです
Raspberry Pi picoでMicroPythonでILI9341のLCDに画像を表示してみた例
RAMが足りなくて画面全体のframebuf用のバッファーを確保できなかったので
画面の一部分のみ(240x180)のバッファーを確保して描画してます
Raspberry Pi Pico MicroPython ILI9341 SPI demo random rect
https://pastebin.com/93EJpseN
Raspberry Pi Pico MicroPython ILI9341 SPI framebuf demo Cat
https://pastebin.com/RJrgtCFN 上のプログラムの猫の画像はGIMPでRGB565でC言語形式で出力したものを
C言語でPythonのソースコードで使えるように整形して出力したものです
GIMPなら保存形式にC言語ソース形式を選択してRGB565を指定すれば
普通の画像をRGB565に変換したデータ出力ができるので便利ですね >>61
なるほど参考になります
pimoroniのpicodisplayを組み合わせてるのでpimoroniバージョンのmicropythonを使ってます
>>62
gimpすごいな!
pngで書き出して自前のpythonスクリプトでRGB565に変換してました… wdt.feed() これ、効かないんだけど どうやってエサやるの? CircuitPythonって使いやすいね。Adafruitがしっかり管理してくれてる。しばらく遊んでみよっと。 わざわざ掲示板で聞くことがあるほど難しくないからね micropythonで書くとラズパイpicoもSTMもArduinoも使える? CircuitPython9.0.0 Beta1リリースですね