ESP32 ROM BASICでhello world & Lチカ

  • 0
    Like
  • 0
    Comment

    ESP32でLチカシリーズ、第3弾はBasicでLチカ。Arduino IDE版ESP-IDF版もどうぞ。環境は、いずれもMac、OS X El Capitanです。

    Arduino IDE版で書いた開発ボードを使います。

    BASIC inside!

    ESP32の弟分、ESP8266にもBASICが入ってて、盛り上がってるらしい。知らなかったけど。。いろいろな環境にポートされているんですね。最新版はここにあります。https://github.com/esp8266/Basic

    ということで、当然のように(?)お兄ちゃんのESP32にもBasicが搭載されています!

    元を辿ると、68000 Tiny Basic(Arduino) → Arduino Basic(C言語)→ TinyBasicPlus ということらしい。まぁ、その昔、電気屋さんの店頭で店員さんがいない隙にシャープMZ-80K、コモドールPET2001、タンデムラジオシャックTRS-80、日立ベーシックマスターなどを触ってましたが、すぐに機械語に行って、CP/MとかOS-9に行って、あとは、C言語、Unix、Macという道だったので、BASIC写経は、やったことがないです。懐かしい、というだけで、BASICでLチカ。おじさんにはオススメ。子ども向けには、たぶん、Python版をやります。
    MicroPython on ESP32
    micropython-esp32 on github

    ちなみに、このROM BASIC、Arduino IDEやESP-IDFでプログラムを書き込んでも消えません。マジか。

    ターミナルを準備

    ターミナルは、Arduino IDEのシリアルモニターでも良いですが、やはり、気分を出すためにはターミナルアプリ。miniterm.pyを使います。screenコマンドでも良いです。

    まずは、ポートを調べます。

    ls /dev/tty.*
    /dev/tty.SLAB_USBtoUART
    

    そして、ターミナルコマンド。ボーレートをセットしないと文字化けの嵐になるので注意。

    $ miniterm.py  /dev/tty.SLAB_USBtoUART 115200
    
    コマンドから抜けたい時は、ctrl+]を押す。
    

    あるいは、

    $ screen  /dev/tty.SLAB_USBtoUART 115200
    
    コマンドから抜けたい時は、ctrl+Aを押して、Kを押す。
    

    入力待ちになります。

    $ miniterm.py /dev/cu.SLAB_USBtoUART 115200
    --- Miniterm on /dev/cu.SLAB_USBtoUART  115200,8,N,1 ---
    --- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
    

    BASICを召喚(起動)

    GPIO12を10KΩで3.3Vにプルアップして、リセット。(簡単)
    IMG_2582.JPG

    リセットすると、以下のようなエラーメッセージの繰り返しになります。

    >ets Jun  8 2016 00:22:57
    
    rst:0x10 (RTCWDT_RTC_RESET),boot:0x33 (SPI_FAST_FLASH_BOOT)
    flash read err, 1000
    Falling back to built-in command interpreter.
    OK
    >ets Jun  8 2016 00:22:57
    
    rst:0x10 (RTCWDT_RTC_RESET),boot:0x33 (SPI_FAST_FLASH_BOOT)
    flash read err, 1000
    Falling back to built-in command interpreter.
    OK
    

    エンターキーを押すと、止まる。aboutを見ると、おお、いますな。

    >about
    ESP32 ROM Basic (c) 2016 Espressif Shanghai
    Derived from TinyBasic Plus by Mike Field and Scott Lawrence
    

    プログラムをポチポチと入力

    間違えたら、同じ行番号で書く。間に入れたくなったら、間の行番号を使う。ちなみに、他のエディターで書いて一気にコピペでもいけますけど。いやいや、それでは気分が出ないので。

    >10 IODIR 2,1
    >
    >20 IOSET 2,1
    >
    >30 DELAY 375
    >
    >40 IOSET 2,0
    >
    >50 DELAY 125
    >
    >60 GOTO 20
    >
    >25 PRINT "hello world!!  ";
    

    実行!(論よりrun)

    >run
    hello world!!  hello world!!  hello world!!  hello world!!  hello world!!  hello world!!  hello world!!  hello world!!  hello world!!  hello world!!  hello world!!  hello world!!  hello world!!  hello world!!  hello world!!  hello world!!  hello world!!  hello world!!  hello world!!  hello world!!  hello world!!  hello world!!  hello world!!  hello world!!  hello world!!  hello world!!  hello world!!  hello world!!  break!
    OK
    >list
    10 IODIR 2,1
    20 IOSET 2,1
    25 PRINT "hello world!!  ";
    30 DELAY 375
    40 IOSET 2,0
    50 DELAY 125
    60 GOTO 20
    OK
    >
    

    FirefoxScreenSnapz013.png
    (https://www.facebook.com/naohiro.tsuji/posts/1325315740872066)

    helpで、使える命令が表示されます。

    残念ながら、IOGETが動いてない。

    >help
    A very Basic ROM console. Available commands/functions:
    LIST
    NEW
    RUN
    NEXT
    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
    >
    

    IOGETがあれば、もう少しいろいろ出来ますが。。INPUTも使えない。32KBytesフリーです。

    >new
    >
    >mem
    32560 bytes free.
    >
    

    参考ページ

    HACKADAY
    macsbug
    ESP-IDF Programming Guide
    TOMER WELLER / A BLOB