Compare commits

...
13 Commits
Author SHA1 Message Date
hmrhkr 818c4e1ad3 added rfm init error msg 2024-01-29 11:55:11 +01:00
hmrhkr 5e2965d274 readded socat kill 2024-01-09 10:25:14 +01:00
hmrhkr e99a7e2012 moved variables for baudrate and packet_len 2024-01-09 10:21:51 +01:00
hmrhkr 82836a4ea3 readed subprocess import 2024-01-09 10:20:22 +01:00
hmrhkr f80676e266 changed back to socat keeping threaded model 2024-01-09 10:18:48 +01:00
hmrhkr ece7a3941b fixed ser reference in closing 2024-01-08 18:23:19 +01:00
hmrhkr d8cae4b086 removed socat, using pty 2024-01-08 18:21:45 +01:00
hmrhkr 2cae787e2a added socat echo=0 option back 2024-01-08 18:00:26 +01:00
hmrhkr 94be82dca6 adjusted socat baudrate option 2024-01-08 17:57:30 +01:00
hmrhkr 6b8187c2a4 added baudrate setting 2024-01-08 17:52:28 +01:00
hmrhkr a72aa16333 added rssi and snr reading, set baudrate, set packet_len to 120 2024-01-08 17:15:08 +01:00
hmrhkr 549e74daff added test server and client 2024-01-08 16:57:29 +01:00
hmrhkr ea3879fbde changed len constraint 2024-01-08 16:52:48 +01:00
3 changed files with 136 additions and 20 deletions

No files matched your search

+50 -20
View File
@@ -1,4 +1,4 @@
import serial, subprocess, time import serial, time, threading, subprocess
import busio import busio
from digitalio import DigitalInOut, Direction, Pull from digitalio import DigitalInOut, Direction, Pull
@@ -9,36 +9,66 @@ import adafruit_rfm9x
CS = DigitalInOut(board.CE1) CS = DigitalInOut(board.CE1)
RESET = DigitalInOut(board.D25) RESET = DigitalInOut(board.D25)
spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO) spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
try:
rfm = adafruit_rfm69.RFM69(spi, CS, RESET, 868.0)
except RuntimeError as error:
print('RFM69 Error: ', error)
#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) #rfm = adafruit_rfm9x.RFM9x(spi, CS, RESET, 868.0, baudrate=20000000)
addr = '/tmp/rfmtty' addr = '/tmp/rfmtty'
addr_client = '/tmp/rfmtty_client' addr_client = '/tmp/rfmtty_client'
baudrate = 115200
packet_len = 251
cmd=['/usr/bin/socat','-d','-d','PTY,link=%s,raw,echo=0' % cmd=['/usr/bin/socat','-d','-d','PTY,link=%s,raw,echo=0' %
addr, 'PTY,link=%s,raw,echo=0' % addr_client] addr, 'PTY,link=%s,raw,echo=0' % addr_client]
socat_proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) socat_proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
time.sleep(1) time.sleep(1)
ser = serial.serial_for_url(addr) print("Serieller Port: %s" % addr)
ser = serial.Serial(addr, baudrate=baudrate)
def serial_port_reader(ser, rfm):
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)
while True: reader_thread = threading.Thread(target=serial_port_reader, args=(ser,rfm), daemon=True)
packet = None reader_thread.start()
packet = rfm.receive() writer_thread = threading.Thread(target=serial_port_writer, args=(ser,rfm), daemon=True)
ser_data = bytearray() writer_thread.start()
while ser.inWaiting() > 0 and len(ser_data) <= 252:
recieved_byte = ser.read(1) try:
ser_data += recieved_byte while True:
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 byte: {packet}')
ser.write(packet)
socat_proc.kill()
except KeyboardInterrupt:
print("Programm durch Benutzer unterbrochen.")
finally:
socat_proc.kill()
ser.close()
reader_thread.join()
writer_thread.join()
+51
View File
@@ -0,0 +1,51 @@
import socket
import random
import string
import time
def generate_random_data(size):
return ''.join(random.choices(string.ascii_letters + string.digits, k=size)).encode('utf-8')
def start_client():
# Definiere Host und Port
host = '127.0.0.1'
port = 12345
while True:
# Erstelle einen Socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
# Verbinde zum Server
client_socket.connect((host, port))
print(f"Connected to {host}:{port}")
# Generiere eine zufällige Bytefolge
data_to_send = generate_random_data(50)
# Sende die Daten an den Server
client_socket.sendall(data_to_send)
print(f"Sent data: {data_to_send.decode('utf-8')}")
# Empfange die Antwort
received_data = client_socket.recv(1024)
print(f"Received data: {received_data.decode('utf-8')}")
# Überprüfe, ob die Antwort die gesendeten Daten sind
if received_data == data_to_send:
print("Server response matches the sent data.")
else:
print("Server response does not match the sent data.")
except Exception as e:
print(f"Error: {e}")
finally:
# Schließe die Verbindung zum Server
client_socket.close()
# Warte für eine kurze Zeit, bevor die nächste Anfrage gesendet wird
time.sleep(2)
if __name__ == "__main__":
start_client()
+35
View File
@@ -0,0 +1,35 @@
import socket
def start_server():
# Definiere Host und Port
host = '127.0.0.1'
port = 12345
# Erstelle einen Socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Binde den Socket an Host und Port
server_socket.bind((host, port))
# Warte auf Verbindungen
server_socket.listen()
print(f"Server listening on {host}:{port}...")
while True:
# Warte auf eine Verbindung
client_socket, client_address = server_socket.accept()
print(f"Connection from {client_address}")
# Empfange und sende Daten zurück
data = client_socket.recv(1024)
print(f"Received data: {data.decode('utf-8')}")
# Sende die erhaltenen Daten zurück
client_socket.sendall(data)
# Schließe die Verbindung zum Client
client_socket.close()
if __name__ == "__main__":
start_server()