C/C++ (Arduino) TCP-Client für eigene Anwendungen
- Basti189
- Beiträge: 17
- Registriert: 23.03.2016 14:46:27
- Aktuelle Projekte: Java Zusi3Schnittstelle
Arduino zusi3Schnittstelle
PhilipsHue Schnittstelle
ZusiLightControl - Wohnort: Kassel
C/C++ (Arduino) TCP-Client für eigene Anwendungen
Hallo zusammen,
ein ähnliches Thema, aber eher an die Arduino/ESP8266 Freunde gedacht.
Ich habe schon öfters gelesen, dass viele Arduinos nutzen für ihre Führertische und dort immer mit extra PCs gearbeitet werden, die dann Serial wieder dem Arduino mittteilen was er zu machen hat etc...
Für mich irgendwie doof und so habe ich mir gedacht, nehme ich meine in Java geschriebene Schnittstelle für Zusi und portieren sie einfach Mal auf den Arduino, oder in meinem Fall dem ESP8266, da dieser schon WLAN von Haus aus hat
Gesagt getan, läuft. Man ist in auch mit IoT Geräten unabhängig und kann den Mikrocontroller selbständig seine Aufgaben machen lassen. Bis jetzt kann die Bibliothek nur die Verbindung aufbauen und von Zusi die Version Auslesen etc, aber ich habe auch gestern erst damit angefangen. Die Bibliothek ist so aufgebaut, dass sie mit dem Stream an sich arbeitet und nicht speziell an den ESP gebunden ist, somit ist ein Einsatz auf Arduinos mit Ethernet-Shield ohne Probleme machbar.
Hoffe, der eine oder andere hat da Interesse dran
Lg
ein ähnliches Thema, aber eher an die Arduino/ESP8266 Freunde gedacht.
Ich habe schon öfters gelesen, dass viele Arduinos nutzen für ihre Führertische und dort immer mit extra PCs gearbeitet werden, die dann Serial wieder dem Arduino mittteilen was er zu machen hat etc...
Für mich irgendwie doof und so habe ich mir gedacht, nehme ich meine in Java geschriebene Schnittstelle für Zusi und portieren sie einfach Mal auf den Arduino, oder in meinem Fall dem ESP8266, da dieser schon WLAN von Haus aus hat
Gesagt getan, läuft. Man ist in auch mit IoT Geräten unabhängig und kann den Mikrocontroller selbständig seine Aufgaben machen lassen. Bis jetzt kann die Bibliothek nur die Verbindung aufbauen und von Zusi die Version Auslesen etc, aber ich habe auch gestern erst damit angefangen. Die Bibliothek ist so aufgebaut, dass sie mit dem Stream an sich arbeitet und nicht speziell an den ESP gebunden ist, somit ist ein Einsatz auf Arduinos mit Ethernet-Shield ohne Probleme machbar.
Hoffe, der eine oder andere hat da Interesse dran
Lg
Zuletzt geändert von Basti189 am 10.08.2018 16:17:23, insgesamt 1-mal geändert.
Es grüßt mit ZP1 der Basti
- Basti189
- Beiträge: 17
- Registriert: 23.03.2016 14:46:27
- Aktuelle Projekte: Java Zusi3Schnittstelle
Arduino zusi3Schnittstelle
PhilipsHue Schnittstelle
ZusiLightControl - Wohnort: Kassel
Re: C/C++ (Arduino) TCP-Client für eigene Anwendungen
Quellcode für den Arduino wurden released!
https://github.com/Basti189/Zusi3Schnittstelle" target="_blank
Um das nochmal deutlich zu sagen, der Mikrocontroller arbeitet vollständig alleine und braucht nicht per USB an einem Computer zu hängen!
Vielleicht auch interessant für zukünftig gebaute Zusi 3 Pro Simulatoren, die Mikrocontroller für sich arbeiten zu lassen, anstatt die Ansteuerung über die Serielle Schnittstelle laufen zu lassen
Denke da an einen Einsatz Richtung ESP8266 / ESP32 mit LAN-Interface
Liebe Grüße und viel Spaß
https://github.com/Basti189/Zusi3Schnittstelle" target="_blank
Um das nochmal deutlich zu sagen, der Mikrocontroller arbeitet vollständig alleine und braucht nicht per USB an einem Computer zu hängen!
Vielleicht auch interessant für zukünftig gebaute Zusi 3 Pro Simulatoren, die Mikrocontroller für sich arbeiten zu lassen, anstatt die Ansteuerung über die Serielle Schnittstelle laufen zu lassen
Denke da an einen Einsatz Richtung ESP8266 / ESP32 mit LAN-Interface
Liebe Grüße und viel Spaß
Zuletzt geändert von Basti189 am 23.08.2018 16:04:44, insgesamt 1-mal geändert.
Es grüßt mit ZP1 der Basti
- Basti189
- Beiträge: 17
- Registriert: 23.03.2016 14:46:27
- Aktuelle Projekte: Java Zusi3Schnittstelle
Arduino zusi3Schnittstelle
PhilipsHue Schnittstelle
ZusiLightControl - Wohnort: Kassel
Re: C/C++ (Arduino) TCP-Client für eigene Anwendungen
Kleiner Tipp für diejenigen, die nicht auf WiFi setzen oder kein WiFi zur Verfügung haben.
https://www.olimex.com/Products/IoT/ESP ... e-hardware" target="_blank
Werde ich mir jetzt bestellen und damit mal rumspielen, somit hätte man eine Kabelgebundene Lösung
Mit Versandkosten ~10€ liegt man dann doch so hoch, dass man sich auch bei Amazon für 36€ diese Variante holen kann
https://www.amazon.de/ESP32-GATEWAY-Pla ... rds=olimex" target="_blank
Lg
https://www.olimex.com/Products/IoT/ESP ... e-hardware" target="_blank
Werde ich mir jetzt bestellen und damit mal rumspielen, somit hätte man eine Kabelgebundene Lösung
Mit Versandkosten ~10€ liegt man dann doch so hoch, dass man sich auch bei Amazon für 36€ diese Variante holen kann
https://www.amazon.de/ESP32-GATEWAY-Pla ... rds=olimex" target="_blank
Lg
Zuletzt geändert von Basti189 am 07.09.2018 11:32:14, insgesamt 1-mal geändert.
Es grüßt mit ZP1 der Basti
- Basti189
- Beiträge: 17
- Registriert: 23.03.2016 14:46:27
- Aktuelle Projekte: Java Zusi3Schnittstelle
Arduino zusi3Schnittstelle
PhilipsHue Schnittstelle
ZusiLightControl - Wohnort: Kassel
Re: C/C++ (Arduino) TCP-Client für eigene Anwendungen
Die Schnittstelle arbeitet nun auch Fehlerfrei mit dem ESP32 mit WiFi oder Ethernet zusammen.
Erfolgreich getestet mit dem NodeMCU-32S und dem Olimex ESP32-Gateway.
Liebe Grüße
Erfolgreich getestet mit dem NodeMCU-32S und dem Olimex ESP32-Gateway.
Liebe Grüße
Es grüßt mit ZP1 der Basti
-
- Beiträge: 145
- Registriert: 14.12.2022 23:09:43
- Aktuelle Projekte: (FIS) Linguatec Anna 15
- Wohnort: Berlin Marzahn (Nord)
- Kontaktdaten:
Re: C/C++ (Arduino) TCP-Client für eigene Anwendungen
Ich habe das mit den Pins verdrahtet, aber nichts passiert.
Der Client ist verbunden, aber die PZB anzeigen werden nicht auf den LEDs angezeigt.
Starte ich den Fahrplan Köln -Düsseldorf mit RE 26856, so bleiben die LEDs erloschen obwohl 85in Zusi-Display leuchtet.
Der Client ist verbunden, aber die PZB anzeigen werden nicht auf den LEDs angezeigt.
Code: Alles auswählen
for (int j = 0; j < subNode->getNodes()->size(); j++) {
Node *itemNode = subNode->getNodes()->get(j);
if (itemNode->getIDAsInt() == Status_Zugbeeinflussung) {
for (int k = 0; k < itemNode->getNodes()->size(); k++) {
Node *pzbNode = itemNode->getNodes()->get(k);
if (pzbNode->getIDAsInt() == 0x03) {
for (int l = 0; l < pzbNode->getAttribute()->size(); l++) {
Attribute *attr = pzbNode->getAttribute()->get(l);
boolean state = attr->getDATAAsBoolean();
switch (attr->getIDAsInt()) {
case 5: //1000Hz
digitalWrite(12, state); //D3
break;
case 6: //55
digitalWrite(16, state); //D0
break;
case 7: //70
digitalWrite(5, state); //D1
break;
case 8: //85
digitalWrite(4, state); //D2
break;
case 10: //500Hz
digitalWrite(13, state); //D7
break;
case 11: //Befehl 40
digitalWrite(14, state); //D5
break;
}
}
}
}
}
}
Zusi 3 (Steam & Stick)
- nonesense
- Beiträge: 527
- Registriert: 15.07.2006 12:50:10
- Aktuelle Projekte: QDmi
Fahrpult Einheitsführerstand
Ludmilla - Wohnort: Köln
- Kontaktdaten:
Re: C/C++ (Arduino) TCP-Client für eigene Anwendungen
Hast du die Pins auch als Ausgang definiert?
Hießt beim TCP-Server von Zusi wird dein Arduino aufgelistet?
Daran wirds liegen. Hätt'ste mal besser die Siegstrecke genommen.
Hast du Vorwiderstände verwendet?
Re: C/C++ (Arduino) TCP-Client für eigene Anwendungen
Lass dich von einem - sorry - echt dummen Scherz nicht abhalten, solche Infos dazu zu schreiben. Das hilft uns in den meisten Fällen deutlich, wobei es in dem Fall eher nur Details wie z.B. die PZB-Variante geht.
Ansonsten wäre trotzdem erst mal der Tipp, die Leuchtmelder erst mal mit einem einfachen Code zum Laufen zu bekommen, z.B. mit einem Code für an und dann einem Code für aus, oder mit einem Blink-Code. Wenn das nicht geht -> Siehe Rückfragen 1 und 3 von nonsense (PS: Wenn du keine Vorwiderstände verwendet hast, könnte der Arduino möglicherweise jetzt schon defekt sein). Zweiter Schritt wäre zu kontrollieren, was Zusi->Konfiguration->Netzwerk anzeigt. Einmal, ob der Client überhaupt gelistet ist, zum anderen (Doppelklick) ob die richtigen Größen aboniert worden sind. Davon würde dann der 3. Schritt abhängen.
PS: Nebenfund: Auf der Homepage fehlt die die Prüfung des ersten Knotens auf 0x0002. Er fängt erst mit der Prüfung auf 0x000A an.
Diese Signatur möchte folgendes bekannter machen: ZusiWiki · ZusiSK: Streckenprojekte · YouTube: Objektbau für Zusi · euirc: Zusi-Chat
-
- Beiträge: 145
- Registriert: 14.12.2022 23:09:43
- Aktuelle Projekte: (FIS) Linguatec Anna 15
- Wohnort: Berlin Marzahn (Nord)
- Kontaktdaten:
Re: C/C++ (Arduino) TCP-Client für eigene Anwendungen
Der ESP wird mir als Fahrpult-Client in Zusi angezeigt (Doppelklick auf den Client, zeigt auch Status-Zugeeinflussung) und die PINs werden im Democode auf OUTPUT
(https://github.com/Basti189/Zusi3Schnit ... no.ino#L27) gesetzt.
Ich verwende 5V LEDs mit vorwiederständen (Diese sind ab Werk vor der LED unter einem Schrumpfschlauch eingelötet). Die leuchten auf den Breadboard mit 3,3V , (am 3,3 Volt-Pin) auch auf
https://www.amazon.de/5Volt-20cm-Anschl ... p_3_i&th=1
Mein ESP ist ein (ESP8266 12-E)
(https://github.com/Basti189/Zusi3Schnit ... no.ino#L27) gesetzt.
Ich verwende 5V LEDs mit vorwiederständen (Diese sind ab Werk vor der LED unter einem Schrumpfschlauch eingelötet). Die leuchten auf den Breadboard mit 3,3V , (am 3,3 Volt-Pin) auch auf
https://www.amazon.de/5Volt-20cm-Anschl ... p_3_i&th=1
Mein ESP ist ein (ESP8266 12-E)
Zusi 3 (Steam & Stick)
Re: C/C++ (Arduino) TCP-Client für eigene Anwendungen
Dann bitte noch meine Fragen.
Diese Signatur möchte folgendes bekannter machen: ZusiWiki · ZusiSK: Streckenprojekte · YouTube: Objektbau für Zusi · euirc: Zusi-Chat
-
- Beiträge: 145
- Registriert: 14.12.2022 23:09:43
- Aktuelle Projekte: (FIS) Linguatec Anna 15
- Wohnort: Berlin Marzahn (Nord)
- Kontaktdaten:
Re: C/C++ (Arduino) TCP-Client für eigene Anwendungen
Ok ich habe offenbar den Fehler gefunden. ICh habe den Fahrsimulator gestartet, wie auch mit dem Code... im Serial-Monitor kann ich sehen, dass der ESP 8266 einen SEGFAULT hat und rebootet. Deshalb leuchten die LEDs auch nur gefühlt alle 1 Sekunde auf. Ich kann den GDB leider nicht anhängen, (falls einer weiß wie man den 8266 remote attachen kann, könnte ich evtl den fehler beheben, da ich nicht weiß wie ich den da rankriege (USB Remote-Debug). Ich habe deshalb begonnen die Klasse neuzuschreiben.
Eine Mischung aus. Bastis Projekt und dem hier vorliegenen Fahrpult-Code, welcher mir Einblick auf das Anmelden an Zusi gibt. Ich habe eine Verbindung zu ZUSI, jedoch ist da ein Problem mit den Packets. Meine frage ist, verlangt Zusi BIG oder Little-Endianess?.
Eine Mischung aus. Bastis Projekt und dem hier vorliegenen Fahrpult-Code, welcher mir Einblick auf das Anmelden an Zusi gibt. Ich habe eine Verbindung zu ZUSI, jedoch ist da ein Problem mit den Packets. Meine frage ist, verlangt Zusi BIG oder Little-Endianess?.
Zuletzt geändert von lipkegu am 03.12.2023 10:50:54, insgesamt 1-mal geändert.
Zusi 3 (Steam & Stick)
Re: C/C++ (Arduino) TCP-Client für eigene Anwendungen
Bei den meisten Fst-Bauern hat sich dieser Code in "plain C" etabliert, ich hatte den Code dann mal hier in einem Beitrag "zusammengefasst": viewtopic.php?p=274144#p274144
Weitere Alternaitven siehe hier: viewtopic.php?f=73&t=12650
Nachtrag: Wenn du einen µProzessor nicht ordentlich debuggen kannst: Nutze die Serielle Ausgabe als Status und gebe an verschiedenen Stellen aus, was der Prozessor gerade macht und taste dich so an die Stelle heran, wo er abstürzt.
Wenn die serielle Ausgabe nicht funktioniert, nutze die LEDs als Status-Leuchtmelder. Beispiel: 1000 Hz LM 1x mit aktiver Warteschleife blinken lassen, sobald er Neustartet, und dann im Code den 500er und den Befehl an passender Stelle mit aktiver Verzögerung toogeln lassen, und schauen, wie weit er kommt und in welcher Zeile er abstürzt.
Weitere Alternaitven siehe hier: viewtopic.php?f=73&t=12650
Nachtrag: Wenn du einen µProzessor nicht ordentlich debuggen kannst: Nutze die Serielle Ausgabe als Status und gebe an verschiedenen Stellen aus, was der Prozessor gerade macht und taste dich so an die Stelle heran, wo er abstürzt.
Wenn die serielle Ausgabe nicht funktioniert, nutze die LEDs als Status-Leuchtmelder. Beispiel: 1000 Hz LM 1x mit aktiver Warteschleife blinken lassen, sobald er Neustartet, und dann im Code den 500er und den Befehl an passender Stelle mit aktiver Verzögerung toogeln lassen, und schauen, wie weit er kommt und in welcher Zeile er abstürzt.
Diese Signatur möchte folgendes bekannter machen: ZusiWiki · ZusiSK: Streckenprojekte · YouTube: Objektbau für Zusi · euirc: Zusi-Chat
-
- Beiträge: 145
- Registriert: 14.12.2022 23:09:43
- Aktuelle Projekte: (FIS) Linguatec Anna 15
- Wohnort: Berlin Marzahn (Nord)
- Kontaktdaten:
Re: C/C++ (Arduino) TCP-Client für eigene Anwendungen
Aus dem ZIP-Archiv des 1. Posts gibt es dieses Beispiel:F. Schn. hat geschrieben: ↑03.12.2023 10:49:47 Bei den meisten Fst-Bauern hat sich dieser Code in "plain C" etabliert, ich hatte den Code dann mal hier in einem Beitrag "zusammengefasst": viewtopic.php?p=274144#p274144
Weitere Alternaitven siehe hier: viewtopic.php?f=73&t=12650
Code: Alles auswählen
#define NUM_SEND_HELLO 27
byte hello[NUM_SEND_HELLO];
[b] hello[0] = 0x17; // PACKET_LENGTH (4 bytes)
hello[1] = 0x00;
hello[2] = 0x00;
hello[3] = 0x00;[/b]
[b] hello[4] = 0x00; // HELLO (2 bytes)
hello[5] = 0x01;[/b]
hello[6] = 0x01; // VERSION (1 byte)
hello[7] = 0x02; // CLIENT_TYPE (1 byte)
hello[8] = 0x12; // IDENTIFICATION LENGTH
hello[9] = 0x46; // "F"
hello[10] = 0x61; // "a"
hello[11] = 0x68; // "h"
...
hello[26] = 0x29; // ")"
client.write(hello, NUM_SEND_HELLO);
state = STATE_WAITING_FOR_ACK;
break;
Zusi 3 (Steam & Stick)
Re: C/C++ (Arduino) TCP-Client für eigene Anwendungen
Tja, dann jetzt die Preisfrage, warum ich nicht den ersten Beitrag verlinkt habe, sondern den, den ich verlinkt habe?
Diese Signatur möchte folgendes bekannter machen: ZusiWiki · ZusiSK: Streckenprojekte · YouTube: Objektbau für Zusi · euirc: Zusi-Chat
-
- Beiträge: 145
- Registriert: 14.12.2022 23:09:43
- Aktuelle Projekte: (FIS) Linguatec Anna 15
- Wohnort: Berlin Marzahn (Nord)
- Kontaktdaten:
Re: C/C++ (Arduino) TCP-Client für eigene Anwendungen
Ich habe mal das gepostet, was ich habe. In der INO verweise ich auf zusi->Setup() und zusi->Loop();
ZusiPacket.cpp
Code: Alles auswählen
#include "wl_definitions.h"
#include <string>
#include "ZusiClient.h"
#include <vector>
#include <ESP8266WiFi.h>
ZusiClient::ZusiClient() {
this->ip = NULL;
this->port = 0;
this->client = new WiFiClient();
}
ZusiClient::~ZusiClient() {
this->ip = NULL;
this->port = 0;
}
bool ZusiClient::Setup(const char* wifi_ssid, const char* wifi_password, const char* zusi_serverip, uint32_t zusi_port, const char* clientID) {
bool state = false;
this->clientId = clientID;
this->ip = zusi_serverip;
this->port = zusi_port;
Serial.println("\n");
state = this->SetupWIFI(wifi_ssid, wifi_password);
if (!state) {
Serial.println("[E] Failed to Setup Network!");
return state;
}
this->Connect();
this->clientState = 1;
return true;
}
bool ZusiClient::SetupWIFI(const char* wifi_ssid, const char* wifi_password) {
bool state = false;
state = WiFi.mode(WIFI_STA);
if (!state)
{
Serial.println("[E] WIFI: Failed to set Mode to WIFI_STA...");
return state;
}
WiFi.setAutoReconnect(true);
WiFi.begin(wifi_ssid, wifi_password);
Serial.println("[D] Verbinde mit Netzwerk...");
this->wifi_status = WiFi.status();
while (this->wifi_status != WL_CONNECTED) {
Serial.printf("\n[I] WIFI (if0) MAC: %s\n", WiFi.macAddress().c_str());
switch (this->wifi_status)
{
case WL_IDLE_STATUS:
break;
case WL_CONNECTION_LOST:
Serial.println("[E] WIFI: Connection lost!");
break;
case WL_CONNECT_FAILED:
Serial.println("[E] WIFI: Connection failed!");
break;
case WL_CONNECTED:
Serial.println("[I] Verbunden!");
Serial.print("[I] IP-Adresse: ");
Serial.println(WiFi.localIP());
break;
case WL_DISCONNECTED:
Serial.println("[E] WIFI: Disconnected!");
break;
case WL_NO_SSID_AVAIL:
Serial.printf("[E] WIFI: No SSID (\"%s\") available!\n", wifi_ssid);
break;
case WL_SCAN_COMPLETED:
Serial.println("[E] WIFI: Scan completed!");
break;
case WL_NO_SHIELD:
Serial.println("[E] WIFI: No Shield installed!");
break;
case WL_WRONG_PASSWORD:
Serial.println("[E] WIFI: Invalid Password or Key!");
break;
}
this->wifi_status = WiFi.status();
delay(1000);
}
return state;
}
bool ZusiClient::Connect() {
bool state = false;
int counter = 0;
while (!client->connected()) {
counter++;
Serial.print("[D] Connecting to Zusi... (");
Serial.print(counter);
Serial.println(")");
state = this->client->connect(this->ip, this->port);
if (!state)
{
counter++;
if (counter >= 99)
ESP.restart();
}
delay(1000);
}
Serial.println("[I] Verbunden mit zusi!");
counter = 0;
return state;
}
void ZusiClient::Send_Hello() {
ZusiPacket* packet = new ZusiPacket();
uint32_t len = 4;
packet->Set_Position(len);
packet->WriteU16(1); // Hello
len += 2;
packet->WriteU8(1); // Version
len += 1;
packet->WriteU8(2); // ClientType
len += 1;
uint32_t ident_len = strlen(this->clientId);
packet->WriteU8(ident_len); // String Length of Ident
len += 1;
packet->WriteString(this->clientId, ident_len);
len += ident_len;
packet->Set_Position(0);
packet->WriteU32(len);
this->client->write(packet->Get_Payload(), len);
Serial.println("[D] Hello Sent...");
delete packet;
packet = NULL;
}
void ZusiClient::Loop() {
if (!this->Get_Client()->connected()) {
this->clientState = STATE_SEND_HELLO;
this->Connect();
return;
}
switch (this->Get_State()) {
case STATE_IDLE:
default:
break;
case STATE_SEND_HELLO:
this->Send_Hello();
this->clientState = STATE_WAITING_FOR_ACK;
break;
case STATE_WAITING_FOR_ACK:
if (!client->available())
break;
this->clientState = STATE_NEEDED_DATA;
break;
case STATE_NEEDED_DATA:
if (!client->available())
break;
this->clientState = STATE_NEEDED_DATA_ACK;
break;
case STATE_NEEDED_DATA_ACK:
if (!client->available())
break;
this->clientState = STATE_NEEDED_DATA_END;
break;
case STATE_NEEDED_DATA_END:
if (!client->available())
break;
this->clientState = STATE_NEEDED_DATA_END_ACK;
break;
case STATE_NEEDED_DATA_END_ACK:
if (!client->available())
break;
this->clientState = STATE_RECEIVING_COMMANDS;
break;
case STATE_RECEIVING_COMMANDS:
if (!client->available())
break;
this->clientState = STATE_RECEIVING_DATA;
break;
case STATE_RECEIVING_DATA:
if (!client->available())
break;
break;
}
delay(500);
}
Code: Alles auswählen
#include "Client.h"
#include <cstdint>
#include "c_types.h"
#include <cstddef>
#include <stdint.h>
#include <vector>
#include "ZusiPacket.h"
ZusiPacket::ZusiPacket() {
this->payload = new char[1024];
memset(this->payload, 0, 1024);
}
ZusiPacket::~ZusiPacket() {
delete[] this->payload;
this->payload = NULL;
}
void ZusiPacket::Set_Position(const uint32_t position) {
this->position = position;
}
uint32_t ZusiPacket::Get_Position() const {
return this->position;
}
void ZusiPacket::Set_Length(const uint32_t length) {
this->length = length;
}
uint32_t ZusiPacket::Get_Length() const {
return this->length;
}
const char* ZusiPacket::Get_Payload() const {
return this->payload;
}
void ZusiPacket::WriteU8(const uint8_t value) {
memcpy(&this->payload[this->position], &value, sizeof(uint8_t));
this->position += sizeof(uint8_t);
}
void ZusiPacket::WriteU16(const uint16_t value) {
memcpy(&this->payload[this->position], &value, sizeof(uint16_t));
this->position += sizeof(uint16_t);
}
void ZusiPacket::WriteString(const char* value, const uint32_t length) {
memcpy(&this->payload[this->position], &value, length);
this->position += length;
}
void ZusiPacket::WriteU32(const uint32_t value) {
memcpy(&this->payload[this->position], &value, sizeof(uint32_t));
this->position += sizeof(uint32_t);
}
void ZusiPacket::Write16(const int16_t value) {
memcpy(&this->payload[this->position], &value, sizeof(int16_t));
this->position += sizeof(int16_t);
}
void ZusiPacket::Write32(const int32_t value) {
memcpy(&this->payload[this->position], &value, sizeof(int32_t));
this->position += sizeof(int32_t);
}
void ZusiPacket::Write64(const int64_t value) {
memcpy(&this->payload[this->position], &value, sizeof(int64_t));
this->position += sizeof(int64_t);
}
Zusi 3 (Steam & Stick)
Re: C/C++ (Arduino) TCP-Client für eigene Anwendungen
Du solltes die Zusi-Dokumentation über das Protokoll und insbesondere das Beispiel lesen.
Es gibt große Unterschiede zwischen dem Zusi-Protokoll und dem, was du sendest Das Paket beginnt nicht mit einer Länge.
Das Protokoll hat Knoten, die andere Knoten und Attribute enthalten. Du scheinst die Knoten zu beginnen, aber du beendest sie nie, sodass Zusi ewig auf das Ende deiner Nachricht wartet.
Jedes Attribut muss mit den Daten beschrieben werden.
Wie du im Beispiel sehen werdest, sind zwar alle gängigen Netzwerkprotokolle Big Endian (auch bekannt als Netzwerk-Byte-Reihenfolge), Zusi ist jedoch Little Endian.
Edit: Nachdem ich das geschrieben habe, habe ich das Problem erkannt. Du verwendest ein Beispiel für Zusi 2. Dies ist ein völlig anderes Protokoll
Kleinere Merkmale:
Es gibt große Unterschiede zwischen dem Zusi-Protokoll und dem, was du sendest Das Paket beginnt nicht mit einer Länge.
Das Protokoll hat Knoten, die andere Knoten und Attribute enthalten. Du scheinst die Knoten zu beginnen, aber du beendest sie nie, sodass Zusi ewig auf das Ende deiner Nachricht wartet.
Jedes Attribut muss mit den Daten beschrieben werden.
Wie du im Beispiel sehen werdest, sind zwar alle gängigen Netzwerkprotokolle Big Endian (auch bekannt als Netzwerk-Byte-Reihenfolge), Zusi ist jedoch Little Endian.
Edit: Nachdem ich das geschrieben habe, habe ich das Problem erkannt. Du verwendest ein Beispiel für Zusi 2. Dies ist ein völlig anderes Protokoll
Kleinere Merkmale:
- Wenn ZusiPacket::length und ZusiPacket::position nicht irgendwo initialisiert, habe sie ein zufällige Werte in jedes neues Objekt
- Es ist nicht nötig, ZusiPacket auf dem Heap zu initisialieren. Es ist nur 12 byte Groß.
-
- Beiträge: 145
- Registriert: 14.12.2022 23:09:43
- Aktuelle Projekte: (FIS) Linguatec Anna 15
- Wohnort: Berlin Marzahn (Nord)
- Kontaktdaten:
Re: C/C++ (Arduino) TCP-Client für eigene Anwendungen
Ok, das erklärt alles...
Zusi 3 (Steam & Stick)