いっぺーちゃんの いろいろやってみよ~

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の改造です。

今回は修正量が多いのでパッチファイルを用意しました。このパッチファイルには前回までの修正内容も含まれています。

Espruino_patch1.zip

使用するには、 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でも同様のプログラムが実行できるように修正を入れてあります。その他のプラットフォームはいじっていません。

 

次回に続く。。。