Python und Arduino Verbindung über Ethernet

Hallo,

für ein Projekt im Modellbau bereich will ich einen Arduino Mega 2560 mit Ethernet Shield verwenden
der Arduino soll befehle von einem Python Programm erhalten.

Python Programm → Netzwerk → Arduino → LED Ein/Aus

das Python Programm

import sys
import socket

from PyQt5 import QtCore, QtGui, uic
from PyQt5.QtGui import *
from PyQt5.QtWidgets import QDialog
from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QTreeWidgetItem
from PyQt5.QtCore import QUrl


class MainWindow(QDialog):
    def __init__(self, *args):
        QDialog.__init__(self, *args)
        uic.loadUi("gui/hauptfenster.ui",self)

        self.pin47.stateChanged.connect(self.funktion47)


    def funktion47(self):
        IPAdresse=("192.168.1.216")
        Port=23
        Buffer=1024
        server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        Nachricht1="U"
        Nachricht2="47"
        
        print ("Nachricht byte Codieren")
        Nachricht1=bytes(Nachricht1,"utf-8")
        Nachricht2=bytes(Nachricht2,"utf-8")
        
        print ("Nachricht senden: ", Nachricht1)
        print ("Nachricht senden: ", Nachricht2)
        server.connect((IPAdresse,Port))
        server.send(Nachricht1)
        server.send(Nachricht2)
        data=server.recv(Buffer)
        print("Daten retour: ",data)
        print ("verbindung schliessen")
        server.close()
        
  


#####################################################
##
## Aufrufen des Main Windows
##
#####################################################
if __name__ == "__main__":
    #Rechnername=socket.gethostname()
    #print (Rechnername)
    app = QApplication(sys.argv)
    mainwindow = MainWindow()
    mainwindow.move(0,0)
    mainwindow.setWindowTitle("Pin Steuerung")
    mainwindow.show()
    sys.exit(app.exec_())

und hier das Sketch

#include <SPI.h>
#include <Ethernet.h>


// MAC und IP Kunfiguration
byte mac[]={0x90,0xA2,0xDA,0x00,0xEE,0xF3};
IPAddress ip(192,168,1,216);
IPAddress gateway (192,168,1,254);
IPAddress subnet (255,255,255,0);

EthernetServer server(23);

const int Pin47=47;


void setup() {
  // Ethernet server init
  Ethernet.begin(mac, ip);
  // Server starten
  server.begin();
  // Serielle Konsole öffnen Debug
  Serial.begin(9600);
  
  pinMode(Pin47, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  EthernetClient client = server.available();
  //Serial.print("Client: ");
  //Serial.println(client);
  if (client) {
    char command=client.read();
    byte pinnumber =client.read();
    
    switch (command) {
        case 'U':
            Serial.println("        Commando Lesen");
            Serial.print("Commando: ");
            Serial.println(command);

    
            Serial.print("Pin: ");
            Serial.println(pinnumber);
            Serial.println(" ");
    
            Serial.println("        Commando Lesen Fertig");    
    } // Switch ende
    client.write("Empfang Abgeschlossen");
    client.stop(); // client Verbindung stopen
  }
    
}

Das Commando kommt richtig hinüber also U bleibt U
bei bin 47 bekommen ich als ausgabe die 52

also habe ich irgendwo einen fehler Drinnen aber ich komme im Moment nicht darauf wo dieser steckt.

mfg Peter

Hallo Peter, Du sendest "U" "4" "7" und wertest "U" "4" aus. Das Zeichen "4" ist dezimal 52. Du brauchst dreimal client.read().

Vermute ich zumindest. :)