Golang é uma linguagem fantástica para se desenvolver aplicações e um fator a ser explorado é o seu uso em dispositivos IoT. A linguagem já conta com diversas ferramentas de cross-compile, alguns pacotes experimentais de comunicação baixo nível e diversos projetos relacionados a hardware.
8. EMGO - Bare metal Go
Golang infelizmente não tem um bom suporte para micro controladores
github.com/ziutek/emgo
Embedded Rust
O Ecossistema Rust está mais maduro nisso
VS
github.com/rust-embedded
22. Raspberry Pi 3 👑
+ Ecossistema gigante
+ Wifi e Bluetooth embutido
+ Muito material na internet
+ CPU ARMv8 e 1Gb de ram
Orange Pi Zero 🍊
- Documentação ruim
+ Wifi e Bluetooth embutido
+ Muito barato
+ CPU ARMv6 e 512mb de ram
Onion Omega2
+ Low Profile
+ Larga escala
+ Wifi embutido
+ CPU MIPS e 64mb de ram
26. @ IOmemory.s
@ Opens the /dev/gpiomem device and maps GPIO memory
@ into program virtual address space.
@ 2017-09-29: Bob Plantz
@ Define my Raspberry Pi
.cpu cortex-a53
.fpu neon-fp-armv8
.syntax unified @ modern syntax
@ Constants for assembler
@ The following are defined in /usr/include/asm-generic/fcntl.h:
@ Note that the values are specified in octal.
.equ O_RDWR,00000002 @ open for read/write
.equ O_DSYNC,00010000 @ synchronize virtual memory
.equ #__O_SYNC,04000000 @ programming changes with
.equ O_SYNC,#__O_SYNC|O_DSYNC @ I/O memory
@ The following are defined in /usr/include/asm-generic/mman-common.h:
.equ PROT_READ,0x1 @ page can be read
.equ PROT_WRITE,0x2 @ page can be written
.equ MAP_SHARED,0x01 @ share changes
@ The following are defined by me:
.equ PERIPH,0x3f000000 @ RPi 2 & 3 peripherals
@ .equ PERIPH,0x20000000 @ RPi zero & 1 peripherals
.equ GPIO_OFFSET,0x200000 @ start of GPIO device
.equ O_FLAGS,O_RDWR|O_SYNC @ open file flags
.equ PROT_RDWR,PROT_READ|PROT_WRITE
.equ NO_PREF,0
.equ PAGE_SIZE,4096 @ Raspbian memory page
.equ FILE_DESCRP_ARG,0 @ file descriptor
.equ DEVICE_ARG,4 @ device address
.equ STACK_ARGS,8 @ sp already 8-byte aligned
@ Constant program data
.section .rodata
.align 2
CPU Register #-> /dev/gpiomem
28. ____ _ ____
/ #__ ___ (_)#__ ___ / #__ #__ _ ___ ___ ____ _
/ /_/ / _ / / _ / _ / /_/ / ' / -_) _ `/ _ `/
____/_#//_/_/___/_#//_/ ____/_/_/_/#__/_, /_,_/
W H A T W I L L Y O U I N V E N T ? /___/
-----------------------------------------------------
Ω-ware: 0.1.10 b160
-----------------------------------------------------
root@Omega-5D69:~# ls /sys/class/
bdi firmware i2c-dev mem net ppp
scsi_host tty
block gpio input misc pci_bus pwm
sound video4linux
bluetooth hidraw leds mmc_host phy scsi_device
spi_master watchdog
dma i2c-adapter mdio_bus mtd power_supply scsi_disk
spidev
root@Omega-5D69:~# ls /sys/class/gpio/
export gpio11 gpio16 gpio17 gpiochip0 gpiochip32 gpiochip64
unexport
base device/ label ngpio subsystem/ uevent
sysFS
29. root@Omega-5D69:~# echo out > /sys/class/gpio/gpio11/direction
root@Omega-5D69:~# echo 1 > /sys/class/gpio/gpio11/value
root@Omega-5D69:~# echo 0 > /sys/class/gpio/gpio11/value
Blink a LED with sysFS
30. TEM SUPORTE PARA SYSFS E CPU REGISTERS
ESCOLHE A MELHOR IMPLEMENTAÇÃO DISPONÍVEL
PERIPH.IO
44. 44
Comunicação Serial
Padrões mais conhecidos e utilizados
• I2C (Síncrono e padrão Master/Slave) - Tipicamente utilizado por sensores
digitais.
• SPI (Síncrono e alta taxa de transmissão) - Tipicamente usado em Display
gráficos e numéricos.
• UART (Assíncrono) - Tipicamente usado em módulos de Radio, GPS,
Displays LCD, Debug Serial, etc.
83. 83
Próximos passos
Explorar ainda mais Golang em Ambiente embarcado
• Cgo + cross compile - Ainda não é tão fácil de fazer
• Updates Over the air (OTA) - Atualizar um device apenas com um binário
novo.
• Cenário de Gateway IoT - Alta performance na ponta coletando dados,
armazenando e sincronizando com a nuvem
• IA/ML na ponta - Usar Golang + ML em embarcado na ponta.
• Cameras e Microfones - Também são sensores