趣味のマイコンいじり

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

ESP8266::MicroPython 簡単な2WDロボットカーの制御

<MicroPythonでのDCモータコントロール
       ESP8266のボード上でのMicroPythonのコードによるDCモータの制御を
       検討して見ました。コントロールの対象を、2WDのロボットカーとし、
       先に検討したWebSocketのモジュールを利用すればスマホからのWiFi
       コント―ルで簡単に行える事が判りました。その様子は次の様な
       ものでした。

 [システム]  

      f:id:I_Satoh:20191023175734p:plain

 [主要部品]

     f:id:I_Satoh:20191023175855p:plain

 [構成]  

      f:id:I_Satoh:20191023180010p:plain

       1.ESP8266の基板はWeMos D1 mini のクローンを利用
       2.2WDのロボットカーのシャーシは中国製のキットを利用
       3.DCモータ駆動用のHブリッジは L9110 を利用
       4.ESP8266が取得したIPアドレスの表示用に0.96"のOLEDを利用
       5.駆動用の電源は、Ni-MHを4本(1.2Vx4)にして対応
       6.DCモータ駆動時の電圧低下補正用にステップアップコンバータを
              利用

 [動作状況]

      
 

<テスト内容>
  DCモータの制御動作の検証に関しては次の事を目標としました。

      1.PWM出力を利用する事で速度と回転方向の制御ができる事を確認
      2.PWMの出力周波数に関しては、速度が50%以上では100Hz、
             50%以下では10Hzとする事で、広い範囲の速度制御ができる
              事を確認
      3.WiFiを利用して、スマホのブラウザからロボットカーを制御する
             状況を確認

     結果としては、ほぼ期待通りの制御ができる事を確認しました。ただし、
     左右のモータのバランスが思った以上に悪く、しかも、前進と後退で
     様子が大きく異なった為、前進用と後退用にそれぞれバランス調整を
     ける必要が有りました。でも、他のアプリにも十分利用可能で有る
     事は判りました。

 [機器の接続] 

       f:id:I_Satoh:20191023180607p:plain

 [コントロール画面]
     ブラウザは iPhoneSafari  

      f:id:I_Satoh:20191023180745p:plain

 [コードモジュール構成]
     モジュール内の「.mpy」と「.html」ファイルのデバイスへの
      ダウンロードには adafuit-ampy を利用 

       f:id:I_Satoh:20191023180940p:plain

 [コードの設定]
    「main.py」内のSSIDとそのパスワードの部分を、利用しているWiFi
      ものに変更して対応

       f:id:I_Satoh:20191023181120p:plain

    [コードダウンロード]
      Code download URL : https://drive.google.com/open?id=1-NHkzlk3gOZu6pSvjlVYz9XJ2Vdmy42B

 

STM32F103C8での1.8インチLCD高速描画処理

<KMR-1.8 高速描画処理の概要>
      以前、STM32F103C8ボードでの動作を検討した「KMR-1.8 SPI LCD」の
      高速描画対応を行ったのものを検討して見ました。その時の状況は次の
      様なものでした。

       f:id:I_Satoh:20191023153724p:plain

       1.LCDの解像度は128x160で、5/6/5の16bitsカラーで使用
       2.LCDのコントローラはST7735でSPI制御方式
       3.標準のSDカードスロットでカード端子とスロット端子は直結
       4.電源電圧は今回3.3Vで使用
       5.SDカード用とLCD用のSPIは別々の端子を利用
       6.SDカードからのデータ読み取りとLCDへの描画データの転送には
              DMAを利用

 [動作状況]  

     

 

<関連資料>
       システム構成はこちらのものを利用しました。

<テスト内容>
       今回のテストは高速描画を行う方法の検討で、以前行ったMotino-Jpeg
       の時に検討したシステムを利用して描画をさせて見ました。

 [目的と結果]
      テストの確認目標は次のものでした。
       1.Motion-Jpegの時に検討したシステムでの描画処理を確認
       2.動きのある描画処理での見え方を確認

      結果としては、次の様な状況で、ほぼ期待通りの高速化を実現
      させる事ができました。
       1.通常の描画処理も同じコードで対応可能でした。
       2.動きの有る描画処理は、多少フリッカが気になりますが、
              実用的には問題ない事が判りました。

      以上の様な状況で、高速描画もほぼ期待通りに実現出来る事が
      判りました。

 [テストでの機器の接続]

      f:id:I_Satoh:20191023155041p:plain

       f:id:I_Satoh:20191023155138p:plain

 [コードの構造]

      f:id:I_Satoh:20191023155322p:plain

 [KMR-1.8 SPI LCD アクセス方法]   

      f:id:I_Satoh:20191023155540p:plain

 [テストSDの内容]

      f:id:I_Satoh:20191023155702p:plain

 [コード類]
      今回も、コードの開発にはSW4STM32のシステムを利用しました。
  (STM32F103C8ボードののコード開発に 関してはこちらの記事
          参照して下さい。)

       Code download URL : https://drive.google.com/open?id=1lPVg4vxUy2DVPeAPz23busg7ChX94A7L

 

