import serial, subprocess, time import busio from digitalio import DigitalInOut, Direction, Pull import board #import adafruit_rfm69 import adafruit_rfm9x CS = DigitalInOut(board.CE1) RESET = DigitalInOut(board.D25) spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO) #rfm = adafruit_rfm69.RFM69(spi, CS, RESET, 868.0) rfm = adafruit_rfm9x.RFM9x(spi, CS, RESET, 868.0, baudrate=20000000) addr = '/tmp/rfmtty' addr_client = '/tmp/rfmtty_client' baudrate = 115200 cmd=['/usr/bin/socat','-d','-d','PTY,link=%s,rawer,baud=%d' %(addr, baudrate), 'PTY,link=%s,rawer,baud=%d' %(addr_client, baudrate)] socat_proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) time.sleep(1) ser = serial.Serial(addr, baudrate=baudrate) packet_len = 120 while True: packet = None packet = rfm.receive() ser_data = bytearray() while ser.inWaiting() > 0 and len(ser_data) <= packet_len: recieved_byte = ser.read(1) ser_data += recieved_byte if ser_data == b'': pass else: print(f'Received serial data: {ser_data}') rfm.send(ser_data) if packet is None: pass else: print(f'Received lora data: {packet}') print(f'RSSI: {rfm.last_rssi} SNR: {rfm.last_snr}') ser.write(packet) socat_proc.kill()