Modul zur Nutzung der Raspberry Pi GPIO

RPI v2 machte bei mir nie Probleme, RPI v3 schon eher. Ich starte PIGPIOD jetzt immer über crontab, seit dem keine Probleme mehr.

sudo crontab -e
@reboot /usr/local/bin/pigpiod

Gruss
Bernd

Hat jemand Erfahrung ob sich der
stapelbarer CC1101 Transceiver für Raspberry Pi
in IP-Symcon nutzten lässt?

Meine Hoffnung war, das Teil ähnlich CUN zu nutzen. Habs aber nicht hingekriegt und dann nur die Antenne für ein anderes Projekt genutzt.:smiley:

Vielleicht kann hier tommi helfen, der blickt da ziemlich gut durch.

irgendwas läuft in dem Modul nicht so rund, es bleiben immer die Scripte hängen und dann reagiert garnichts mehr und ich muss mein Raspi neustarten? siehe Anhang?

…irgendwie hat sich Dein IPS aufgehängt.
Ist das schon öfter vorgekommen?
Ansonsten mal die Anzahl der zulässigen Parallelen Threads erhöhen…

Joachim

ja wenn ich das erhöhe, dann hängt sich der ganze raspi auf. ich glaub ich weiß warum. weil ich alle 5 sekunden den i2c co2 sensor auslese. habs jetzt mal auf 30 sekunden hochgestellt

Gesendet von meinem SM-G930F mit Tapatalk

wenn es der hier ist, sollte er sich mit culfw genauso wie ein COC oder CUN verhalten und über das CUL Modul mit einem SerialPort IO steuerbar sein. Nicht vergessen die UART am PI vorher freizugeben.

Tommi

Hallo,

teste gerade mit einem Nextion-Display. Die Funktionen I2GDSP_SetBrightness, I2GDSP_Reset, I2GDSP_Send funktionieren schon.
Das setzen einer Zahl funktioniert z.B. mit:

I2GDSP_Send(45852 /*[Zk\Zk-GPIO\IPS2GPIO_Display]*/,"n0.val=35");

Das verändern eines Textfeldes habe ich jedoch noch nicht geschafft

I2GDSP_Send(45852 /*[Zk\Zk-GPIO\IPS2GPIO_Display]*/,"page0.t0.txt=21,7 °C");

oder

I2GDSP_Send(45852 /*[Zk\Zk-GPIO\IPS2GPIO_Display]*/,"t0.txt=21,7 °C");

Verständnissproblem habe ich auch noch bei Befehlen in der anderen Richtung (von Nextion zu IPSymcon). Im Nextion-Dispaly habe ich einem Butten zugewiesen

get "AKTIV"

Bei Tastendruck auf dem Nextion-Dispaly werden dann sehr viele Zeichen empfangen s. Bild.jpg aber nicht das was ich erwartet hätte „AKTIV“.

Ebenfalls ist mir nicht klar wann und durch welches Ereignis die angelegten Variablen s. Bild2.jpg geschrieben werden.

Hat hierzu schon jemand Erfahrungen ?

Gruß
zkra

Ich weiß nicht ob Joachim den Schlußaccord in seinem Prg automatisch sendet, ansonsten muß immer \xFF\xFF\xFF am Ende stehen

 SPRT_SendText(34638, "dims=5\xFF\xFF\xFF"); //Sendet ein 5% Dimmwert und speichert es ab  

Gruß Helmut

Hallo zkra,

der „Schlussakkord“ wird automatisch bei jeder Sendung hinzugefügt. Die Daten die dort im Debug des ClientSocket ankommen, kannst Du so noch nicht gebrauchen.

Die Daten sollten in den Variablen des Moduls ankommen - bei „AKTIV“ sollte das aus meiner Erinnerung im „StringReturn“ sein.

Bei der von Dir angesprochen „t0.txt=21,7 °C“ funktioniert das wahrscheinlich nicht, weil ein Leerzeichen darin vorhanden ist. Um den Fehler zu isolieren, probiere es mal bitte ohne Leerzeichen…

Joachim

Hallo Joachim,

das Leerzeichen scheint es nicht zu sein.

I2GDSP_Send(45852 /*[Zk\Zk-GPIO\IPS2GPIO_Display]*/,"t0.txt=zk"); 

geht auch nicht.

Neben

I2GDSP_Send(45852 /*[Zk\Zk-GPIO\IPS2GPIO_Display]*/,"n0.val=35");

funktioniert auch

I2GDSP_Send(45852 /*[Zk\Zk-GPIO\IPS2GPIO_Display]*/,"p0.pic=0");

Anderes Thema:
Über

I2GOUT_Toggle_Status(45275 /*[Zk\Zk-GPIO\IPS2GPIO_Output_24]*/);

toggle ich einen Output, funktioniert auch wunderbar. Im Meldungsfenster erhalte ich jedoch IPS2GPIO Notify Meldungen „Pin 15 Value ->“, was bedeutet diese Meldung ?

Bild.jpg

Gruß
Rainer

Du solltest vom Display NUR Texte mit einem Trennzeichen verschicken, diese Hexzeichen im Editor würde ich nicht anhaken, diese Meldungen zu IP-Symcon sind unübersichtlich.

