mirror of
https://github.com/tinygo-org/drivers.git
synced 2026-08-11 02:13:42 +00:00
28ddb2681d
This first version of the driver has been tested with BB-FRM9x module
89 lines
1.9 KiB
Go
89 lines
1.9 KiB
Go
// Sends data with LoRa.
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"machine"
|
|
"strconv"
|
|
"time"
|
|
|
|
"tinygo.org/x/drivers/lora/sx127x"
|
|
)
|
|
|
|
var loraConfig = sx127x.Config{
|
|
Frequency: 868100000,
|
|
SpreadingFactor: 12,
|
|
Bandwidth: 125000,
|
|
CodingRate: 6,
|
|
TxPower: 17,
|
|
}
|
|
|
|
const (
|
|
SPI_SCK_PIN = machine.PA5
|
|
SPI_SDO_PIN = machine.PA7
|
|
SPI_SDI_PIN = machine.PA6
|
|
|
|
SPI_CS_PIN = machine.PB8
|
|
SPI_RST_PIN = machine.PB9
|
|
DIO0_PIN = machine.PA2
|
|
|
|
UART_TX_PIN = machine.PA9
|
|
UART_RX_PIN = machine.PA10
|
|
)
|
|
|
|
func main() {
|
|
|
|
// Configure serial console
|
|
machine.Serial.Configure(machine.UARTConfig{TX: UART_TX_PIN, RX: UART_RX_PIN, BaudRate: 115200})
|
|
|
|
println("LoRa Sender Example")
|
|
|
|
// Prepare GPIOS (SPI + DIO)
|
|
machine.LED.Configure(machine.PinConfig{Mode: machine.PinOutput})
|
|
SPI_CS_PIN.Configure(machine.PinConfig{Mode: machine.PinOutput})
|
|
SPI_RST_PIN.Configure(machine.PinConfig{Mode: machine.PinOutput})
|
|
DIO0_PIN.Configure(machine.PinConfig{Mode: machine.PinOutput})
|
|
|
|
// Enable SPI
|
|
machine.SPI0.Configure(machine.SPIConfig{
|
|
SCK: SPI_SCK_PIN,
|
|
SDO: SPI_SDO_PIN,
|
|
SDI: SPI_SDI_PIN,
|
|
Frequency: 500000,
|
|
Mode: 0})
|
|
|
|
// Create and Reset Lora driver
|
|
loraRadio := sx127x.New(machine.SPI0, SPI_CS_PIN, SPI_RST_PIN)
|
|
loraRadio.Reset()
|
|
|
|
// Check module identification
|
|
if loraRadio.GetVersion() != 0x12 {
|
|
println("SX1276 module not found")
|
|
for {
|
|
}
|
|
} else {
|
|
println("Module version 0x12")
|
|
}
|
|
|
|
// Configure Lora settings (modulation, SF... etc )
|
|
var err = loraRadio.SetupLora(loraConfig)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return
|
|
}
|
|
|
|
// Send a Lora packet every 5 sec
|
|
println("Sending LoRa packets every 5 seconds...")
|
|
for i := 0; ; i++ {
|
|
var packet = "TinyGo LoRa Sender: " + strconv.Itoa(i)
|
|
println("Sending:", packet)
|
|
|
|
machine.LED.Low()
|
|
time.Sleep(time.Millisecond * 150)
|
|
machine.LED.High()
|
|
|
|
loraRadio.TxLora([]byte(packet))
|
|
time.Sleep(5000 * time.Millisecond)
|
|
}
|
|
}
|