mirror of
https://github.com/tinygo-org/drivers.git
synced 2026-08-05 07:27:49 +00:00
sx127x: Ajout du support d'interruptions RXTimeout (DIO1)
This commit is contained in:
committed by
Ron Evans
parent
dc4f0c974a
commit
f15eec822f
@@ -1,7 +1,7 @@
|
||||
package main
|
||||
|
||||
// This example code demonstrates Lora RX/TX.
|
||||
// It has been tested with bluepill and SX1276 (RFM95W board)
|
||||
// This example code demonstrates Lora RX/TX With SX127x driver
|
||||
// You need to connect SPI, DIO0 and DIO1 to use.
|
||||
|
||||
import (
|
||||
"machine"
|
||||
@@ -11,9 +11,10 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
FREQ = 868100000
|
||||
LORA_DEFAULT_RXTIMEOUT_MS = 1000
|
||||
LORA_DEFAULT_TXTIMEOUT_MS = 5000
|
||||
|
||||
DIO_PIN_CHANGE = machine.PinRising
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -23,27 +24,37 @@ var (
|
||||
SX127X_PIN_RST = machine.PB9
|
||||
SX127X_PIN_CS = machine.PB8
|
||||
SX127X_PIN_DIO0 = machine.PA0
|
||||
SX127X_PIN_DIO1 = machine.PA1
|
||||
SX127X_SPI = machine.SPI0
|
||||
|
||||
txmsg = []byte("Hello TinyGO")
|
||||
|
||||
// Prepare for Lora Operation
|
||||
loraConf = sx127x.LoraConfig{
|
||||
Freq: 868100000,
|
||||
Bw: sx127x.SX127X_LORA_BW_125_0,
|
||||
Sf: sx127x.SX127X_LORA_SF9,
|
||||
Cr: sx127x.SX127X_LORA_CR_4_7,
|
||||
HeaderType: sx127x.SX127X_LORA_HEADER_EXPLICIT,
|
||||
Preamble: 12,
|
||||
Iq: sx127x.SX127X_LORA_IQ_STANDARD,
|
||||
Crc: sx127x.SX127X_LORA_CRC_ON,
|
||||
SyncWord: sx127x.SX127X_LORA_MAC_PUBLIC_SYNCWORD,
|
||||
LoraTxPowerDBm: 20,
|
||||
}
|
||||
)
|
||||
|
||||
func main() {
|
||||
println("\n# TinyGo Lora continuous Wave/Preamble test")
|
||||
println("# -----------------------------------------")
|
||||
println("\n# TinyGo Driver SX127X RX/TX example")
|
||||
println("# ------------------------------------")
|
||||
|
||||
println("main: configuring LED/SPI/DIO/IRQ")
|
||||
machine.LED.Configure(machine.PinConfig{Mode: machine.PinOutput})
|
||||
SX127X_PIN_RST.Configure(machine.PinConfig{Mode: machine.PinOutput})
|
||||
SX127X_PIN_CS.Configure(machine.PinConfig{Mode: machine.PinOutput})
|
||||
SX127X_PIN_DIO0.Configure(machine.PinConfig{Mode: machine.PinInputPulldown})
|
||||
SX127X_PIN_DIO0.Configure(machine.PinConfig{Mode: machine.PinInputPullup})
|
||||
SX127X_PIN_DIO1.Configure(machine.PinConfig{Mode: machine.PinInputPullup})
|
||||
SX127X_SPI.Configure(machine.SPIConfig{Frequency: 500000, Mode: 0})
|
||||
err := SX127X_PIN_DIO0.SetInterrupt(machine.PinRising, func(machine.Pin) { // Int handler
|
||||
loraRadio.HandleInterrupt()
|
||||
})
|
||||
if err != nil {
|
||||
panic("main: Can't configure DIO int handler")
|
||||
}
|
||||
|
||||
println("main: create and start SX127x driver")
|
||||
loraRadio = sx127x.New(SX127X_SPI, SX127X_PIN_CS, SX127X_PIN_RST)
|
||||
@@ -55,18 +66,28 @@ func main() {
|
||||
println("main: sx127x found")
|
||||
}
|
||||
|
||||
// Setup DIO0 interrupt Handling
|
||||
err := SX127X_PIN_DIO0.SetInterrupt(DIO_PIN_CHANGE, func(machine.Pin) {
|
||||
if SX127X_PIN_DIO0.Get() {
|
||||
loraRadio.HandleInterrupt()
|
||||
}
|
||||
})
|
||||
if err != nil {
|
||||
println("could not configure DIO0 pin interrupt:", err.Error())
|
||||
}
|
||||
|
||||
// Setup DIO1 interrupt Handling
|
||||
err = SX127X_PIN_DIO1.SetInterrupt(DIO_PIN_CHANGE, func(machine.Pin) {
|
||||
if SX127X_PIN_DIO1.Get() {
|
||||
loraRadio.HandleInterrupt()
|
||||
}
|
||||
})
|
||||
if err != nil {
|
||||
println("could not configure DIO1 pin interrupt:", err.Error())
|
||||
}
|
||||
|
||||
println("main: Configure lora modulation")
|
||||
loraRadio.SetOpModeLora()
|
||||
loraRadio.SetOpMode(sx127x.SX127X_OPMODE_SLEEP)
|
||||
loraRadio.SetTxPower(11, true)
|
||||
loraRadio.SetLoraFrequency(FREQ)
|
||||
loraRadio.SetLoraBandwidth(sx127x.SX127X_LORA_BW_125_0)
|
||||
loraRadio.SetLoraSpreadingFactor(sx127x.SX127X_LORA_SF11)
|
||||
loraRadio.SetLoraCodingRate(sx127x.SX127X_LORA_CR_4_5)
|
||||
loraRadio.SetLoraIqMode(sx127x.SX127X_LORA_IQ_STANDARD)
|
||||
loraRadio.SetLoraCrc(true)
|
||||
loraRadio.SetLoraHeaderMode(sx127x.SX127X_LORA_HEADER_EXPLICIT)
|
||||
loraRadio.SetLowDataRateOptim(sx127x.SX127X_LOW_DATARATE_OPTIM_OFF)
|
||||
loraRadio.LoraConfig(loraConf)
|
||||
|
||||
// Get uint32 from RSSI
|
||||
rand32 := loraRadio.RandomU32()
|
||||
@@ -78,7 +99,7 @@ func main() {
|
||||
machine.LED.Set(!machine.LED.Get())
|
||||
|
||||
println("main: Receiving Lora for 10 seconds")
|
||||
for int(time.Now().Sub(tStart).Seconds()) < 60 {
|
||||
for int(time.Now().Sub(tStart).Seconds()) < 10 {
|
||||
buf, err := loraRadio.LoraRx(LORA_DEFAULT_RXTIMEOUT_MS)
|
||||
if err != nil {
|
||||
println("RX Error: ", err)
|
||||
@@ -87,7 +108,6 @@ func main() {
|
||||
}
|
||||
}
|
||||
println("main: End Lora RX")
|
||||
|
||||
println("LORA TX size=", len(txmsg), " -> ", string(txmsg))
|
||||
err := loraRadio.LoraTx(txmsg, LORA_DEFAULT_TXTIMEOUT_MS)
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user