Arduino Library für die Dekodierung von EX-Paketen

  • Eckehard
  • Eckehard's Avatar Offline
  • Senior Mitglied
  • Senior Mitglied
  • Beiträge: 65
  • Dank erhalten: 6

Eckehard antwortete auf Neuer Link auf Github

Posted 04 Dez. 2017 20:47 #37
Hallo Bernd,

ich möchte gerne auch die Seriennummer des Sensors über die Serielle Verbindung übertragen und auf der empfangenden Seite mit sscanf parsen....

Die Nachrichten die geparst werden sollen sehen z.B folgendermaßen aus:

<GPS 0x3276a409 8 Satellites 0.00>


Hier der relevante Teil des Codes:

...

int n = sscanf(buffer,"<%s %i %d %s %d>", &sensor, &serial,&id, &label, &value);

Serial.print("SENSOR=");
Serial.print(sensor);
Serial.print(" SERIAL=");
Serial.print(int(serial));
Serial.print(" ID=");
Serial.print(id);
Serial.print(" LABEL=");
Serial.print(label);
Serial.print(" VALUE=");
Serial.print(value);
Serial.print(" sscanf=");
Serial.println(n);
...


Der obige Code macht daraus z.B.:
...
<GPS 0x3276a409 8 Satellites 0.00>
SENSOR= SERIAL=-23543 ID=8 LABEL=Satellites VALUE=0 sscanf=5
...

Frage:
In der Referenz habe ich folgendes gefunden:

%i : Scan an integer as a signed number. Similar to %d, but interprets the number as hexadecimal when preceded by 0x and octal when preceded by 0.


Der Prefix von 0x hängt ja drann, ok....

Wie muss ich den format specifier von sscanf setzen, damit ich bei der Ausgabe statt -23543 den eigentlichen Wert 3276a409 ausgegeben bekomme....?
Oder ist das eher ein Problem der Ausgabe?


Danke und Grüße
Eckehard
Last Edit:04 Dez. 2017 20:53 von Eckehard
Letzte Änderung: 04 Dez. 2017 20:53 von Eckehard. Begründung: typo

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • Sepp62
  • Sepp62's Avatar Offline Autor
  • Elite Mitglied
  • Elite Mitglied
  • Beiträge: 295
  • Dank erhalten: 154

Sepp62 antwortete auf Neuer Link auf Github

Posted 04 Dez. 2017 23:22 #38
Hallo Eckehard,

ich habe mal mit der heissen Nadel ein neues Sample gestrickt, das zeigt, wie man die Daten über JSON enkodiert/dekodiert. Du findest es hier:

github.com/Sepp62/TxJetiEx/tree/master/E...s/TxJetiExTeensyJson

Damit bekommst Du die Daten komplett so wie Du sie losgeschickt hast. Der Einfachheit halber läuft alles auf dem Teensy, der schickt die Daten auf Serial3 raus und empfängt sie dort auch wieder (Brücke zwischen Pin 7 und 8 stecken).

Natürlich musst Du dann (wenn alles so weit geht) das Beispiel aufdröseln. Der Empfänger läuft dann auf Deinem Empfänger-Arduino. Wichtig ist, dass Du die JSON-Library installierst. Sie läuft auch auf den kleinen Arduinos, aber zugegebenermaßen geht dort der Speicher schnell aus.

Ich hoffe, das hilft Dir. sscanf() geht prinzipiell auch, aber man macht da leicht Fehler und dann kackt das ganze Programm ab.

VG Bernd

PS: Es gibt übrigens noch einen "Bug" im Dekoder. Länge/Breite und Datum/Zeit werden nicht gekennzeichnet. Man muss anhand der Einheit rauskriegen, welcher Wert es ist. Das muss ich bei Gelegenheit ergänzen.
von Sepp62
Folgende Benutzer bedankten sich: Eckehard

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • Sepp62
  • Sepp62's Avatar Offline Autor
  • Elite Mitglied
  • Elite Mitglied
  • Beiträge: 295
  • Dank erhalten: 154

Sepp62 antwortete auf Neuer Link auf Github

Posted 04 Dez. 2017 23:24 #39
Noch zu Deinem sscanf-Thema:

Probier' mal "%lx" für die SerialId.

forum.arduino.cc/index.php?topic=107262.0

VG Bernd
von Sepp62
Folgende Benutzer bedankten sich: Eckehard

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • Eckehard
  • Eckehard's Avatar Offline
  • Senior Mitglied
  • Senior Mitglied
  • Beiträge: 65
  • Dank erhalten: 6

Eckehard antwortete auf Neuer Link auf Github

Posted 05 Dez. 2017 09:42 #40
Hallo Zusamen,

ahh, danke für den Hinweis mit %lx.... Das werde ich mal probieren.

Hätte ich auch selber drauf kommen können, Du hast es ja im TxJetiEx.ino quasi vorgemacht:

void PrintValue( TxJetiExPacketValue * pValue )
{
char buf[50];
float fValue;
uint8_t day; uint8_t month; uint16_t year;
uint8_t hour; uint8_t minute; uint8_t second;

sprintf(buf, "Value from %s, Serial: %08lx/Id: %d", pValue->GetName(), pValue->GetSerialId(), pValue->GetId() ); Serial.println( buf );
sprintf(buf, "Val - %s: ", pValue->GetLabel() ); Serial.print( buf );


Und der Hinweis auf Json ist auch cool! Das muss ich dann bei Gelegenheit auch mal umstellen, dann lernt man ja wieder was Neues....

DANKE!

Eckehard
von Eckehard

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • Sepp62
  • Sepp62's Avatar Offline Autor
  • Elite Mitglied
  • Elite Mitglied
  • Beiträge: 295
  • Dank erhalten: 154

Sepp62 antwortete auf Neues Beispiel für "Adafruit BLE UART friend"

Posted 05 Dez. 2017 21:14 #41
Ich habe nun mal mein "Adafruit BLE UART Friend" -Modul an den Teensy angeschlossen und ein Sample dafür gemacht ( github.com/Sepp62/TxJetiEx/tree/master/E...iExTeensyBluefruitLE ).

Bei diesem Modul kann man die Sendeleistung sehr stark reduzieren (-40dbm). Damit ist die Sendereichweite ebenfalls ziemlich reduziert (ca. 2 m).

Die Ansteuerung des Moduls ist sehr unkompliziert (wenn man es denn mal richtig verkabelt hat) und Connect/Reconnect arbeiten recht stabil. Das Ganze ging jetzt wirklich fix und die Adafruit-Leute liefern hier (so weit ich das Teil eben nutze) wirklich gute Arbeit ab.

Ich glaube, ich würde mich trauen das Modul in meinen Sender einzubauen.

VG Bernd
von Sepp62
Folgende Benutzer bedankten sich: Eckehard

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • Sepp62
  • Sepp62's Avatar Offline Autor
  • Elite Mitglied
  • Elite Mitglied
  • Beiträge: 295
  • Dank erhalten: 154

Sepp62 antwortete auf Neues Beispiel für "Adafruit BLE UART friend"

Posted 05 Dez. 2017 21:52 #42
Damit hier nicht immer nur Text entsteht, mal ein Bild von meinem Testaufbau.

Links der ESP32 und rechts der Teensy mit dem Bluefruit-Modul. Das in der Mitte gehört nicht dazu. Das Schöne an diesen Wireless-Experimenten ist, dass man kaum löten muss :-)
von Sepp62

Anhänge:

Folgende Benutzer bedankten sich: Eckehard

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Ladezeit der Seite: 1.151 Sekunden