趣味のマイコンいじり

安価なマイコンを利用して作成したアプリの紹介です。

"0.96" OLED diplay with MicroPython on the ESP-01

ssd1306のチップを利用した0.96インチのOLEDをESP-01のMicroPythonで
動かして見ました。MicroPythonのファームの中にssd1306の基本動作ライブラリ
が実装されていましたが、昔、Arduinoで行ったデモサンプルを実行させるには
足りない部分が有ったので、拡張のライブラリモジュールも追加作成して
行いました。コードはArduinoのものからの移植で対応できましたが、その過程で
MicroPythonを利用する場合のやり方も合わせて色々検討しました。表示させた
結果を見る限り、描画速度はArduinoのものの6~7割程度でMicroPythonでは
速度に対してはあまり期待できないのかと思いました。ただし、コードの
開発作業はコード中に書いてある例外処理での中断時のコメント表示がとても
有効で、それらを利用しながらとても簡単に行う事ができました。その時の状況は
次のものです。
 
<ESP-01へのMicroPythonの実装>
   ESP-01の動作サンプルで、LEDの点滅より少し複雑なものとして手持ちの
   0.96インチのOLEDの表示処理をArduinoのものから移植して、
   MicroPythonへのコード実装状況を確認して見ました。用意したものは次の
  3種類で、MicroPythonのファームウェアの書き込み、開発段階でのIDEへの
   接続および、実装したコードの動作をバッテリーで確認するものです。
   イメージ 1
 
   1.MicroPythonのファームウァアの書き込みは、ESP-01用の
         USB to Uart TTL を改造して利用(書き込みモード設定用に2つの
         タクトスイッチを付加)
   2.IDEへの接続には、汎用の安価はUSB to Uart TTLのボードを利用
   3.コード確認用の部品としては次のものを用意
        - ESP-01
        - ESP-01用アダプター
        - "0.96"OLED(ssd1306チップ)
        - リセット用のタクトスイッチ
        - 5V to 3.3Vの電圧降下レギュレータ

 [動作状況]
   
 
<関連資料>
    MicroPythonの公開先は次のURLです。
       URL : https://micropython.org/

     ESP32/8266の書き込みツール(esptool)は次のURLです。
       URL : https://pypi.org/project/esptool/

     利用した開発用IDE(uPyCraft)は次のURLです。
       URL : https://dfrobot.gitbooks.io/upycraft/content/

     ESP32/8266のMicroPythonによるLED点滅テストの記事はこちらです。


<開発環境>
 [ファームウェアの書き込み]
   開発したモジュールのコードはファームウァア上で行う為、ファームウェア
   書き込み後は、書き込みモードへの設定は必要有りませんが、ファームウェア
   そのものの書き込みに対してはESP8266のチップの書き込みモードの設定が
   必要です。ESP-01にはチップを書き込みモードに設定する為の外部回路が
   付いてないのでその為のスイッチを以下の様にESP-01用の
  「USB to Uart TTL」のボードに付けて対応します。
    イメージ 2
    1.RST, GPIO0のポートがGNDと短絡できる様に2つのタクトスイッチを
          ONにする
    2.チップの書き込みモードには、チップのリセット直後のGPIO0の状態に
          よって設定されるので、RSTのスイッチの開放後に少し時間を置いて
           GPIO0のスイッチを開放すれば可能


   <ファームウェアの書き込み動作>
    イメージ 3
 
   3.書き込みを行うファームウェアは、次のURLからダウンロードしたものを
         利用       URL : http://micropython.org/download
       (IDEからのものは、".mpy"への対応不可で、"ssd1306.py"の基本
          モジュールの実装がない)
   4.ファームウェアの書き込みは、"esptool.py"もしくは"uPyCraft"のIDEから
         行う事ができ、ESP-01の場合は、チップのメモリ消去と書き込みに時に、
         それぞれマニュアルで書き込みモードに設定する必要が有る。
    5.ファームウェアの書き込みが終了したら、RST端子に接続されている
          タクトスイッチのみを一旦オン/オフして、書き込みモードを解除する。
         (そのままにして、取り外しもしくは書き込みツールの電源をオフすると、
            ノイズにより不要な書き込みが行われる場合が有る。)
    6.ファームウェアの書き込みが終了した状態は、IDEに接続して、REPLの
          プロンプト「>>>」が出る事で確認できる。

 [アプリケーション開発用の接続]
   アプリケーションモジュールの開発は次の構成で行います。
    イメージ 4
 
    イメージ 5
 
    IDEおよびバッテリーとの接続状態は次の様になります。
    イメージ 6
 
 [モジュールのダウンロードと実行]
   開発したモジュールのチップ上へのダウンロードと実行は次の様に行います。
    イメージ 7
    1.開発したモジュールを一つづつIDEの"device"フォルダにドラッグアンド
          ドロップしてダウンロードする。
    2.ダウンロードが完了したら、IDEの"device"フォルダ内の実行モジュールを
         選択してマウス右クリックのプルダウンメニューから"run"を指定する。


  [".mpy"モジュールの作成]
   チップ上のRAM容量の消費を少し抑える方法として、PCのPythonによる
   クロスプリコンパイルしたモジュールの".mpy"フォーマットの利用がサポート
   されています。".mpy"モジュールを".py"モジュールから変換してチップへ
    ダウンロードするには、次の2つのモジュールをPC上のPythonへインストール
   する必要が有ります。
    イメージ 8
    イメージ 9

  [".py"と".mpy"の違い]
   ".py"と".mpy"でのチップ内のRAMの消費量の違いは次の様になっていました。
    ESP8266の場合は、僅かな節約の様です。
    イメージ 10
 
  [".mpy"の作成とダウンロード]
   "uPyCraft"では、バイナリーファイルのダウンロードには対応していない様で、
    ダウンロードには、次の様に一旦IDEのUartの接続を切り離して、上記のPC上の
    Pythonのモジュールを利用して行います。
    イメージ 11
 
  [関連モジュールの更新]
    複数のモジュールで実行を行う場合、実行モジュールから参照している
    モジュールを変更して新しものに置き換えても、RAM上に展開されている
    中身には反映されず、そのままではコードの変更状況の確認はできない様です。
    そのための対応としてPCのPythonには"importlib"モジュールの"reload()"が
    用意されていますが、MicrpPythonには該当するものが見つからず、次の
    いずれかの方法で対応しました。
    イメージ 12
 
  [コード類]
     Code download URL :