ESP8266::MicroPython 1.44/1.8インチ ST7735ディスプレイ表示

<MicroPythonでのST7735コントロール
      ESP8266のボード上でのMicroPythonのコードによるST7735のLCD
      表示を検討して見ました。コントロール用のライブラリモジュール
      としては、Arduinoのものを移植して行いました。結果としては、
      MicroPythonを利用した場合には処理速度がかなり遅くなる様で、
      実用的な描画速度は実現できませんでしたが、その様子は次の
      様なものでした。 

        f:id:I_Satoh:20191023151143p:plain

        1.LCDの解像度は1.44インチは128x128で1.8インチは
               128x160のフルカラー(今回はAdafruitと同じく565の
               16bitsカラーで利用)
        2.LCDのコントローラはST7735でSPI制御方式
        3.電源電圧は、1.8インチは5Vで1.44インチは3.3Vで使用
        4.ライブラリモジュールはAdafruitのArduino用ものを
               MicroPython用に移植して利用
        5.MicroPythonのボードはESP8266のWeMos D1 mini を利用

 [動作状況]     

     
 

<テスト内容>
  ST7735LCDの動作検証に関しては次の事を目標としました。

      1.ST7735のLCDをESP8266のMicroPythonで動作させた時の
             状況を確認
      2.ライブラリモジュールとしてArduino用のものを移植可能か
             どうかの確認
      3.その状態で、このLCD駆動用のサンプルコードを
              作成して見る

     結果としては、オリジナルの移植元のコードが大きかったので、
     描画用の沢山の関数から必要なもののみを選択し、ホストで
     コンパイル済みのmpy形式に変換して利用すれば、ESP8266の
     MicroPythonでも利用可能な事が判りました。(文字の表示、
     直線、円、四角の描画の関数を選択)また、このLCDでは描画を
     ドット単位で行う為、描画用に大きなRAM領域を使用する事なく
     複雑な描画が可能で有る事も判りました。ただし、MicroPython
     上で動作させると描画速度が非常に遅くなり、余り実用的でない
      感じを受けました。

 [機器の接続]    

     f:id:I_Satoh:20191023151930p:plain

       f:id:I_Satoh:20191023152036p:plain

      

       f:id:I_Satoh:20191023152109p:plain

 [コード実装状況]

       f:id:I_Satoh:20191023152224p:plain

    [コードダウンロード]
  Code download URL : https://drive.google.com/open?id=1YY0catejcR4Fw8eEMI2DtrcQutG7ywzW

 

 

ESP8266::MicroPython Websocket test

<MicroPythonでのWebSocket test>
     ESP8266のボードでArduinoIDEを使った時のWebSocketのテストを
     以前行いましたが、今回は、MicroPythonを使ったものを検討して
     見ました。ただし、Arduinoの場合と違って利用できるライブラリーの
     種類が一つしか見つからず、しかも、そのままでは自宅の家庭の
     WiFiでは利用できないものでした。その為、公開されているライブラリ
     モジュールの修正から検討し、取り敢えずArduinoの場合と同等に
     動かす事ができる様になりました。その様子が以下のものです。

 [構成]
     f:id:I_Satoh:20191023102054p:plain

      f:id:I_Satoh:20191023102253p:plain

     1.ESP8266のボードはWeMosD1-mini (クローン)を使用
     2.表示は0.96"のOLED(ssd1306)を使用
     3.ブラウザはiPhoneSafariを使用
     4.コントロールターゲットは次のものを用意
            <ブラウザ ---> ボード>
             - 赤色LEDのオン/オフ
                - 緑色LEDの明るさ調整
             - サーボコントロール(SG90)の制御
                - メッセージの転送
            <ボード ---> ブラウザ>
               - スイッチの状態表示
               - ポテンショメータのA/D変換値の表示
               - Rangeセンサーの計測結果の表示
               - 温度センサーの計測結果の表示


 [動作状況] 

     

