Ich lerne Python und Asyncio und nachdem ich mit Asyncio für einen TCP-Client/Server erfolgreich war, habe ich meinen ersten Stab mit dem Erstellen eines seriellen Clients/Servers mit pyserial-asyncio-Ausführungen in Bash auf einem Raspberry Pi 5 mit Python 3.8 (ich kann die Version nicht ändern).
import asyncio
import serial_asyncio
class UARTProtocol(asyncio.Protocol):
def __init__(self):
self.transport = None
def connection_made(self, transport):
self.transport = transport
print('Port opened', transport)
def data_received(self, data):
print('Data received:', data.decode())
# Echo received data back (example)
self.transport.write(data)
# Close the connection if 'exit' is received
if data == b"exit\r":
self.transport.close()
def connection_lost(self, exc):
print('Port closed')
self.transport = None
def pause_writing(self):
print('pause writing')
print(self.transport.get_write_buffer_size())
def resume_writing(self):
print(self.transport.get_write_buffer_size())
print('resume writing')
async def run_uart_server():
loop = asyncio.get_running_loop()
try:
transport, protocol = await serial_asyncio.create_serial_connection(loop, UARTProtocol, '/dev/ttyAMA2', baudrate=9600)
print("UART server started.")
await asyncio.Future() # Run forever
except serial.serialutil.SerialException as e:
print(f"Error: Could not open serial port: {e}")
finally:
if transport:
transport.close()
if __name__ == "__main__":
asyncio.run(run_uart_server())
< /code>
und Client: < /p>
import asyncio
import serial_asyncio
async def uart_client(port, baudrate):
try:
reader, writer = await serial_asyncio.open_serial_connection(url=port, baudrate=baudrate)
print(f"Connected to {port} at {baudrate} bps")
async def receive_data():
while True:
try:
data = await reader.readline()
if data:
print(f"Received: {data.decode().strip()}")
except Exception as e:
print(f"Error reading data: {e}")
break
async def send_data():
while True:
message = input("Enter message to send (or 'exit' to quit): ")
if message.lower() == 'exit':
break
writer.write((message + '\n').encode())
# writer.write_eof()
await writer.drain()
print(f"Sent: {message}")
await asyncio.gather(receive_data(), send_data())
except serial.SerialException as e:
print(f"Error opening serial port: {e}")
finally:
if 'writer' in locals():
writer.close()
await writer.wait_closed()
print("Connection closed.")
if __name__ == "__main__":
asyncio.run(uart_client('/dev/ttyAMA1', 9600))
< /code>
Ich möchte, dass der Client mich für einen Text auffordert, der sofort an den Server gesendet und dort gedruckt wird. Ich kann den Client dazu bringen, mich für Text aufzufordern, aber der Server zeigt erst nach dem Eingeben von Exit
im Client die Verbindung, um die Verbindung zu schließen, und druckt dann den gesamten Text, den ich in der Client -Loop eingetragen habe. Aber dann fordert der Client mich nie wieder auf Eingaben auf.>
Ich lerne Python und Asyncio und nachdem ich mit Asyncio für einen TCP-Client/Server erfolgreich war, habe ich meinen ersten Stab mit dem Erstellen eines seriellen Clients/Servers mit pyserial-asyncio-Ausführungen in Bash auf einem Raspberry Pi 5 mit Python 3.8 (ich kann die Version nicht ändern).[code]import asyncio import serial_asyncio
class UARTProtocol(asyncio.Protocol): def __init__(self): self.transport = None
def connection_made(self, transport): self.transport = transport print('Port opened', transport)
def data_received(self, data): print('Data received:', data.decode()) # Echo received data back (example) self.transport.write(data) # Close the connection if 'exit' is received if data == b"exit\r": self.transport.close()
async def run_uart_server(): loop = asyncio.get_running_loop() try: transport, protocol = await serial_asyncio.create_serial_connection(loop, UARTProtocol, '/dev/ttyAMA2', baudrate=9600) print("UART server started.") await asyncio.Future() # Run forever except serial.serialutil.SerialException as e: print(f"Error: Could not open serial port: {e}") finally: if transport: transport.close()
if __name__ == "__main__": asyncio.run(run_uart_server()) < /code> und Client: < /p> import asyncio import serial_asyncio
async def uart_client(port, baudrate): try: reader, writer = await serial_asyncio.open_serial_connection(url=port, baudrate=baudrate) print(f"Connected to {port} at {baudrate} bps")
async def receive_data(): while True: try: data = await reader.readline() if data: print(f"Received: {data.decode().strip()}") except Exception as e: print(f"Error reading data: {e}") break
async def send_data(): while True: message = input("Enter message to send (or 'exit' to quit): ") if message.lower() == 'exit': break writer.write((message + '\n').encode()) # writer.write_eof() await writer.drain() print(f"Sent: {message}")
await asyncio.gather(receive_data(), send_data())
except serial.SerialException as e: print(f"Error opening serial port: {e}") finally: if 'writer' in locals(): writer.close() await writer.wait_closed() print("Connection closed.")
if __name__ == "__main__": asyncio.run(uart_client('/dev/ttyAMA1', 9600)) < /code> Ich möchte, dass der Client mich für einen Text auffordert, der sofort an den Server gesendet und dort gedruckt wird. Ich kann den Client dazu bringen, mich für Text aufzufordern, aber der Server zeigt erst nach dem Eingeben von Exit [/code] im Client die Verbindung, um die Verbindung zu schließen, und druckt dann den gesamten Text, den ich in der Client -Loop eingetragen habe. Aber dann fordert der Client mich nie wieder auf Eingaben auf.>
Ich verwende Python, um ein USB -Seriennerium (ein Nino TNC) zu interog. Ich habe 3 separate Systeme. 64 Bit. import serial
port = serial.Serial('COM3',57000) # open serial port
print(port.name) #...
Ich habe meinen clientseitigen Code wie diesen, in dem der konstante Socket_Path /tmp/my_socket ist:
#define SOCKET_PATH /tmp/my_socket
//rest of the code
Ich habe Probleme mit PHP (v8.2.25), curl (v7.29.0), OpenSSL (v1.0.2k) mit einer Anforderung blockiert, und ich denke, dies liegt an einem Mangel an TLSV1.3 -Unterstützung
Ich verwende den folgenden...