UMEHOSHI ITA TOP PAGE COMPUTER SHIEN LAB
以下で示す部品の追加は、一つの例です。必ずこうしなくてはならないという訳ではございません。
また、[UMEHOSHI ITA]へ何を追加して、どう使うかは自由です。
最終的な安全性や信頼性は、ご利用者の責任で追加部品などを選定し、ご利用者の判断でお使いくいださい。
「UMEHOSHI ITA」ににESP32-WROOM-32Dを取り付けても、
ESP32-WROOM-32Dの全ての端子を引き出して使えるようになる訳ではありません。
(またESP32-WROOM-32Dの全能力を引き出せるものでもありません。)
「UMEHOSHI ITA」は一部の端子だけをCN11とCN12を介して引き出し、そこに別途の自作基板を取り付けて、
少しだけ利用することを想定しています。
ESP32を付けた後のデフォルトでの動作は、
ビルトイン BASIC が起動します。
なお、ESP32-WROOM-32Dの内部プログラム(フラッシュメモリ)をパソコンから書き込み変更したい場合、
IO0(General-purpose input/output-0)をLOWにしての起動のモードで書込みを行う仕様になっていますが、
このIO0の端子は開放状態です。
よって簡単にはESP32-WROOM-32Dの内部プログラム(フラッシュメモリ)を変更できません。
ですがIO0の端子は裏面でT6のシルクのスルーホールと繋がっており、
これとCN12の5(開放端子)と直接にワイヤーで半田付けすれば、
CN11とCN12に取り付ける拡張基板でIO0の端子を操作できます。
その拡張基板でボタンを付けて、起動時の手動操作でIO0の端子を一時的にLOWに
できればESP32のプログラムを変更でます。
(MicroPythonなどが動作可能です。)
上記で示したCN11とCN12は 2mmピッチ10ピンで、マイクロコントローラ (PIC32MX270F256B-50I/SP)
のURAT(Universal Asynchronous Receiver/Transmitter)用端子と繋がっています。
このページでは、U19にESP32-WROOM-32Dを取り付け例を示しています。
(この資料は、「esp_wroom_32_datasheet_en.pdf」です。)
U19に取り付けたESP32-WROOM-32Dの端子の一部がCN11とCN12の端子に繋がっています。
そしてESP32-WROOM-32DのU19端子は次のように繋がります。
U01は、マイクロコントローラ :PIC32MX270F256B-50I/SP です
U19のESP32-WROOM-32D | 繋がり情報 (U01のPIC32MX270F256B-50I/SPなどの端子) | 備考 | |
---|---|---|---|
ESP32端子番号 | ESP32端子意味 | ||
U19-1,15,38 | GND | [UMEHOSHI ITA]のGND | |
U19-2 | 3V3 | [UMEHOSHI ITA]のVCC | |
U19-3 | EN | S2を介してU01-1 MCLR, そしてSW1のRESET | |
U19-14 | IO12 | U01-16 RB7(INT0)入力, そしてSW2や赤外線受光LINE | SW2のOFF起動でビルトイン BASICが起動 |
U19-16 | IO13 | JMP11-OPENスルーホール、他方はU01-17 CTSの入力 | |
U19-36 | IO22(RTS) | CN11-7 | |
U19-23 | IO15 | JMP10-OPENスルーホール、他方はU01-18 RTCの出力 | |
U19-31 | IO19(CTS) | CN11-1 | |
U19-25 | IO0 | 未接続(続裏面シルク T6) | (起動時Lowで書き込みモード) |
U19-34 | RXD0 出力 | U01-11 TX シリアル出力 | |
U19-35 | TXD0 出力 | U01-12 RX シリアル入力 |
ESP32-WROOM-32DのIO12はSW2に繋がっており、SW2を押さないで電源を入れると、
シリアルへ Enter 送信でビルトイン BASIC が起動します。
なお、IO15が開放なので「HIGH」となってシリアルへブートログを繰り返し出力します。
[UMEHOSHI ITA]のデフォルトプログラムでは、このブートログ出力を止めるために、起動後の2秒経過のタイミングで
シリアルへ "\r\n"の改行を 送信をしています。
そしてUSBでターミナルソフト(Tera Termなど)により、BASICのプログラムが可能です。
下記が「2mmピッチピンヘッダ 1×10[PH2-1x10SG(4.0/2.8)][C-08978]」です。
必ず取り付けなければならない部品ではないのですが、ESP32-WROOM-32Dの一部の端子と繋がっており、
ESP32-WROOM-32Dを利用した時、このコネクタを介した拡張基板を取り付けできるようにするものです。
(下の赤マークが取り付け位置です)
参考:概要 ht-deko.com
エスプレッシフ社(www.espressif.com)
上記のESP32-WROOM-32Dとマイクロコントローラ (PIC32MX270F256B-50I/SP) は、
URAT(Universal Asynchronous Receiver/Transmitter)端子で繋がっており、非同期式で送受信できます。
(下の赤マークが取り付け位置です)
CN12 | ESP32-WROOM-32D端子名 | PIC32MX端子No:名 | - | CN11 | ESP32-WROOM-32D端子名 | PIC32MX端子No:名 |
---|---|---|---|---|---|---|
CN12-1 | 2: 3V3 | 13: VDD | CN11-10 | 11: IO26 | ||
CN12-2 | 35:TXD0 出力 | 12: RX (RA4) 入力 | CN11-9 | 10: IO25 | ||
CN12-3 | 34:RXD0 入力 | 11: TX (RB4) 出力 | CN11-8 | 37: IO23 | ||
CN12-4 | 6: IO34 | CN11-7 | 36: IO22(RTS) | |||
CN12-5 | 未接続 | CN11-6 | JMP10-OPEN-U19-23: IO15 | 18: RTS (RB9) 出力 | ||
CN12-6 | 7: IO35 | CN11-5 | 33:IO21 | |||
CN12-7 | 8: IO32 | CN11-4 | 5: SENSOR_VN | |||
CN12-8 | 9: IO33 | CN11-3 | 4: SENSER_VP | |||
CN12-9 | 12: IO27 | CN11-2 | JUM11-OPEN-16: IO13(注1) | 17: CTS (RB8) 入力 | ||
CN12-10 | GND | 19: Vss | CN11-1 | 31: IO19(CTS) |
上記で取り付けでESP32-WROOM-32DのUART0のシリアル入力が、
PIC32MX270F256B-50I/SPの URAT1 に繋がます。
そして、テスト用プログラム(「テスト・ウメ・フラッシュ」)には
「Throughモード」と呼ぶ状態があり、そのモードでUSBに接続したPCからターミナルソフトでESP32-WROOM-32Dへの文字列送受信ができます。
(「Throughモード」では、USB経由で「UMEHOSHI ITA」へ送ったデータが、そのままURAT1 へ送られるようになります。
また逆ににURAT1から受信したデータは「UMEHOSHI ITA」を介してUSBより受信できるようになります。)
ESP32において起動モードを決定するピンは、次の箇所です。
●「IO12」がSW2にのラインに繋がって、起動時にHIGHTになってため、
『シリアルへ Enter 送信によりビルトイン BASIC が起動しています。』
●「IO15」はHIGHTになってため、起動時にシリアルへのブートログ出力状態になっています。
●起動時に「IO0」がHIGHTになっているとプログラム実行時の「SPI Flash Boot Mode」で、
LOWになっていると、プログラム書き込みの「UART Download Mode」になる。
この「Throughモード」へは"T\r\n"の受信により移行します。
このモードはリセットするまで持続します。
この実験は、
PC側で「Tera Term」というターミナルエミュレータを別途にインストールして確認するのが簡単です。
(お薦めはTeraTerm ポータブル版です。)
まず次のイメージで、PCと接続して、「Tera Term」を起動します。
(USBはPCと接続)
PC側で起動した「Tera Term」
以下のように接続した時に出現するUSBのCOMポートをの設定をします。(この例ではCOM3を選んでいます。)
この操作は、「Setup」メニューの「Serial Port」メニューで行います。
同様に「Setup」メニューの「Tertminal」メニューで、改行(New-line)を次のように設定します。
FileメニューのNew Connection より、上記設定のSerialのCOMポートを選択して接続します。
以上で、ターミナルで入力した文字列がUSBを介して、「UMEHOSHI ITA」に送られるようになります。
適当な文字列(hello)を入力して[Enter]してみましょう。
これで表示さるということは、入力した文字列が「UMEHOSHI ITA」へ送られて、
その応答として、エコー(echo)となる同じ文字が「UMEHOSHI ITA」から戻ってきて表示しているのです。
このEchoモードをOFFすると、何も表示しなくなります。
「UMEHOSHI ITA」は[E\r\n]を受信することで、EchoのON/OFFの切り替えができます。
(この時、モードが切り替わったことを知らせるメッセージが出ます)
以下では、『Eと[Enter]』のキー操作を2回行った後に『Tと[Enter]』の入力操作をしています。
(この操作によってこのリンクで示した一時スルーモードと呼ぶ状態に変わります。)
上記最後に行ったに『Tと[Enter]』の入力操作で、「Though Mode」に移行して、これ以降のキー入力情報は、
URAT1への送信になっています。
またURAT1の受信文字列がターミナルへ表示するように切り替わりました。
よって、URAT1の接続先の部品の仕様により、挙動が変わります。
そして現在、URAT1の接続先がESP32-WROOM-32Dになっており、
「esp-32 built-in basic」が起動しています。
確認操作をします。以下がその操作例です。(挙動は、取り付けデバイスより異なる可能性があります。)
>HELP A very Basic ROM conole. Available commands/functions: LIST NEW RUN NEX LET IF GOTO GOSUB RETURN REM FOR INPUT PRINT PHEX POKE STOP BYE MEM ? ' DELAY END RSEED HELP ABOUT IOSET IODIR PEEK ABS RND IOGET USR > 10 IODIR 2,1 20 IOSET 2,1 25 PRINT "hello" 30 DELAY 500 50 IOSET 2,0 60 GOTO 20
BASICのコード例は、こちらに示します。
上記で示したESP32-WROOM-32Dの「IO15」接続状態がHIGHTで、シリアルへのブートログが出力される状態です。
ですが[UMEHOSHI ITA]の「テスト・ウメ・フラッシュ」のプログラムで、起動より2秒後にUARTからの1行受信で、
1回だけ改行で応答するようになっており、これでログ出力が止まります。
そしてESP32-WROOM-32Dの接続状態(SW2がOFFで「IO12」がHIGHT)で、
BASIC が起動しています。
ESP32-WROOM-32Dは、「IO12」端子をLOW で起動させると、BASIC の起動はなくなります。
この場合は、ESP32はBasic起動の代わりに、非同期端末用の操作用のATコマンドに相当する「SSC Command」が使える環境になります。
この環境を試すための操作と実行例を示すます。
[UMEHOSHI ITA]では、SW2スイッチが「IO12」端子と繋がって押すと「IO12」端子をLOW にします。
またSW2スイッチを押した状態で起動し、3秒程度後にLED1が消灯に変わったら、SW2スイッチを放すと
スルーモードになります。
(「テスト・ウメ・フラッシュ」のプログラムはリセット後に、3秒程度SW2が押されると、エコーOFFのスルーモードになるからです。)
この操作後に下記の「SSC Command」が使える状態となります。
何回かのEnterキーを入力すると、:>のプロンプトが確認できれば、このモードで動作していることになります。
なお、[UMEHOSHI ITA]のSW1スイッチはリセットスイッチで、ESP32の EN (3番端子)に繋がっています。
よって起動の後でも
リセットのSW1を押しながらSW2を押して、SW1を離してから、LED1が消灯するまでSW2を押し続ける操作を行うことで、
このモードになります。
:>op -Q +CURMODE:2 +MODE:OK :> :>what? :>sta -Q +JAP:DISCONNECTED :>ap -Q +APCONFIG:ESP_049A14,,1,0,0,4,100 :> :>what? :>mac -Q +APMAC:26:0a:c4:04:9a:14 :> :>dhcp -Q +DHCP:AP,STARTED :>ip +APIP:192.168.4.1 +APIPMASK:255.255.255.0 +APIPGW:192.168.4.1 :> :>what? :>reboot ets Jun 8 2016 00:22:57 rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0x00 clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 mode:DIO, clock div:2 load:0x3ffc0000,len:0 load:0x3ffc0000,len:2304 load:0x40078000,len:3788 ho 0 tail 12 room 4 load:0x40098000,len:532 entry 0x4009813c ************************************** * hello espressif ESP32! * * 2nd boot is running! * * version (V0.1) * ************************************** compile time 18:16:58 SPI Speed : 40MHz SPI Mode : DIO SPI Flash Size : 4MB Partition Table: ## Label Usage Type ST Offset Length 0 factory factory app 00 00 00010000 00100000 1 rfdata RF data 01 01 00110000 00040000 2 wifidata WiFi data 01 02 00150000 00040000 End of partition table Loading app partition at offset 00010000 section 0: paddr=0x00000020 vaddr=0x00000000 size=0x0ffe8 ( 65512) section 1: paddr=0x00010010 vaddr=0x3f400010 size=0x05b64 ( 23396) map section 2: paddr=0x00015b7c vaddr=0x3ffba720 size=0x01378 ( 4984) load section 3: paddr=0x00016efc vaddr=0x40080000 size=0x00400 ( 1024) load section 4: paddr=0x00017304 vaddr=0x40080400 size=0x126ac ( 75436) load section 5: paddr=0x000299b8 vaddr=0x00000000 size=0x06658 ( 26200) section 6: paddr=0x00030018 vaddr=0x400d0018 size=0x325b4 (206260) map start: 0x400807ac Initializing heap allocator: Region 19: 3FFBBA98 len 00024568 tag 0 Region 25: 3FFE8000 len 00018000 tag 1 Pro cpu up. Pro cpu start user code nvs_flash_init frc2_timer_task_hdl:3ffbc564, prio:22, stack:2048 tcpip_task_hdlxxx : 3ffbeca8, prio:20,stack:2048 phy_version: 80, Aug 26 2016, 13:04:06, 0 pp_task_hdl : 3ffc34f0, prio:23, stack:8192 :>enter uart init uart init wait fifo succeed exit uart init IDF version : master(db93bceb) WIFI LIB version : master(934d079b) ssc version : master(r283 4d376412) !!!ready!!! mode : softAP(26:0a:c4:04:9a:14) dhcp server start:(ip: 192.168.4.1, mask: 255.255.255.0, gw: 192.168.4.1) +WIFI:AP_START
上記実行例のコマンド操作資料は、「2a-esp32_getting_started_guide_en-v0.1.pdf
」に記述されます。
(なお、このページで示すように
ESP32の初期内容を変更によっては、このような動作ができなくなる可能性があります。)