quinta-feira, 22 de dezembro de 2022

WISOL LSM110A RODANDO TINYGO IDE GOLANG - P2P LoRa

                                   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

Compilado no WINDOWS 10

LSM110A Starter KIT
Módulo

Breakout

TinyGO

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++
}

}
FONTES: 


Sobre a SMARTCORE

A SmartCore fornece módulos para comunicação wireless, biometria, conectividade, rastreamento e automação.
Nosso portfólio inclui modem 2G/3G/4G/NB-IoT/Cat.M, satelital, módulos WiFi, Bluetooth, GNSS / GPS, Sigfox, LoRa, leitor de cartão, leitor QR code, mecanismo de impressão, mini-board PC, antena, pigtail, LCD, bateria, repetidor GPS e sensores.
Mais detalhes em www.smartcore.com.br


Nenhum comentário:

Postar um comentário