Forum: Mikrocontroller und Digitale Elektronik ESPnow sendet nur die ersten 32 Bit


von Simon W. (weoiss)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich hoffe, ich bin in der richtigen Rubrik gelandet. Falls nicht, bitte 
ich das zu entschuldigen. Nun zu meinem Problem:

Laut Information von Espressif kann man bis zu 250 Byte per ESPnow 
verschicken. Leider überträgt er bei mir nur die ersten 32 Bit, den Rest 
überträgt er nur als 0. Als Test habe ich ein unsigned int Array 
erstellt und konnte so feststellen, dass nur die ersten beiden Daten 
übertragen werden.

Ich würde mich freuen, wenn mir jemand sagen könnte, welchen Fehler ich 
gemacht habe und wie ich ihn korrigieren kann.

Viele Grüße
Simon

von N. M. (mani)


Lesenswert?

Du schreibst (uint8_t *) &mstrg beim Senden.
Müsste das nicht (uint8_t *) mstrg oder (uint8_t *) &mstrg[0][0] heißen 
um auf das erste Element zu zeigen?

von Simon W. (weoiss)


Lesenswert?

Bei mstrg und &mstrg[0][0] passiert das Gleiche
Ich hatte dies so eigentlich aus dem Beispiel übernommen.

von Patrick (Gast)


Lesenswert?

Eine Möglichkeit: Versuch mal ein unsigned char Array zum Testen.
Zweite Möglichkeit: sizeof() durch festen Wert ersetzen.

von Simon W. (weoiss)


Lesenswert?

Hatte nur zur Veränderung, dass bei Array 4 anstatt 2 Einsen angezeigt 
wurden. Ich habe das sizeof mal ausgetauscht, das hat leider auch nichts 
gebracht.

Danke trotzdem für die bisherigen Vorschläge!

von N. M. (mani)


Lesenswert?

Ich glaube du kopierst in deiner OnDataRecv nur sizeof Pointer. Was je 
nach System nur 4 Bytes sind.
Kopiere mal len Bytes und begrenze die vorsichtshalber auf die Größe 
deiner Struktur/Array.

von N. M. (mani)


Lesenswert?

Also so in der Art.
Vielleicht noch eine Ausgabe o.ä. dass begrenzt wurde.
1
void OnDataRecv(const uint8_t * mac, const uint8_t *temp, int len) {
2
int lenLim =len;
3
4
if(lenLim>sizeof(inmstrg))
5
{
6
lenLim = sizeof(inmstrg);
7
}
8
  memcpy(&inmstrg, temp,lenLim);
9
  Serial.print("Bytes received: ");
10
  Serial.println(lenLim);
11
       for ( int i = 0; i < 4; ++i ) {
12
      // loop through columns of current row
13
      for ( int j = 0; j < 16; ++j )
14
      Serial.print (inmstrg[ i ][ j ] );
15
      Serial.println( ) ; // start new line of output
16
   } 
17
}

von Simon W. (weoiss)


Lesenswert?

Ja, das wars. Vielen, vielen Dank für deine Hilfe und auch vielen Dank, 
dass du mir gleich einen Beispielcode geschickt hast. Ich hätte 
wahrscheinlich nochmal nachfragen müssen, wie ich das machen soll.

Viele Grüße
Simon

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.