mirror of
https://github.com/tinygo-org/drivers.git
synced 2026-08-03 14:37:46 +00:00
78 lines
2.0 KiB
Go
78 lines
2.0 KiB
Go
package main
|
|
|
|
// This example will periodically enable Continuous "Preamble" and "Wave" modes on 868.1 Mhz
|
|
import (
|
|
"machine"
|
|
"time"
|
|
|
|
"tinygo.org/x/drivers/lora"
|
|
"tinygo.org/x/drivers/sx126x"
|
|
)
|
|
|
|
const FREQ = 868100000
|
|
|
|
var (
|
|
loraRadio *sx126x.Device
|
|
)
|
|
|
|
func main() {
|
|
println("\n# TinyGo Lora continuous Wave/Preamble test")
|
|
println("# -----------------------------------------")
|
|
|
|
machine.LED.Configure(machine.PinConfig{Mode: machine.PinOutput})
|
|
|
|
// Create the driver
|
|
loraRadio = sx126x.New(spi)
|
|
loraRadio.SetDeviceType(sx126x.DEVICE_TYPE_SX1262)
|
|
|
|
// Create radio controller for target
|
|
loraRadio.SetRadioController(newRadioControl())
|
|
|
|
state := loraRadio.DetectDevice()
|
|
if !state {
|
|
panic("sx126x not detected. ")
|
|
}
|
|
|
|
// 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,
|
|
Ldr: lora.LowDataRateOptimizeOff,
|
|
Iq: lora.IQStandard,
|
|
Crc: lora.CRCOn,
|
|
SyncWord: lora.SyncPrivate,
|
|
LoraTxPowerDBm: 20,
|
|
}
|
|
loraRadio.LoraConfig(loraConf)
|
|
|
|
// Although LoraConfig has already configured most of Lora settings,
|
|
// the following lines are still required to enable Continuous Preamble/Wave
|
|
loraRadio.SetPacketType(sx126x.SX126X_PACKET_TYPE_LORA)
|
|
loraRadio.SetRfFrequency(loraConf.Freq)
|
|
loraRadio.SetModulationParams(loraConf.Sf, loraConf.Bw, loraConf.Cr, loraConf.Ldr)
|
|
loraRadio.SetTxParams(loraConf.LoraTxPowerDBm, sx126x.SX126X_PA_RAMP_200U)
|
|
|
|
for {
|
|
println("2 seconds in Continuous Preamble")
|
|
loraRadio.SetStandby()
|
|
loraRadio.SetTxContinuousPreamble()
|
|
time.Sleep(2 * time.Second)
|
|
println("Continuous Preamble Stopped")
|
|
|
|
loraRadio.SetStandby()
|
|
time.Sleep(10 * time.Second)
|
|
|
|
println("2 seconds in Continuous Wave")
|
|
loraRadio.SetTxContinuousWave()
|
|
time.Sleep(2 * time.Second)
|
|
println(" Continuous Wave Stopped")
|
|
|
|
loraRadio.SetStandby()
|
|
time.Sleep(60 * time.Second)
|
|
}
|
|
}
|