M5StickC Plus (ESP32) 및 TinyGo에서 L 치카

소개



최근 직장에서 GO를 사용하고 취미에서는 ESP32를 사용하고 있기 때문에 TinyGo에서 ESP32를 프로그래밍하고 싶어졌습니다. 그래서 L 치카하기로 했다.

환경



macOS Big Sur Ver 11.1

설치



TinyGo



tinygo는 여기를 참조하여 설치했다.
macOS :: TinyGo - Go on Microcontrollers and WASM

여러가지 쓰여져 있지만, 이것만으로 움직일 것이다.
brew tap tinygo-org/tools
brew install tinygo

ESP32를 위한 도구군



이에 따라 다음 도구를 넣었다.

ESP32 - mini32 :: TinyGo - Go on Microcontrollers and WASM
  • pyserial
  • Espressif toolchain
  • esptool

  • 명령적으로 여기를 실행했습니다. pip라든지 pyserial은 벌써 들어간 것 같다.
    sudo easy_install pip
    sudo pip install pyserial
    mkdir -p ~/esp
    cd ~/esp
    tar -xzf ~/Downloads/xtensa-esp32-elf-osx-1.22.0-80-g6c4433a-5.2.0.tar.gz
    

    PATH도 추가했다.

    .zshrc
    export PATH="$PATH:$HOME/esp/xtensa-esp32-elf/bin"
    

    L치카



    모두가 사랑하는 L치카

    코드



    이것을 흉내 냈다.
    GitHub - tinygo-org/tinygo: Go compiler for small places. Microcontrollers, WebAssembly, and command-line tools. Based on LLVM.

    M5StickC Plus의 내장 LED의 PIN이 10이므로, 거기만 수정했다.

    blink.go
    package main
    
    import (
        "machine"
        "time"
    )
    
    func main() {
        led := machine.Pin(10)
        led.Configure(machine.PinConfig{Mode: machine.PinOutput})
    
        for {
            led.Low()
            time.Sleep(time.Millisecond * 1000)
            led.High()
            time.Sleep(time.Millisecond * 1000)
        }
    }
    

    쓰기



    이런 느낌으로 컴파일하고 쓸 수 있었다. USB 포트를 지정하지 않아도 찾아주는 것 같다.
    끝나는 것이 빠르다. 제대로 쓸 수 있을까 불안해진다. 걸린 4초 정도. Arduino 환경이라면, 3배 정도는 걸리고 있다고 생각한다.

    그건 그렇고, 여러 가지가 있다면 어떻게 될까요?
    ~/p/tinygo ❯❯❯ tinygo flash -target=esp32-mini32 blink.go
    esptool.py v3.0
    Serial port /dev/cu.usbserial-xxx
    Connecting....
    Chip is ESP32-PICO-D4 (revision 1)
    Features: WiFi, BT, Dual Core, 240MHz, Embedded Flash, VRef calibration in efuse, Coding Scheme None
    Crystal is 40MHz
    MAC: xxxx
    Uploading stub...
    Running stub...
    Stub running...
    Configuring flash size...
    Flash params set to 0x030f
    Compressed 3072 bytes to 2396...
    Wrote 3072 bytes (2396 compressed) at 0x00001000 in 0.2 seconds (effective 111.7 kbit/s)...
    Hash of data verified.
    
    Leaving...
    Hard resetting via RTS pin...
    

    지정할 때는 이런 느낌.
    # tinygo flash -target=esp32-mini32 -port=/dev/tty.usbserial-E9526A3192 blink.go
    

    움직임



    특히 아무런 변철도 없는 L치카이지만.

    시리얼 통신(UART)



    시리얼 통신(UART)도 할 수 있는 것 같다. println() 에서 전송. 드디어 확인했다.

    코드


    package main
    
    import "time"
    
    func main() {
        for {
            println("hello world!")
            time.Sleep(time.Second)
        }
    }
    

    동작



    아래 명령으로 연결.
    디폴트 115200bps로 접속하고 있는 것 같다.
    ~ ❯❯❯ screen /dev/tty.usbserial-E9526A3192 115200
    



    결론



    L치카 멋지게 되어 좋았다.
    컴파일과 쓰기 속도가 터무니없이 빠릅니다. L치카 뿐이니까? 하지만 빠르다. 충격.

    APPENDIX



    ESP32 대응(2021/03/17 현재)



    조금만 대응할 수 없는 것 같다. . . 더 사용하려면 자신도 공헌해야합니까? . .


    여기 참조.
    ESP32 - mini32 :: TinyGo - Go on Microcontrollers and WASM

    좋은 웹페이지 즐겨찾기