WISOL LSM110A RODANDO TINYGO IDE GOLANG - P2P LoRa
O objetivo deste BLOG é demonstrar como é possível programar o módulo WISOL LSM110A (STM32WL55) com a linguagem TINYGO, foi utilizado o Breakout para LSM110A.
BETA BETA BETA BETA
Uma comunicação bidirecional será realizada com LoRa com a LIB sx126x
Esta é a mensagem
txmsg = []byte("Hello TinyGO")
Acompanhe discussão em
LIB
TinyGo é um projeto para levar a linguagem de programação Go para microcontroladores e navegadores modernos, criando um novo compilador baseado em LLVM.
Você pode compilar e executar programas TinyGo em muitas placas microcontroladoras diferentes, como o micro:bit da BBC e o Arduino Uno.
TinyGo também pode ser usado para produzir código WebAssembly (WASM), que é muito compacto em tamanho.
Só quer ver o código? Vá ao repositório do Github em
TinyGo também tem suporte para vários dispositivos diferentes, como acelerômetros e magnetômetros. Confira o repositório do Github em
https://github.com/tinygo-org/drivers para obter mais informações.
Atenção:
c:\go\bin\go get tinygo.org/x/drivers
Instalando no TINYGO NO WINDOWS - Plug IN
Se você precisar criar um aplicativo Go para um dispositivo pequeno, como um microcontrolador, provavelmente usaria o TinyGo. Este é um novo compilador Go que usa LLVM para otimizar o código e gerar código de máquina para a arquitetura de destino.
Hoje gostaríamos de apresentar o plugin TinyGo. Ele vem com vários recursos, e esperamos que este novo plugin torne a escrita de código para dispositivos com RAM limitada mais fácil e agradável.
Este é um projeto estudantil implementado como parte do nosso programa de estágio. Dois de nossos estagiários trabalharam nisso em Munique: Nikita Mironov da Universidade de Tecnologia Clausthal e Oleksandr Voloshyn da Universidade Técnica de Munique. Gostaríamos de agradecê-los por seu trabalho árduo e esforço.
A JetBrains tem oportunidades de estágio de inverno e verão, bem como posições de meio período durante todo o ano em diferentes locais. Vagas abertas de estagiário são regularmente publicadas em nosso site.
Iniciar novo projeto
Para usar o plugin TinyGo, você precisará da versão estável mais recente do GoLand, que é 2021.1.2 no momento em que escrevo.
Supomos que você esteja familiarizado com o TinyGo, mas apenas no caso, aqui estão as instruções de instalação.
Depois que o TinyGo estiver configurado, instale o plug-in e clique no botão New project button. Você verá uma nova opção à esquerda – TinyGo. Clique nele e baixe o SDK do TinyGo ou aponte o IDE para o existente em sua máquina. Além disso, escolha a plataforma de destino correta no menu suspenso. Agora clique no botão Create button. Se você quiser abrir um projeto existente e ajustar a configuração, vá para Preferences/Settings | Go | TinyGo.
Eu copiei o Plug-In para este URL
Para criar um novo arquivo .go, clique com o botão direito do mouse na pasta do projeto. Você verá uma nova opção – TinyGo application – na seção New. Ele sugerirá a escolha de um modelo. Vamos escolher blinky1/blinky1.go – um exemplo de "Hello, world" no mundo TinyGo. Se você conectar uma placa com um LED ao computador e piscar este programa para a placa, ele fará o seu LED piscar.
Conclusão e importações automáticas
Mas digamos que você queira escrever o código sozinho. Você descobrirá que o plugin TinyGo suporta auto-completar de código e a importação automática de pacotes.
Há também inspeções de código configuradas especificamente para aplicativos TinyGo. Para verificá-los, vá para Preferences/Settings | Editor | Inspections.
Para gravar o programa, clique no triângulo verde na sarjeta. Existem várias opções. Escolha Run TinyGo [nome do seu projeto]. Você pode ajustar a configuração que foi criada clicando no mesmo triângulo verde e escolhendo a opção Modify Run Configuration. Além disso, a configuração pode ser ajustada a partir do menu suspenso no canto superior direito da janela.
Este é um projeto de código aberto e seu código está disponível no GitHub. Você também pode conferir a página do plugin TinyGo no JetBrains Marketplace.
É isso! Tenha em mente que o trabalho neste projeto está em andamento. Por favor, contribua e ajude-nos a torná-lo melhor. Como sempre, você pode entrar em contato via Twitter ou o canal Gophers Slack #goland. Compartilhe seu feedback aqui nos comentários ou abra um problema em nosso rastreador.
Execução
Código fonte (cole)
package main
// In this example, a Lora packet will be sent every 10s
// module will be in RX mode between two transmissions
import (
"device/stm32"
"machine"
"runtime/interrupt"
"time"
rfswitch "tinygo.org/x/drivers/examples/sx126x/rfswitch"
"tinygo.org/x/drivers/sx126x"
)
const FREQ = 868100000
const (
LORA_DEFAULT_RXTIMEOUT_MS = 1000
LORA_DEFAULT_TXTIMEOUT_MS = 5000
)
var (
loraRadio *sx126x.Device
txmsg = []byte("Hello TinyGO")
)
// radioIntHandler will take care of radio interrupts
func radioIntHandler(intr interrupt.Interrupt) {
loraRadio.HandleInterrupt()
}
func main() {
println("\n# TinyGo Lora RX/TX test")
println("# ----------------------")
machine.LED.Configure(machine.PinConfig{Mode: machine.PinOutput})
// Create the driver
loraRadio = sx126x.New(machine.SPI3)
loraRadio.SetDeviceType(sx126x.DEVICE_TYPE_SX1262)
// Create RF Switch
var radioSwitch rfswitch.CustomSwitch
loraRadio.SetRfSwitch(radioSwitch)
// Detect the device
state := loraRadio.DetectDevice()
if !state {
panic("sx126x not detected.")
}
// Add interrupt handler for Radio IRQs
intr := interrupt.New(stm32.IRQ_Radio_IRQ_Busy, radioIntHandler)
intr.Enable()
loraConf := sx126x.LoraConfig{
Freq: FREQ,
Bw: sx126x.SX126X_LORA_BW_500_0,
Sf: sx126x.SX126X_LORA_SF9,
Cr: sx126x.SX126X_LORA_CR_4_7,
HeaderType: sx126x.SX126X_LORA_HEADER_EXPLICIT,
Preamble: 12,
Ldr: sx126x.SX126X_LORA_LOW_DATA_RATE_OPTIMIZE_OFF,
Iq: sx126x.SX126X_LORA_IQ_STANDARD,
Crc: sx126x.SX126X_LORA_CRC_ON,
SyncWord: sx126x.SX126X_LORA_MAC_PRIVATE_SYNCWORD,
LoraTxPowerDBm: 20,
}
loraRadio.LoraConfig(loraConf)
var count uint
for {
tStart := time.Now()
// Blocking RX for LORA_DEFAULT_RXTIMEOUT_MS
println("Start Lora RX for 10 sec")
for int(time.Now().Sub(tStart).Seconds()) < 10 {
buf, err := loraRadio.LoraRx(LORA_DEFAULT_RXTIMEOUT_MS)
if err != nil {
println("RX Error: ", err)
} else if buf != nil {
println("Packet Received: len=", len(buf), string(buf))
}
}
println("END Lora RX")
println("LORA TX size=", len(txmsg))
err := loraRadio.LoraTx(txmsg, LORA_DEFAULT_TXTIMEOUT_MS)
if err != nil {
println("TX Error:", err)
}
count++
}
}
IDE do GOLANG
Questões: forums GoLang
Thanks to the
@deadprogram
@ofauchon
and Thanks too the
Ótima IDE para Go que aceita Plug in TinyGo
Em breve LoRaWAN
FONTES:
Nenhum comentário:
Postar um comentário