Espruino on ESP32 で Twitter(その1)
Espruinoで何か面白いことができないかなぁ~?とネット上を徘徊していると、
TI DSP ソフトウェア設計のファームロジックス | MicroPython + ESP8266 で、ネイティブ tweet bot を作る
というページを見つけました。
ESP8266上のMicropythonでTwitterに直接ポストする、というものらしいです。RasPiのようなLinuxマシンからアクセスしたり、Linuxマシン上のブリッジを介してにTwitterにアクセスするような記事は見かけるのですが、非Linuxマシンから直接というのはあまり見ません。
参照先では、ESP8266はRAMが少ないのでちょっとトリッキーな処理を行っていますが、ESP32ならRAMも豊富なのでらくしょーと思っていたら、そうもいきませんでした。
以下奮闘の結果です。
まずはEspruinoの改造です。
今回は修正量が多いのでパッチファイルを用意しました。このパッチファイルには前回までの修正内容も含まれています。
使用するには、 zipファイルを解凍してpatchコマンドでパッチをあててください。
以下に変更内容の抜粋を示します。
HMACSHA1のコンフィギュレーションフラグに関する変更です。
diff --git a/Makefile b/Makefile ~中略~ @@ -543,6 +557,10 @@ libs/crypto/mbedtls/library/sha1.c \ libs/crypto/mbedtls/library/sha256.c \ libs/crypto/mbedtls/library/sha512.c +ifdef USE_HMACSHA1 + DEFINES += -DUSE_HMACSHA1 +endif + ifdef USE_TLS USE_AES=1 DEFINES += -DUSE_TLS ~中略~
Heapメモリサイズの変更とHMACSHA1のコンフィギュレーションフラグに関する変更です。
何回かtweetする処理を行うとHeapメモリが不足するようなので、増やしておきます。
diff --git a/boards/ESP32.py b/boards/ESP32.py ~中略~ @@ -19,7 +19,7 @@ info = { 'espruino_page_link' : 'ESP32', 'default_console' : "EV_SERIAL1", 'default_console_baudrate' : "115200", - 'variables' : 5000, + 'variables' : 8000, 'binary_name' : 'espruino_%v_esp32.bin', 'build' : { 'optimizeflags' : '-Og', @@ -28,6 +28,7 @@ info = { 'NET', 'GRAPHICS', 'CRYPTO', + 'HMACSHA1', 'TLS', 'TELNET', 'NEOPIXEL',
HMACSHA1の処理本体とHMACSHA1のstaticmethodの定義です。
HMACSHA1の処理をjavascriptで記述すると、実行にかなりの時間がかかります。
そこで、nativeコードでEspruinoにbuil-in moduleとして組み込んで、処理時間の短縮を図ります。
内容は長いのでここでは省略します。上記のパッチファイルを参照してください。
「/* JSON {」から「}*/」で囲まれた部分はCプログラムからはコメントですが、Espruinoのbuilt-in moduleを作るのに必要な情報なので、省略してはいけません。
diff --git a/libs/crypto/jswrap_crypto.c b/libs/crypto/jswrap_crypto.c ~内容省略~ diff --git a/libs/crypto/jswrap_crypto.h b/libs/crypto/jswrap_crypto.h ~内容省略~
また、Linux版Espruinoでも同様のプログラムが実行できるように修正を入れてあります。その他のプラットフォームはいじっていません。
次回に続く。。。