<関連資料>
      MicroPythonの公開先は次のURLです。
          URL : https://micropython.org/

      利用したMicroPythonのファームウェアは以下のものです。
          esp8266-20190125-v1.10.bin

      WebSocket モジュールライブラリは次のものを修正して利用しました。
          URL : https://github.com/BetaRavener/upy-websocket-server

<開発環境>
 [ライブラリモジュールの変更]
     公開されているWebSocketで利用できそうなものは上記の
    「upy-websocket-server」しか見つからず、しかもサンプルコードを
     そのまま利用すると自宅のWiFi上では次の問題が発生して、利用
     できない事が判明しました。

       1.Clientのブラウザと非常に繋がりにくい。
       2.一旦繋がっても、直ぐに接続がクローズの状態となる。
              (サンプルでは、1回通信するのみなので問題なし)
       3.ブラウザのページをリフレッシュすると3回目から繋がらなくなる。
       4.上記の問題を解決して通信が継続する様にしても、時々動作が
              停滞する事がある。

      その為の対策として、次の様に処理を変更、追加しました。

       1.壊れた接続データの確認の為、データ解析を行う為に、
               タイムアウト付きの予備のデータ解析を付け加えた。
       2.接続がクローズ時のステータスの値が違っていたので、
              自宅のものに合わせた。
       3.同じブラウザからの再接続をチェックし、再接続の時は
               前のものと入れ替える様にした。
       4.通信が時々停滞する問題に関しては、まだ未解決

       具体的なコード修正箇所は次の様になります。

       f:id:I_Satoh:20191023103241p:plain

       f:id:I_Satoh:20191023103419p:plain

 [WeMosD1-mini ピン割り付け]
      WeMosD1-miniは基板上にArduino互換の番号が付けられており、
      基板上のピン名とESP8266チップのピン割り付けの関連が次の
      様になり、コードはこのESP8266のチップのピン割り付け番号を
      利用する事になります。     

      f:id:I_Satoh:20191023104026p:plain

 [コードのダウンロードと実行]
      コードのダウンロードと実行は次の様に、一つずつファイルを
      ドラッグアンドドロップでチップ内にダウンロードして、
      ダウンロードが終了したらREPLコマンドでCtrl+Dを打ち込んで
      リブート実行させます。

       f:id:I_Satoh:20191023104243p:plain

[コード類]
Code download URL : https://www.dropbox.com/s/xjzg0usou9rxior/MicroPyton_WebSocket_test.zip?dl=0

 

 

スマートフォンによる簡単な2WDカーのコントロール

スマホアプリによる2WDモータカーコントロール
     スマートフォンBluetoothアプリを使って、2WDのロボットカーの制御を
     検討して見ました。スマートフォンのアプリとしては、AndroidiOS
     同じものを提供している2種類を選び、その2種類が同一のソフトで対応
     可能なものにして操作上の違い等も確認しました。その時の、状況は次の
     様なものでした。

   [スマートフォンアプリ]
    スマートフォン側のアプリとしては、Android/iOS両方に同じものが有る
    次の2つを利用しました。

     f:id:I_Satoh:20191022151404p:plain

 [主要部品]
     使用した部品としては下記のもので、長方形の車体にはSTM8S103Fを
     円盤型の車体にはArduino Pro Miniをそれぞれ使用しました。

  f:id:I_Satoh:20191022151734p:plain

 [構成]
     部品を取り付けた状態の車体はそれぞれ下記の様になりました。

     f:id:I_Satoh:20191022151926p:plain

     1.コントロールスマホのアプリとしては、BLEJoystick と
            LOFI control を使用
     2.2WDの車体としては、長方形と円盤型のものを使用
     3.CPUとしては、長方形の車体にはSTM8Sを円盤型には
             Arduino Pro Miniをそれぞれ使用
     4.DCモータ駆動用のHブリッジは L9110 を利用
     5.Bluetooth-4.0のデバイスとしてはHM-10を利用
     6.駆動用の電源は、Ni-MHを4本(1.2Vx4)にして対応
     7.DCモータ駆動時の電圧低下補正用にDC to DC の
            ステップアップコンバータを利用

 [動作状況] 

     
 

