StromPi 3, nutzen mit .NET Core 3.0 (SerialPort)

313 views
0 Comments

Hallo, ich würde den Strompi 3 gerne mit .NET Core steuern, da ich aus verschiedenen Gründen mit C# arbeite und nicht in Python. Leider ist mein Wissen über die serielle Schnittstelle und die Erwartungen des Strompi3 an die serielle Kommunikation nicht ausreichend.
Die Konfiguration und das Öffnen des seriellen Ports (Listing 1) sind vergleichbar umgesetzt wie bei Python. Da der Port geöffnet ohne Exception wird, sollte das erfolgreich sein.
Bei der Umsetzung der „Status-Abfrage“ ist der python-code nicht so 1:1 portierbar und ich habe mit read(), readline() und den sleeps() einiges erfolglos versucht: Das serielle Schreiben von „quit“ und „CR“ und „status-rpi“ und „CR“ mit den 2 Pausen ist vergleichbar umgesetzt, aber es scheint keine Wirkung zu haben, da die serielle Schnittstelle (StromPi3) keine Antwort schickt (Readbuffer ist immer leer).
Da hänge ich nun fest: Die serielle Schnittstelle schein i.O. zu sein, aber was genau erwartet der StromPi3 als Input, um etwas zurück zu senden ? Die fast 1:1-Portierung von Python-Code war nicht erfolgreich. Gibt es weitere Informationen dazu ?
Für Hinweise wäre ich sehr dankbar !
Lg  Helmut

PS: Der Aufruf von „sudo python3 StromPi3_Status.py“ ist erfolgreich, die anschliessend gestartete .Net Core-App „serialConsoleTest.dll“ (mit dem beschriebenem Inhalt der Listings) leider nicht.

Listing 1:
/// <summary>
/// Connect the serial interface of StromPi3
/// </summary>
public void Connect()
{
int baudRate = 38400;
string portName = @“/dev/serial0″;
int dataBits = 8;
StopBits stopBits = StopBits.One;
Parity parity = Parity.None;
int readTimeout = 1500;
int writeTimeout = 1500;
_portParameter = new SerialPortParameter(portName, baudRate, parity, dataBits, stopBits, readTimeout, writeTimeout);
if (_serialPort == null)
{
_serialPort = _portParameter.GetSerialPort();
}
Console.WriteLine($“connected to {_serialPort}“);
if (_serialPort.IsOpen) {_serialPort.Close();}
_serialPort.Open();
Console.WriteLine($“serial port is open „);
}
Listing 2:
private int breakShort = 100;
private int breakLong = 500;
/// imitate StromPi3_Status.py
public void ReadStatus()
{
_serialPort.Write(„quit“);
Thread.Sleep(breakShort);
_serialPort.Write(„\r“);        // \x0d = {13} Carriage Return
Thread.Sleep(breakLong);
_serialPort.Write(„status-rpi“);
Thread.Sleep(1000);
_serialPort.Write(„\r“);
Console.WriteLine(„1. serial read(9999)“);
char[] buffer = new char[9999];
int sp3_time = _serialPort.Read(buffer, 0, 9999);   // imitate serial.readline(9999)
Console.WriteLine($“1. = ({sp3_time})“);
_serialPort.Close();
}

Answered question

6 Answers

Guten Tag Helmut,
da wir das StromPi Projekt als Open-Source-Projekt betreiben ist es natürlich ok für uns. Wir begrüßen es wenn Mitglieder der Community Ihre Arbeit mit anderen teilen wollen.
Mit freundlichen Grüßen
Nils (Joy-IT)

Answered question
You are viewing 1 out of 6 answers, click here to view all answers.
Write your answer.