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
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?
Bei mstrg und &mstrg[0][0] passiert das Gleiche Ich hatte dies so eigentlich aus dem Beispiel übernommen.
Eine Möglichkeit: Versuch mal ein unsigned char Array zum Testen. Zweite Möglichkeit: sizeof() durch festen Wert ersetzen.
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!
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.
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 | }
|
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.