39 lines
1.0 KiB
Python
39 lines
1.0 KiB
Python
import serial, subprocess, time
|
|
|
|
import busio
|
|
from digitalio import DigitalInOut, Direction, Pull
|
|
import board
|
|
|
|
from pyLoraRFM9x import LoRa, ModemConfig
|
|
|
|
|
|
addr = '/tmp/rfmtty'
|
|
addr_client = '/tmp/rfmtty_client'
|
|
|
|
cmd=['/usr/bin/socat','-d','-d','PTY,link=%s,raw,echo=0' %
|
|
addr, 'PTY,link=%s,raw,echo=0' % addr_client]
|
|
socat_proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
time.sleep(1)
|
|
|
|
ser = serial.serial_for_url(addr)
|
|
|
|
def on_recv(payload):
|
|
print(f'Received lora data: {payload.message}')
|
|
ser.write(payload.message)
|
|
|
|
lora_address = 2
|
|
lora = LoRa(1, 5, lora_address, reset_pin = 25, modem_config=ModemConfig.Bw125Cr45Sf128, tx_power=14, receive_all=True)
|
|
lora.on_recv = on_recv
|
|
|
|
while True:
|
|
ser_data = bytearray()
|
|
while ser.inWaiting() > 0 and len(ser_data) <= 248:
|
|
recieved_byte = ser.read(1)
|
|
ser_data += recieved_byte
|
|
if ser_data == b'':
|
|
pass
|
|
else:
|
|
print(f'Received serial data: {ser_data}')
|
|
lora.send(bytes(ser_data), 255)
|
|
|
|
socat_proc.kill() |