Compare commits

..

3 Commits

Author SHA1 Message Date
Paul 1a089a38a1 set receive_all and no wait send 2024-01-08 16:50:08 +01:00
Paul c68c360abf typecasting ser_data to bytes 2024-01-08 16:41:17 +01:00
Paul 6843dc9714 rebuild for pylora 2024-01-08 16:21:07 +01:00
3 changed files with 20 additions and 135 deletions

69
main.py
View File

@ -1,16 +1,11 @@
import serial, time, threading
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)
from pyLoraRFM9x import LoRa, ModemConfig
addr = '/tmp/rfmtty'
addr_client = '/tmp/rfmtty_client'
@ -20,49 +15,25 @@ cmd=['/usr/bin/socat','-d','-d','PTY,link=%s,raw,echo=0' %
socat_proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
time.sleep(1)
print("Serieller Port: %s" % addr)
ser = serial.Serial(addr, baudrate=baudrate)
ser = serial.serial_for_url(addr)
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 on_recv(payload):
print(f'Received lora data: {payload.message}')
ser.write(payload.message)
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)
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
baudrate = 115200
packet_len = 251
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()
try:
while True:
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)
except KeyboardInterrupt:
print("Programm durch Benutzer unterbrochen.")
finally:
ser.close()
reader_thread.join()
writer_thread.join()
socat_proc.kill()

View File

@ -1,51 +0,0 @@
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()

View File

@ -1,35 +0,0 @@
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()