UMEHOSHI ITA TOP PAGE COMPUTER SHIEN LAB
esp32側をpythonでTCPサーバーにし、それを付けたUMEHOSHI ITA基板側のモータ制御ROM関数を呼び出してモータを動かす構成の紹介です。
これでPCからWifiを介し、esp32で次の制御を行います。
その制御は、ファイルの転送、esp32側のファイルリスト取得、Pythonファイルの実行です。
よって、Pythonファイルがモータ制御であれば、Wifiを介した遠隔でモータ制御ができます。
ロボットのハード構成は、こちらのページで紹介しています。
MicroPythonのインストールは、こちらのページで紹介している内容で行います。
これを行うには、UMEHOSHI ITAをスルーモードで行います。
この状態は、PCとUSBで接続してPC側の「Tera Term」のターミナルで、MicroPythonの会話モードが動作できます。
(UMEHOSHI ITAをスルーモードにする操作:
SW1とSW2を押し、SW1を離してLED1が消灯に変わるまでSW2を押す。約3秒)
UMEHOSHI ITAをスルーモードとは、接続したUSBでPCから送った情報がそのままUARTを介してESP32に送られるモードで、逆にESP32が出力した情報はPCへ送信されます。
この状態で、PC側のampyコマンドを使うことにより、ESP32へのファイル転送操作やESP32側でのpythonプログラムの実行ができす。
ampyの使い方は、こちらのページで紹介しています。
EEPROM化は、こちらのページで紹介している内容で行います
これを行うには、UMEHOSHI ITAをUART1コマンドモードで行います。
この状態は、UARTでUMEHOSHI ITAで、UART1やUSBで受信した'S'、'R'、'G'から始まる文字列命令「UME専用Hexコマンド」を処理できます。
(なおUMEHOSHI ITAをUART1コマンドモードにする操作は、
SW1とSW2を押し、SW1を離してLED1が消灯し、それから点灯に変わるまでSW2を押す。約4秒)
このROM化により、PCとUSBで接続してPC側の「Tera Term」のターミナルで
EEPROM内のエントリーポイントの文字列を送るだけで、対応する関数を起動できます。
例えば、「Tera Term」からEEPROMのブザーを鳴らすエントリポイントを実行する"R009D020D00003B"の文字列を送ると、
START:9D020D00の応答文字列で応答すると共にブザーが鳴ります。
R009D020D00003B
START:9D020D00
なお、ESP32の起動メッセージなど余計な文字列も表示されますが、それは無視してください。
このUMEHOSHI ITAをUART1コマンドモードでは、
ESP32がUMEHOSHI ITAをのUART1に接続されるため、
ESP32のMicroPythonのprintで出力した'S'、'R'、'G'から始まる文字列は
UMEHOSHI ITAの命令「UME専用Hexコマンド」として処理さているのです。
さて 上記操作は UMEHOSHI ITAをUART1コマンドモードにするために約4秒が必要になっていますが、
その待ち時間無しで初めからUART1コマンドモードで起動させます。
同時にエコーモードオフと、前述のEEPROM内の
モーターのPWM制御などの初期化関数AdrStart(0x9D020010番地)を行う次の関数を、ROM化します。
それには、次のコードをumehoshiEditの開発ツールで実行させます。
#include <xc.h> #include "common.h" #define BASE_FUNC 0x9D020000 // EEPROM領域配置用(パワーONでないリセット操作の実行アドレス) #define AdrEsp32Init (BASE_FUNC+0x1000) // ESP32 の初期化関数 #define AdrStart (BASE_FUNC+0x0010) // アプリの起動時の初期ルーチンのアドレス // ESP32 の初期化関数 起動アドレス:0x9D020000+0x1000=0x9D021000 // この0x9D021000を0x9D03fff4番地に記憶しておく予定。 // これで、パワーオン時でSW2(白)スイッチが押した時に実行する。 __attribute__((address( AdrEsp32Init ))) void Esp32Init(void); void Esp32Init() { _set_int_var(_SPECIFIED_flagEcho, 0); // エコー制御変数を0にして、エコーをOFFにする。 _set_int_var(_SPECIFIED_uart_command_mode , 1); // UARTコマンドモードに指定する変数を1。 _set_int_var(_SPECIFIED_mode_change_request , 1); // 上記コマンドモードへの変更要求 void (*func)(void) = (void (*)(void) )AdrStart;//モーター制御の初期化関数アドレスの設定 func(); // 上記モーター制御の初期化 }上記をumehoshiEditの開発ツールで実行することで、 「エコーOFF、UARTコマンドモード指定、モーター制御の初期化関数」を実行するEsp32Init関数が、0x9D021000番地のROM領域に書き込まれます。