Compare commits
3 Commits
main
...
pyLoraRFM9
Author | SHA1 | Date |
---|---|---|
|
1a089a38a1 | |
|
c68c360abf | |
|
6843dc9714 |
59
main.py
59
main.py
|
@ -1,16 +1,11 @@
|
||||||
import serial, time, threading
|
import serial, subprocess, time
|
||||||
|
|
||||||
import busio
|
import busio
|
||||||
from digitalio import DigitalInOut, Direction, Pull
|
from digitalio import DigitalInOut, Direction, Pull
|
||||||
import board
|
import board
|
||||||
#import adafruit_rfm69
|
|
||||||
import adafruit_rfm9x
|
|
||||||
|
|
||||||
CS = DigitalInOut(board.CE1)
|
from pyLoraRFM9x import LoRa, ModemConfig
|
||||||
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 = '/tmp/rfmtty'
|
||||||
addr_client = '/tmp/rfmtty_client'
|
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)
|
socat_proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
|
||||||
print("Serieller Port: %s" % addr)
|
ser = serial.serial_for_url(addr)
|
||||||
ser = serial.Serial(addr, baudrate=baudrate)
|
|
||||||
|
def on_recv(payload):
|
||||||
|
print(f'Received lora data: {payload.message}')
|
||||||
|
ser.write(payload.message)
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
def serial_port_reader(ser, rfm):
|
|
||||||
while True:
|
while True:
|
||||||
ser_data = bytearray()
|
ser_data = bytearray()
|
||||||
while ser.inWaiting() > 0 and len(ser_data) <= packet_len:
|
while ser.inWaiting() > 0 and len(ser_data) <= 248:
|
||||||
recieved_byte = ser.read(1)
|
recieved_byte = ser.read(1)
|
||||||
ser_data += recieved_byte
|
ser_data += recieved_byte
|
||||||
if ser_data == b'':
|
if ser_data == b'':
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
print(f'Received serial data: {ser_data}')
|
print(f'Received serial data: {ser_data}')
|
||||||
rfm.send(ser_data)
|
lora.send(bytes(ser_data), 255)
|
||||||
|
|
||||||
def serial_port_writer(ser, rfm):
|
socat_proc.kill()
|
||||||
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
|
|
||||||
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()
|
|
|
@ -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()
|
|
|
@ -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()
|
|
Loading…
Reference in New Issue