[RISOLTO] Trasferimento dati tra 2 HC-12

Un saluto a tutto il forum;
Ho costruito un GPS Tracker e invece di usare la classica SD card per memorizzare le coordinate acquisite, uso una memoria flash W25Q64 e un filesystem che la rende simile ad una SD card.
tramite un “telecomando con HC-12” invio da remoto (da casa alla mia autovettura) i comandi START/STOP/DOWNLOAD per ricevere i dati da dare in pasto a google maps in formato KML.
Tutto funziona bene tranne il download che è lento a causa del delay(40) che sono stato costretto ad inserire in fase di acquisizione.
Le seriali sono inizializzate tutte a 9600 e i due HC-12 inizializzati con AT+DEFAULT.
Vi chiedo se è possibile velocizzare oppure data la velocità “on air” non è possibile ovviare a questo limite.
Queste sono le funzioni:

TX

void sendDataToHome() {
  if (statoRUN) {
    Serial3.print("/$");     // Trasmette $ = e' attivo, prima premere stop
    return;
  }
  else {
    Serial3.print("/#");     // Trasmette # = ok
  }
  char c;
  myFile = FS.open("track.txt", FILE_READ); // creato filesystem su memoria flash W25Q64
  delay(500);
  if (myFile) {
    while (myFile.available()) {
      c = myFile.read();
      delay(40);
      Serial3.print(c);
    }
    myFile.close();
  }
}

RX

void chkDownload() {
  if (mySerial.available() > 0) {
    Serial.println(F("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"));
    Serial.println(F("<kml xmlns=\"http://earth.google.com/kml/2.1\">"));
    Serial.println(F("  <Folder>"));
    Serial.println(F("    <name>GpsTrack</name>"));
    Serial.println(F("    <Placemark>"));
    Serial.println(F("      <name>track</name>"));
    Serial.println(F("      <Style>"));
    Serial.println(F("        <LineStyle>"));
    Serial.println(F("          <color>cc0000cc</color>"));
    Serial.println(F("          <width>4</width>"));
    Serial.println(F("        </LineStyle>"));
    Serial.println(F("      </Style>"));
    Serial.println(F("      <LineString>"));
    Serial.println(F("        <altitudeMode>clampToGround</altitudeMode>"));
    Serial.println(F("        <coordinates>"));
    while (mySerial.available() > 0) {
      Serial.write(mySerial.read());
      delay(40);
    }
    Serial.println(F("        </coordinates>"));
    Serial.println(F("      </LineString>"));
    Serial.println(F("    </Placemark>"));
    Serial.println(F("  </Folder>"));
    Serial.println(F("</kml>"));
  }
  while (mySerial.available()) {
    mySerial.read();
  }
}

accetto consigli

Amedeo

Non mi è chiaro perché metti una pausa anche in ricezione

Non capisco come funziona lo handshaking

Comunque hai fatto un bel lavoro, complimenti

Per il Tracker uso un STM32F103C8T6 perchè ha 4 seriali hardware che uso con il gps, hc-12 e monitor seriale, come telecomando un ARDUINO NANO V3 e SoftwareSerial sui pin 4 e 5.
Ho fatto molte prove, se il TX stampa su monitor seriale, è velocissimo ma “in the air” si perde gran parte dei dati, sembra che quel delay(40) sia un numero magico e funziona solo se presente su entrambe le parti.
Acquisisco le coordinate ogni 5 secondi, 12 al minuto, 720 ogni ora e quindi se il percorso dura più ore diventa noioso attendere il download di molte righe, un calcolo approssimativo mi indica la capacità della memoria flash di circa 100.000 righe.

il modulo HC-12 del ricevitore era troppo vicino al micro e interrompeva la seriale. Ho ridotto i delay da 40 a 20, diciamo che ora è accettabile.

ciao Amedeo

Grazie per la condivisione