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

TinyGo: Getting the upper hen (GopherCon 2022)

TinyGo: Getting the upper hen (GopherCon 2022)

TinyGo is a Go compiler for small places such as microcontroller or web. Join Donia for a demo and see live temperature and humidity data displayed on dashboards.

Starting from a basic understanding of what TinyGo is, you will 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 flow by building your own project, using our favourite language.

Talk/Attendee Level: All Attendees
________

Join the #tinygo channel on Gophers slack and find the code on my github:
https://github.com/doniacld/tiny-hen

Donia Chaiehloudj

October 10, 2022
Tweet

More Decks by Donia Chaiehloudj

Other Decks in Programming

Transcript

  1. TinyGo: Getting the
    upper hen
    GopherCon, Chicago - 08 October 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. 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

  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. LET’S DEBUG
    02. What is TinyGo?

    View Slide

  13. 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

  14. 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 Chicago! What's up GopherCon US 2022?
    2022/08/14 18:23:15 Hi Chicago! What's up GopherCon US 2022?
    ❯ go run utils/read_serial.go -port /dev/cu.usbmodem1401
    1970/01/01 00:00:03 Hi Chicago! What's up GopherCon US 2022?
    1970/01/01 00:00:04 Hi Chicago! What's up GopherCon US 2022?

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  21. 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

  22. INFRASTRUCTURE
    03. What’s the plan?

    View Slide

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

    View Slide

  24. 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
    ● Enter the IoT world with your current skills and your IDE (VS code plugin, GoLand plugin)

    View Slide

  25. 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

  26. https://github.com/doniacld/tinygo-discovery
    https://github.com/doniacld/tiny-hen
    @doniacld

    View Slide

  27. https://github.com/doniacld/tinygo-discovery
    https://github.com/doniacld/tiny-hen
    @doniacld
    Thank you 🐣

    View Slide