Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TinyGo: Getting the upper hen (GopherConUK 2022)

TinyGo: Getting the upper hen (GopherConUK 2022)

Do you want to combine your love for Go and a useful personal project? How about monitoring your hen house using TinyGo! With any microcontroller and a few materials, you will have enough horsepower to build a basic monitoring system and pamper your chickens.

TinyGo is a Go compiler for small places such as microcontroller or web. Starting from a basic understanding of what is TinyGo, learn how to:
- Use the appropriate driver for your hardware
- Retrieve data from a thermometer and humidity captor
- Communicate with your microcontroller using wifi
- Build a dashboard with temperature and humidity data
- Check that your hens are doing well, from your couch

And if you still do not want to adopt chickens, you can let your creativity talk and you will be able to build your own project using our favourite language.

Donia Chaiehloudj

August 22, 2022
Tweet

More Decks by Donia Chaiehloudj

Other Decks in Programming

Transcript

  1. TinyGo: Getting the
    upper hen
    GopherCon UK, London - 17 August 2022
    Donia Chaiehloudj
    Powder
    @doniacld

    View Slide

  2. My ideal hen house 01
    What is TinyGo?
    What’s the plan?
    Demo time
    Things I learned
    02
    03
    04
    05
    06
    What’s next?

    View Slide

  3. MY IDEAL HEN HOUSE
    01. My ideal hen house
    ● Monitor my hen house
    ○ temperature
    ○ humidity
    ● Visualise the metrics

    View Slide

  4. THE GOAL
    01. My ideal hen house

    View Slide

  5. — TinyGo website at tinygo.org
    TinyGo is a compiler for
    the Go programming
    language but for
    smaller kinds of
    systems.

    View Slide

  6. SMALL SYSTEMS
    02. What is TinyGo?
    ● Microcontrollers (86 boards)
    ● WebAssembly
    ● Tiny CLI

    View Slide

  7. TINYGO COMPILER: HISTORY
    https://aykevl.nl/
    02. What is TinyGo?
    Ayke exploring
    existing projects
    01/02/19
    TinyGo 0.1
    TinyGo used by
    the industry
    TinyGo adopted by
    users for side projects
    03/02/19
    FOSDEM
    @aurelievache

    View Slide

  8. TINYGO COMPILER: ANOTHER GO COMPILER
    The LLVM Project is a collection of modular and reusable compilers.
    https://tinygo.org/docs/concepts/compiler-internals/pipeline/
    02. What is TinyGo?

    View Slide

  9. GO VS TINYGO: HELLO WORLD SIZE
    ❯ go build -o bin/helloworld-go hello/hello_world.go
    ❯ tinygo build -o bin/helloworld-tinygo hello/hello_world.go
    ❯ ll bin/
    total 5120
    -rwxr-xr-x 1 doniacld staff 1.8M Aug 14 18:40 helloworld-go
    -rwxr-xr-x 1 doniacld staff 29K Aug 14 18:41 helloworld-tinygo
    go version go1.18.5 darwin/arm64
    0.24.0 darwin/amd64 (using go version go1.18.5 and LLVM version 14.0.0)
    02. What is TinyGo?

    View Slide

  10. GO VS TINYGO: GO LANGUAGE FEATURES
    02. What is TinyGo?
    Concurrency ✅ Concurrency != Parallelism
    Reflection 󰠼 Marshal structure with json fields doesn't work
    Garbage Collection ✅ -gc=none, -gc=leaking, -gc=conservative
    Standard libraries 󰠼 Packages supported by TinyGo e.g.: net/http
    🎯 Compatibility with Go ecosystem

    View Slide

  11. FLASH COMMAND
    tinygo flash -target= .go
    1. Compiles the program on your computer
    2. Writes it on chip memory (ROM)
    3. Runs it on the chip
    NB: Built-in led is blinking while writing
    02. What is TinyGo?

    View Slide

  12. FLASH COMMAND
    tinygo flash -target= .go
    1. Compiles the program on your computer
    2. Writes it on chip memory (ROM)
    3. Runs it on the chip
    NB: Built-in led is blinking while writing
    02. What is TinyGo?

    View Slide

  13. LET’S DEBUG
    02. What is TinyGo?

    View Slide

  14. DEBUGGING TOOLS
    ❯ ll /dev/tty.*
    02. What is TinyGo?
    Serial port: connector by which a device sends data one bit at a time.

    View Slide

  15. https://github.com/doniacld/tinygo-discovery/blob/main/hello/hello_gophers.go
    https://github.com/doniacld/tinygo-discovery/blob/main/utils/read_serial.go
    READ FROM THE SERIAL PORT
    02. What is TinyGo?
    ❯ go run hello_gophers.go
    2022/08/14 18:23:14 Hi London! What's up GopherCon UK 2022?
    2022/08/14 18:23:15 Hi London! What's up GopherCon UK 2022?
    ❯ go run utils/read_serial.go -port /dev/cu.usbmodem1401
    1970/01/01 00:00:03 Hi London! What's up GopherCon UK 2022?
    1970/01/01 00:00:04 Hi London! What's up GopherCon UK 2022?

    View Slide

  16. DEBUGGING TOOLS
    02. What is TinyGo?
    TinyGo built-in debugging tool for binary on chip
    ● based on gdb
    ● debug probes not included on every board
    ● observe scheduler
    $ tinygo gdb -target=microbit examples/microbit-blink
    [...]
    target halted due to debug-request, current mode: Thread
    xPSR: 0xc1000000 pc: 0x0000071c msp: 0x20000800
    (gdb) continue
    Continuing.
    ...

    View Slide

  17. ELECTRICAL CIRCUIT
    03. What’s the plan?
    Arduino Nano 33 IoT DHT22
    DATA
    GROUND
    VCC

    View Slide

  18. THE BIG PICTURE
    03. What’s the plan?

    View Slide

  19. PRODUCTION ENVIRONMENT
    03. What’s the plan?

    View Slide

  20. USEFUL TINYGO PACKAGES
    https://github.com/doniacld/tinygo-discovery/blob/main/tiny-hen/main.go
    03. What’s the plan?

    View Slide

  21. MEASUREMENT PSEUDO CODE
    https://github.com/doniacld/tinygo-discovery/blob/main/tiny-hen/main.go
    03. What’s the plan?

    View Slide

  22. THE GOOD OLD GO WEB SERVER
    https://xkcd.com/910/
    03. What’s the plan?

    View Slide

  23. GO WEB SERVER: PROMETHEUS GAUGE DEFINITIONS
    https://github.com/doniacld/tiny-hen/blob/main/cmd/prommetric/metric.go
    03. What’s the plan?

    View Slide

  24. INFRASTRUCTURE
    03. What’s the plan?

    View Slide

  25. Demo time
    https://tinyurl.com/gopher-praying-sticker

    View Slide

  26. TINYGO CHEAT SHEET
    05. Things I learned
    ● TinyGo: Go compiler for small places
    ● Flash: tinygo flash -target= main.go
    ● TinyGo drivers examples are a treasure chest 💎
    ● Hardware recommendations: samd21/samd51 board, or an rp2040
    or TinyGo Playground
    ● You can enter the IoT world with your current skills and your IDE
    ○ VS code plugin
    ○ GoLand plugin

    View Slide

  27. WHAT’S NEXT?
    ● Use async protocol (MQTT)
    ● Long range WiFi board (LoRaWAN)
    ● Deploy in the cloud
    ● Add a fox detection system
    https://tinyurl.com/gopher-far-west-sticker
    06. What’s next?

    View Slide

  28. https://github.com/doniacld/tinygo-discovery
    https://github.com/doniacld/tiny-hen
    @doniacld
    THANK YOU 🐣

    View Slide

  29. RESOURCES
    @doniacld
    ● TinyGo doc
    ● Go doc
    ● TinyGo discovery examples repository
    ● TinyHen project repository
    ● Kube stack prometheus doc
    ● Grafana dashboards Kubernetes

    View Slide