removed socat, using pty
This commit is contained in:
parent
2cae787e2a
commit
d8cae4b086
69
main.py
69
main.py
|
@ -1,4 +1,4 @@
|
||||||
import serial, subprocess, time
|
import serial, time, pty, os, threading
|
||||||
|
|
||||||
import busio
|
import busio
|
||||||
from digitalio import DigitalInOut, Direction, Pull
|
from digitalio import DigitalInOut, Direction, Pull
|
||||||
|
@ -12,34 +12,51 @@ spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
|
||||||
#rfm = adafruit_rfm69.RFM69(spi, CS, RESET, 868.0)
|
#rfm = adafruit_rfm69.RFM69(spi, CS, RESET, 868.0)
|
||||||
rfm = adafruit_rfm9x.RFM9x(spi, CS, RESET, 868.0, baudrate=20000000)
|
rfm = adafruit_rfm9x.RFM9x(spi, CS, RESET, 868.0, baudrate=20000000)
|
||||||
|
|
||||||
addr = '/tmp/rfmtty'
|
def serial_port_reader(ser, rfm):
|
||||||
addr_client = '/tmp/rfmtty_client'
|
while True:
|
||||||
|
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)
|
||||||
|
|
||||||
|
def serial_port_writer(ser, rfm):
|
||||||
|
while True:
|
||||||
|
packet = None
|
||||||
|
packet = rfm.receive()
|
||||||
|
if packet is None:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
print(f'Received lora RSSI: {rfm.last_rssi} SNR: {rfm.last_snr} data: {packet}')
|
||||||
|
ser.write(packet)
|
||||||
|
|
||||||
|
|
||||||
baudrate = 115200
|
baudrate = 115200
|
||||||
|
packet_len = 251
|
||||||
|
|
||||||
cmd=['/usr/bin/socat','-d','-d','PTY,link=%s,raw,echo=0,b%d' %(addr, baudrate), 'PTY,link=%s,raw,echo=0,b%d' %(addr_client, baudrate)]
|
master, slave = pty.openpty()
|
||||||
socat_proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
port_name = os.ttyname(slave)
|
||||||
time.sleep(1)
|
print("Serieller Port: %s" % port_name)
|
||||||
|
ser = serial.Serial(port_name, baudrate=baudrate)
|
||||||
|
|
||||||
ser = serial.Serial(addr, baudrate=baudrate)
|
reader_thread = threading.Thread(target=serial_port_reader, args=(ser,rfm), daemon=True)
|
||||||
|
reader_thread.start()
|
||||||
|
writer_thread = threading.Thread(target=serial_port_writer, args=(ser,rfm), daemon=True)
|
||||||
|
writer_thread.start()
|
||||||
|
|
||||||
packet_len = 120
|
try:
|
||||||
while True:
|
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
|
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()
|
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
print("Programm durch Benutzer unterbrochen.")
|
||||||
|
|
||||||
|
finally:
|
||||||
|
virtual_serial_port.close()
|
||||||
|
reader_thread.join()
|
||||||
|
writer_thread.join()
|
Loading…
Reference in New Issue