<テスト内容>
  動作の検証に関しては次の事を目標としました。

     1.Bluetooth-4.0のデバイスHM-10とのインターフェイス
             動作を確認
     2.2つのスマホアプリからのデータ出力のフォーマットを
             確認
     3.スマホのアプリを利用してロボットカーを制御する状況を
            確認

     結果としては、ほぼ期待通りの制御ができる事を確認しました。
     ただし、2つのアプリで走行方向制御の方法が異なる為、操作に
     関しては好みがあるかと思いました。また、Bluetooth-4.0が
     簡単に利用できる事も確認できました。

 [機器の接続]

     f:id:I_Satoh:20191022152920p:plain

     f:id:I_Satoh:20191022153012p:plain

 [Bluetoothバイスとの接続]
     Bluetoothバイス HM-10 のアクセスに関しては、下記の様になっていて、
     HM-10のBluetoothの無線接続が無効の場合、CPUとHM-10間のATコマンド
     が有効となりBluetoothの無線接続が行われている場合は、無線接続
     デバイスとのやりとりとなっています。その為、ATコマンドを有効に
     するためのスイッチ等は付いていません。 

      f:id:I_Satoh:20191022153306p:plain

      有効なATコマンドの種類に関しては、Bluetooth無線接続が無効の状態で、
      HM-10に"AT+HELP"のコマンドを送れば、有効なコマンドのリストが
      返送されます。    

         f:id:I_Satoh:20191022153542p:plain

 [Applicationからの出力]
    2つのスマホのアプリケーションのデータ出力はそれぞれ異なっており、
     BLEJoystickでは1バイト毎に、LOFI controlでは画面上の6個の
     アイテムをひとつにまとめて、12バイトのパケットで送っています。
     また、LOFI controlではアイテム毎に2バイトを割り付けており、
     最初のバイトがアイテム識別用で、次がアイテムのデータとなって
     います。   

     f:id:I_Satoh:20191022153848p:plain

      f:id:I_Satoh:20191022153933p:plain

 [ホイールの交換]
     もともと付いている駆動部分以外のホイールでは、前進と行進を切り
     替えると、車体が大きく振れるので、下記の様な別なものと交換しま
     した。これにより、前進と行進の切り替え時の振れは止める事が
     できました。

     f:id:I_Satoh:20191022154200p:plain

 [DCモータ制御用PWM]
      車輪用のDCモータの駆動に関しては、モータ毎に2つの出力ポートを
      用意し、1つはレベルをもう一つはPWMとして、モータの電源を
      コントロールする様にしています。なお、CPU全てのポートがPWM
      出力用にできる訳ではないので、回転方向の切り替えに関しては、
      それぞれのポートの極性を切り替える方法で対応しています。また、
      PWMに関しては、モータの起動に、有る程度の時間と電圧が必要と
      なるため、低速時にはPWMの周波数を下げています。ただし、
      そのままではガタガタするので、目標速度に応じて、PWMの周波数も
      動的に変える様にしました。

       f:id:I_Satoh:20191022154539p:plain

      f:id:I_Satoh:20191022154624p:plain

 [CPU基板の電源]
     DCモータを駆動すると、モータの負荷により電源電圧が低下し、
     CPU等が暴走状態となる場合があるので、DC to DCのステップ
     アップコンバータを使って、CPU関連のデバイスの電源電圧を
     保証する様にしています。    

    f:id:I_Satoh:20191022154835p:plain

 [コードの書き込み]
     それぞれにCPUのコード書き込みに関しては、下記の様に行いました。
      なお、STM8S103Fに関しては、IDEを使わないでライターブログラムで
      Hexコードを書き込む事で対応できます。 

      f:id:I_Satoh:20191022155028p:plain

      f:id:I_Satoh:20191022155127p:plain

 [コードの構成]
      STM8S用に関しては、Arduinoのコードを少しの変更で利用できる様に、
      ラッパーを用意し、それにより、メインの部分はほぼそのまま使える
      様にしています。     

      f:id:I_Satoh:20191022155352p:plain

      f:id:I_Satoh:20191022155445p:plain

   [コードダウンロード]

     Code download URL : https://drive.google.com/open?id=1uAgdqboBhSCWWrrdcUTOZzy8lqJpobLc

 

 

rive.google.com

 

ESP8266::MicroPython Stepperモータカーコントロール