Eine Textmitteilung Mit einem Hinweis was gedrückt/getastet oder gemeldet werden soll ist viel übersichtlicher.

Ich schreibe zB beim Tasterdruck zur Esszimmerleuchte „Esszimmerleuchte ;“ Das Semikolon als Trennzeichen für die IPS Splitterinstanz

Und im Debugfenster kann man schön sehen was gesendet wurde, wenn man dort die Hex-Ausgabe abgewählt hat :wink:

Nachtrag Wenn man Texte im Display von IP-Symcon schreiben will, dann müssen Sonderzeichen mit dem
Backslash eingebunde werden : Zeichen unterm ß und dann das Gänsefüßchen "
Kann ich hier nicht darstellen, nimmt der Editor wieder wech, schaue in einer PHP Erklärseite nach, Sonderzeichen in Text
Gruß Helmut

…auf Pin 15 ist der Serielle Bus. PIGPIO gibt mir so selbst keine Informationen wenn dort Daten ankommen. Deswegen verwende ich einen kleinen Trick: Ich benutzte die Notify-Funktion von PIGGPIO. Die Notify-Funktion sendet aber nicht nur ad hoc wenn Daten auf Pin 15 über die serielle Schnittstelle ankommen, sondern auch jede Minute selbsttätig eine Statusinformation.
Werde das bei Bedarf mal ausblenden, ansonsten ist das völlig okay.

Joachim

…aber kommen dann irgendwelche Fehlermeldung im Log oder passiert dann nur „nichts“?

Joachim

Hallo Joachim,

habe gerade die Empfangsrichtung (Nextion-Display --> IPS2GPIO) bei einem Tastendruck am Nextion-Display überprüft.

Über ein Terminalprogramm habe ich den Datenverkehr mitgelesen (siehe Bild). Vom Nextion-Display werden die Daten richtig ausgegeben (es sind 6 Bytes, beginnend mit Hex70), irgendwie macht dann PIGPIO oder Dein Modul dann jeweils 312 Zeichen daraus (siehe Hardcopy Debug von IPS2GPIO). Was hier wie passiert keine Ahnung.

Fehlermeldungen werden keine im Meldungsfenster ausgegeben.

PS: Im Debugmodus werden Daten nur in der Insanz IPS2GPIO ausgegeben, in den Instanzen IPS2GPIO_IO und IPS2GPIO_Display wird im Debugmodus nichts ausgegeben.

Gruß
Rainer

Und nochmal Hallo Joachim,

den Fehler bei der Textausgabe an das Nextion-Dispaly habe ich gefunden.

I2GDSP_Send(45852 /*[Zk\Zk-GPIO\IPS2GPIO_Display]*/,"t1.txt=12,5 °C");  

geht ja nicht s.o. (Leerzeichen spielen keine Rolle)

Der Befehl der an das Display gesendet werden muss sollte so aussehen t1.txt=„12,5 °C“

Wenn ich die Hochkommas als String zusammenbau funktioniert es

$txt = "t1.txt=".'"'."12,5 °C".'"';
I2GDSP_Send(45852 /*[Zk\Zk-GPIO\IPS2GPIO_Display]*/,$txt);  

PS: Die Celsiusausgabe von dem kleinen Kreis vor dem C wird noch falsch dargestellt es gibt noch ein Sonderzeichen davor, hier nehme ich aber an das es sich dabei um ein Codierungs oder Font-Problem handelt.

Gruß
Rainer

Hallo Rainer,

wie ich schon schrieb sind die Daten die Du dort im Debug siehst nicht direkt die Daten vom Nextion-Display - indirekt schon.
Im ClientSocket wird lediglich die Aktivität des GPIO 15 überwacht. 312 Zeichen - bei 12 Zeichen pro Aktivität die PIGPIO generiert - sind (lediglich) 26 mal der Wechsel zwischen Hi und Low.
Ich benutzte dieses Aktivität nur als Trigger, um bei PIGPIO den Speicher für die ankommenden Daten abzufragen, dieses geschieht aber über einen „eigenen“ ClientSocket.
Dieses geschieht in zwei Schritten:

  1. Abfragen wie viele Daten zur Abholung bereit stehen
  2. Die Bereitstehende Datenmenge abholen und an die Nextion-Instanz übertragen

In der Nextion Instanz werden diese ankommenden Daten quasi „nacheinander“ in den String „Response“ geschrieben.

$Messages = explode('ffffff', $ByteResponse[1]);
					   	for($i=1;$i<Count($Messages);$i++) {
					   		$this->DisplayResponse($Messages[$i]);
					   		SetValueString($this->GetIDForIdent("Response"), $Messages[$i]);
					   	}

Eigentlich müsstes Du nun nur folgendes machen:

Auf Änderungen des String „Response“ reagieren und entsprechende Aktionen danach auslösen

Für bestimmte Daten habe ich im Modul schon Aktionen vordefiniert (Auszug):

