mirror of
https://github.com/tinygo-org/drivers.git
synced 2026-07-26 10:38:41 +00:00
fa0cf6ec7f
- Remove all default loraconf default initialisation in lorawan examples (Region Settings takes care of this now) - Remove retries while receiving JoinAccept and increase LoraRX to 10s (no need to wait more than 10s) - Add constants for RegionSetting default frequencies - Standardize all lora default configurations in lora examples - Add new AT+LW=NET,(ON|OFF) command in atcmd example
95 lines
2.3 KiB
Go
95 lines
2.3 KiB
Go
package main
|
|
|
|
// This example code demonstrates Lora RX/TX With SX127x driver
|
|
// You need to connect SPI, RST, CS, DIO0 (aka IRQ) and DIO1 to use.
|
|
|
|
import (
|
|
"machine"
|
|
"time"
|
|
|
|
"tinygo.org/x/drivers/lora"
|
|
"tinygo.org/x/drivers/sx127x"
|
|
)
|
|
|
|
const (
|
|
LORA_DEFAULT_RXTIMEOUT_MS = 1000
|
|
LORA_DEFAULT_TXTIMEOUT_MS = 5000
|
|
)
|
|
|
|
var (
|
|
loraRadio *sx127x.Device
|
|
txmsg = []byte("Hello TinyGO")
|
|
|
|
// We assume LoRa Featherwing module is connected to PyBadge:
|
|
SX127X_PIN_RST = machine.D11
|
|
SX127X_PIN_CS = machine.D10
|
|
SX127X_PIN_DIO0 = machine.D6
|
|
SX127X_PIN_DIO1 = machine.D9
|
|
SX127X_SPI = machine.SPI0
|
|
)
|
|
|
|
func dioIrqHandler(machine.Pin) {
|
|
loraRadio.HandleInterrupt()
|
|
}
|
|
|
|
func main() {
|
|
time.Sleep(5 * time.Second)
|
|
println("\n# TinyGo Lora RX/TX test")
|
|
println("# ----------------------")
|
|
machine.LED.Configure(machine.PinConfig{Mode: machine.PinOutput})
|
|
SX127X_PIN_RST.Configure(machine.PinConfig{Mode: machine.PinOutput})
|
|
|
|
SX127X_SPI.Configure(machine.SPIConfig{Frequency: 500000, Mode: 0})
|
|
|
|
println("main: create and start SX127x driver")
|
|
loraRadio = sx127x.New(SX127X_SPI, SX127X_PIN_RST)
|
|
loraRadio.SetRadioController(sx127x.NewRadioControl(SX127X_PIN_CS, SX127X_PIN_DIO0, SX127X_PIN_DIO1))
|
|
|
|
loraRadio.Reset()
|
|
state := loraRadio.DetectDevice()
|
|
if !state {
|
|
panic("main: sx127x NOT FOUND !!!")
|
|
} else {
|
|
println("main: sx127x found")
|
|
}
|
|
|
|
// Prepare for Lora Operation
|
|
loraConf := lora.Config{
|
|
Freq: lora.MHz_868_1,
|
|
Bw: lora.Bandwidth_125_0,
|
|
Sf: lora.SpreadingFactor9,
|
|
Cr: lora.CodingRate4_7,
|
|
HeaderType: lora.HeaderExplicit,
|
|
Preamble: 12,
|
|
Iq: lora.IQStandard,
|
|
Crc: lora.CRCOn,
|
|
SyncWord: lora.SyncPrivate,
|
|
LoraTxPowerDBm: 20,
|
|
}
|
|
|
|
loraRadio.LoraConfig(loraConf)
|
|
|
|
var count uint
|
|
for {
|
|
tStart := time.Now()
|
|
|
|
println("main: Receiving Lora for 10 seconds")
|
|
for time.Since(tStart) < 10*time.Second {
|
|
buf, err := loraRadio.Rx(LORA_DEFAULT_RXTIMEOUT_MS)
|
|
if err != nil {
|
|
println("RX Error: ", err)
|
|
} else if buf != nil {
|
|
println("Packet Received: len=", len(buf), string(buf))
|
|
}
|
|
}
|
|
println("main: End Lora RX")
|
|
println("LORA TX size=", len(txmsg), " -> ", string(txmsg))
|
|
err := loraRadio.Tx(txmsg, LORA_DEFAULT_TXTIMEOUT_MS)
|
|
if err != nil {
|
|
println("TX Error:", err)
|
|
}
|
|
count++
|
|
}
|
|
|
|
}
|