<MicroPythonでのStepperモータコントロール
   ESP8266のボード上でのMicroPythonのコードによるステップモータの制御を
   検討して見ました。コントロールの対象を、2WDのロボットカーとし、先に
   検討したWebSocketのモジュールを利用すればスマホからのWiFiコント―ルで
   簡単に行える事が判りました。その様子は次の様なものでした。

  [システム]

     f:id:I_Satoh:20191022124549p:plain

  [主要部品]

  f:id:I_Satoh:20191022124738p:plain

 

  [構成]

  f:id:I_Satoh:20191022124844p:plain

   1.ESP8266の基板はWeMos D1 mini のクローンを利用
   2.モータドライバはA4988をトを利用
   3.モータには28BYJ-48をバイポーラ型に改造して利用
   4.ESP8266が取得したIPアドレスの表示用に0.96"のOLEDを利用
   5.駆動用の電源は、Ni-MHを4本(1.2Vx8)にして対応
   6.DCモータ駆動時の電圧低下補正用にDCtoDCの
          ステップアップコンバータを 利用

  [動作状況]

    

 

<テスト内容>
  モータの制御動作の検証に関しては次の事を目標としました。

     1.ドライバのA4988を1ポート出力で速度と回転方向の制御が
             できる事を確認
     2.WiFiを利用して、スマホのブラウザからロボットカーを
            制御する状況を確認
     3.Webページ上に動作シーケンスのリストを組んで、
            プログラム走行ができるのを確認

     結果としては、ほぼ期待通りの制御ができる事を確認しました。ただし、
     モータの回転が非常に遅いため、大きなタイヤを付けてそれをカバー
     する事を試みましたが、もう少し速度が欲しいと良いと思いました。

 [機器の接続]

    f:id:I_Satoh:20191022125355p:plain

  f:id:I_Satoh:20191022125439p:plain

 [モータドライバ制御]
     ステッパーモータドライバのA4988は、回転方向と回転のためにそれぞれ
    1ビットが必要で、1モータを2ビットで制御するインターフェイス
     なっていましたが、次の方式にする事で、1ポートのパルス極性で、
     回転方向と回転速度を制御できる様にしました。

      f:id:I_Satoh:20191022125742p:plain

       f:id:I_Satoh:20191022125943p:plain

     [電源システム]
      ステッパーモータドライバA4988のモータ用電圧は8V以上なので、
      CPUボード用の電源に更に別の電源を積み上げて、モータ用の電圧を
      上げる方式としました。また、モータがオンするとモータの電流により、
      そのままではCPUボード用の電圧も影響を受けて下がるので、以下の
      様に電圧低下を補うためのDC to DCのステップアップコンバータを
      利用しました。 

       f:id:I_Satoh:20191022130319p:plain

       f:id:I_Satoh:20191022130420p:plain

 [モータの改造]
     今回利用したステッパーモータは、ユニポーラタイプですがドライバの
     A4988はバイポーラ用のものなので以下の様な改造をして、バイポーラ型に
     改造しました。

     f:id:I_Satoh:20191022130720p:plain

 [オリジナルタイヤの取り付け]
     今回利用したステッパーモータは、減速比が大きくて回転速度がとても
     遅い為、ロボットカー用のモータとしては余り適していません。その為、
     大きなタイヤを取り付ける必要が有り、100円ショップで売られていた
     盆栽用の皿を利用しました。その取り付けは以下の様に行いました。

     f:id:I_Satoh:20191022131317p:plain

     f:id:I_Satoh:20191022131415p:plain

      f:id:I_Satoh:20191022131506p:plain

 

 [走行パラメータ]
     走行リストに左右のモータの速度(%)と走行時間を入力して、
     動作シーケンスリストに追加すれば、プログラム走行ができる様に
     しました。その時の走行パラメータに関しては、以下の様に計算しました。 

      --- 最大速度の計算 ---
        f:id:I_Satoh:20191022131815p:plain

      --- 回転走行の計算 ---

     

     f:id:I_Satoh:20191022132039p:plain

 [制御用のWebページ]
     MicroPpythonでは、Htmlファイルをそのまま扱えるのでとても便利です。
     今回作成したWebページは下記のもので、最初のものがページ全体で、
      ページはマニュアルコントロールとプログラムコントロールの部分から
      できていて、その次のものが、各々のコントロール部分を表したものです。

      --- 全体 ---

     f:id:I_Satoh:20191022133043p:plain

           f:id:I_Satoh:20191022133132p:plain

           f:id:I_Satoh:20191022133225p:plain

    [コード関連]
     実際のWiFiへのアクセスには、使っているネットワークのパラメータを
     コード上に記述する必要が有り下記の様に、その部分を変更する必要が
     有ります。 

     f:id:I_Satoh:20191022133520p:plain

    [コードダウンロード]

      Code download URL : https://drive.google.com/open?id=1V6OMweu8FtSdqbxJ2c6jOjJVD5gEB5uy





 

 

 

 

       

"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 :