Compare commits

..
12 Commits
5 changed files with 131 additions and 44 deletions

No files matched your search

+12
View File
@@ -0,0 +1,12 @@
# Lora 2 Serial
## Mapping rfm9x SPI Device to a Serial File Interface for usage with AX.25 Kiss
creates /tmp/rfmtty and /tmp/rfmtty_client
Attach using kissattach /tmp/rfmtty_client ax0 IP_ADDRESS
with configured axports
https://github.com/dmahony/LoRa-AX25-IP-Network/wiki/Installation-Instructions
http://packet-radio.info/index.php?id=packet-radio-unter-linux-mit-linpac
-35
View File
@@ -1,35 +0,0 @@
import os, subprocess, serial, time
# this script lets you emulate a serial device
# the client program should use the serial port file specifed by client_port
# if the port is a location that the user can't access (ex: /dev/ttyUSB0 often),
# sudo is required
class SerialEmulator(object):
def __init__(self, device_port='./ttydevice', client_port='./ttyclient'):
self.device_port = device_port
self.client_port = client_port
cmd=['/usr/bin/socat','-d','-d','PTY,link=%s,raw,echo=0' %
self.device_port, 'PTY,link=%s,raw,echo=0' % self.client_port]
self.proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
time.sleep(1)
self.serial = serial.Serial(self.device_port, 9600, rtscts=True, dsrdtr=True)
self.err = ''
self.out = ''
def write(self, out):
self.serial.write(out)
def read(self):
line = ''
while self.serial.inWaiting() > 0:
line += self.serial.read(1)
return line
def __del__(self):
self.stop()
def stop(self):
self.proc.kill()
self.out, self.err = self.proc.communicate()
+33 -9
View File
@@ -1,4 +1,4 @@
import serial, subprocess, time
import serial, time, threading
import busio
from digitalio import DigitalInOut, Direction, Pull
@@ -10,7 +10,7 @@ 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)
rfm = adafruit_rfm9x.RFM9x(spi, CS, RESET, 868.0, baudrate=20000000)
addr = '/tmp/rfmtty'
addr_client = '/tmp/rfmtty_client'
@@ -20,14 +20,13 @@ 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)
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:
packet = None
packet = rfm.receive()
ser_data = bytearray()
while ser.inWaiting() > 0:
while ser.inWaiting() > 0 and len(ser_data) <= packet_len:
recieved_byte = ser.read(1)
ser_data += recieved_byte
if ser_data == b'':
@@ -35,10 +34,35 @@ while True:
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 byte: {packet}')
print(f'Received lora RSSI: {rfm.last_rssi} SNR: {rfm.last_snr} data: {packet}')
ser.write(packet)
socat_proc.kill()
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:
pass
except KeyboardInterrupt:
print("Programm durch Benutzer unterbrochen.")
finally:
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()