case "65": // Touch event return data 
				SetValueInteger($this->GetIDForIdent("PageNumber"), intval(hexdec(substr($Message, 2, 2))));
				SetValueInteger($this->GetIDForIdent("ButtonNumber"), intval(hexdec(substr($Message, 4, 2))));
				SetValueBoolean($this->GetIDForIdent("ButtonState"), boolval(hexdec(substr($Message, 6, 2))));
				SetValueString($this->GetIDForIdent("ButtonSummary"), hexdec(substr($Message, 2, 2)).", ".hexdec(substr($Message, 4, 2)).", ".hexdec(substr($Message, 6, 2)));
				
			break;
			case "66": // Current page ID number returns 
				SetValueInteger($this->GetIDForIdent("PageNumber"), intval(hexdec(substr($Message, 2, 2))));
			break;
			case "67": // Touch coordinate data returns 
				$Coordinate_X = intval(hexdec(substr($Message, 2, 2)) + hexdec(substr($Message, 4, 2)));
				SetValueInteger($this->GetIDForIdent("Coordinate_X"), $Coordinate_X);
				$Coordinate_Y = intval(hexdec(substr($Message, 6, 2)) + hexdec(substr($Message, 8, 2)));
				SetValueInteger($this->GetIDForIdent("Coordinate_Y"), $Coordinate_Y);
			break;
			case "68": // Touch Event in sleep mode 
				$Coordinate_X = intval(hexdec(substr($Message, 2, 2)) + hexdec(substr($Message, 4, 2)));
				SetValueInteger($this->GetIDForIdent("Coordinate_X"), $Coordinate_X);
				$Coordinate_Y = intval(hexdec(substr($Message, 6, 2)) + hexdec(substr($Message, 8, 2)));
				SetValueInteger($this->GetIDForIdent("Coordinate_Y"), $Coordinate_Y);
			break;
			case "70": // String variable data returns  
				$Value = $this->hex2str(substr($Message, 2));
				SetValueString($this->GetIDForIdent("StringReturn"), $Value);
			break;
			case "71": // Numeric variable data returns
				$Value = unpack("V*", substr($Message, 2, 8));
				SetValueInteger($this->GetIDForIdent("IntegerReturn"), $Value[1]);
			break;
			case "86": // Device automatically enters into sleep mode 
				SetValueBoolean($this->GetIDForIdent("SleepMode"), true);
			break;
			case "87": // Device automatically wake up 
				SetValueBoolean($this->GetIDForIdent("SleepMode"), false);
			break;

Wenn Du mir sagst, wie ich dort eine Verbesserung einbauen kann, bin ich gerne bereit das Umzusetzen.
Die Herausforderung ist, etwas zu erstellen, dass ohne Vereinbarungen zu den Nextion-Einstellungen für alle kompatibel ist. Helmut hat ja dazu schon ein wenig ausgeführt…

Joachim

Hallo Joachim, Hallo Helmut,

besten Dank für eure Infos die mir sehr geholfen haben. Ich muß jedoch eingestehen das ich für das vollständige Verständnis noch etwas Zeit benötige (Das Wochende steht ja dafür dann auch schon in Aussicht).

@Helmut: Sorry, Deinen Nachtrag am 14.03. habe ich irgendwie nicht wahrgenommen, der mich ansonsten ja auch schon auf die Problematik der fehlenden Hochkommas bei der Textausgabe gebracht.

Gruß
Rainer

Hallo Joachim,

das mit der Seriellen Schnittstelle über PiGPIO ist noch zu komplex für mich. Ich behaupte einmal das in Empfangsrichtung einfach keine Daten in IPS2GPIO_Display ankommen. Bislang wurde auch noch keine in Deinem Modul angelegte Variable unter der Instanz gefüllt.

Ich benutzte dieses Aktivität nur als Trigger, um bei PIGPIO den Speicher für die ankommenden Daten abzufragen, dieses geschieht aber über einen „eigenen“ ClientSocket.

Kann ich irgendwo nachsehen (debuggen) das von dem „eigenen“ ClientSocket überhaupt Rohdaten ankommen evtl. ja über eine „IPS_LogMessage“.

Oder kann man direkt in der Konsole über Putty auf dem RasperryPI den Datenverkehr der seriellen Schnitstelle „/dev/ttyAMA0“ kontrollieren.

Das das Nextion-Display Daten sendet habe ich ja über das parallel mitlesen über USB kontrolliert.

Zusammengefasst, die Funktion speziell wo genau was bei dem „eigenen“ ClientSocket realisiert ist ist mir einfach nicht klar, vielleicht kannst Du mir ja noch auf die Sprünge helfen.

Gruß
Rainer

Hallo Rainer,

damit wir das Problem eingrenzen können habe ich drei Log-Meldungen erstellt:

  1. Wie viele Daten angekommen sind bei PIGPIO
  2. Wenn die Daten von PIGPIO abgeholt wurden und im IPS angekommen sind
  3. Wenn Daten im Display-Modul angekommen sind und welche Daten

Zum anderen:
Ich meine Du musst im Nextion Editor bei den Steuerelementen die Option „Send Component ID“ aktivieren…

Nach dem Update solltest Du hoffentlich etwas mehr Meldungen im Log haben, berichte mal was da steht - oder eben nicht…

Joachim