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
  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?
  3. MY IDEAL HEN HOUSE 01. My ideal hen house •

    Monitor my hen house ◦ temperature ◦ humidity • Visualise the metrics
  4. — TinyGo website at tinygo.org TinyGo is a compiler for

    the Go programming language but for smaller kinds of systems.
  5. 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
  6. 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?
  7. 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?
  8. 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
  9. FLASH COMMAND tinygo flash -target=<your-board> <your-program>.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?
  10. FLASH COMMAND tinygo flash -target=<your-board> <your-program>.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?
  11. DEBUGGING TOOLS ❯ ll /dev/tty.* 02. What is TinyGo? Serial

    port: connector by which a device sends data one bit at a time.
  12. 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?
  13. 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. ...
  14. TINYGO CHEAT SHEET 05. Things I learned • TinyGo: Go

    compiler for small places • Flash: tinygo flash -target=<your-board> 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
  15. 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?
  16. RESOURCES @doniacld • TinyGo doc • Go doc • TinyGo

    discovery examples repository • TinyHen project repository • Kube stack prometheus doc • Grafana dashboards Kubernetes