83 lines
2.7 KiB
Python
83 lines
2.7 KiB
Python
"""
|
|
LoRa-Training / led_sender - Send a simple lora message frequently
|
|
Copyright (C) 2024 Benjamin Burkhardt
|
|
|
|
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
"""
|
|
|
|
|
|
from SX127x import SX127x
|
|
from machine import Pin, SPI
|
|
from time import sleep
|
|
|
|
|
|
def send(lora, interrupt_pin=None, lcd_connected=True):
|
|
counter = 0
|
|
print("Starting LoRa Sender")
|
|
|
|
if interrupt_pin:
|
|
print(f"An interrupt pin has been configured (GPIO {interrupt_pin})")
|
|
int_pin = Pin(interrupt_pin, Pin.OUT)
|
|
|
|
if lcd_connected:
|
|
from PCF8574 import I2C_LCD
|
|
from machine import I2C
|
|
_i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000)
|
|
lcd = I2C_LCD(_i2c, 0x27, 2, 16)
|
|
|
|
lcd.move_to(0,0)
|
|
lcd.putstr(f"LoRa! TX................")
|
|
|
|
while True:
|
|
payload = f"Hello ({counter})"
|
|
lora.println(payload)
|
|
lora.blink_led()
|
|
print(f"Sent b'{payload}' RSSI: {lora.packet_rssi()}dB")
|
|
if interrupt_pin:
|
|
if int_pin.value() == 1:
|
|
print("Interrupt pin pulled high!")
|
|
break
|
|
if lcd_connected:
|
|
lcd.move_to(0,1)
|
|
lcd.putstr(f"{str(payload).lstrip('b\'').rstrip('\'')}{" ".join("" for i in range(17-len(payload)))}")
|
|
lcd.move_to(0,0)
|
|
lcd.putstr("LoRa! TX")
|
|
|
|
counter += 1
|
|
sleep(5)
|
|
|
|
|
|
device_spi = SPI(baudrate = 10000000,
|
|
polarity = 0, phase = 0, bits = 8, firstbit = SPI.MSB, id=0,
|
|
sck = Pin(2, Pin.OUT, Pin.PULL_DOWN),
|
|
mosi = Pin(3, Pin.OUT, Pin.PULL_UP),
|
|
miso = Pin(4, Pin.IN, Pin.PULL_UP))
|
|
|
|
|
|
parameters = {
|
|
'frequency': 433E6,
|
|
'tx_power_level': 10,
|
|
'signal_bandwidth': 125E3,
|
|
'spreading_factor': 7,
|
|
'coding_rate': 5,
|
|
'preamble_length': 8,
|
|
'implicit_header': False,
|
|
'sync_word': 0x12,
|
|
'enable_CRC': False,
|
|
'invert_IQ': False,
|
|
}
|
|
|
|
lora = SX127x(device_spi, pins={"dio_0": 6, "ss": 5, "led": 27}, parameters=parameters)
|
|
|
|
|
|
# for modularity
|
|
def run():
|
|
send(lora, 7, lcd_connected=True)
|
|
|
|
if __name__ == '__main__':
|
|
run()
|