Outils pour utilisateurs

Outils du site


e45-ttl-100

Ceci est une ancienne révision du document !


Le transceiver (émetteur/récepteur) LoRa E45-TTL-100

  • Basé sur le SX1276 de semtech.
  • “E32-868T20D”
  • Pilotable avec un UART.
  • Mono canal.
  • 100 mW
  • Pas de support pour le RSSI (Radio Signal Strength Indicator)
  • Consommation un peu trop élever pour être alimenté par le 3.3V de l'ESP32.

Fabrication d'un kit de mesure du signal LoRa

2 Modules :

  • Une module mobile qui emet des messages et mesure la qualité du signal et le débit (ou meilleut spread factor) utilisable.
  • Une simili gateway fixe qui répond au message LoRa

Algorithme de négociation du spread factor :

  • Si pas de méssage valide depuis linkDeadTimeout, on écoute sur le plus gros SF.
  • Si validMessageCountSpeedIncreaseThreshold messages séquentielle valides reçu alors on tente d'augmenter le SF
  • Si on a reçu speedIncreaseRequestCount demandes séquentielles valides de changement de SF on change de SF.
  • Si on a pas reçu de message depuis tooFastTimeout on décrémente le SF.
  • Après un retour à la normal suite à un tooFastTimeout on ne retente pas l'augmentation de SF avant un temps waitBeforeSpeedIncreaseInterval
  • La gateway acquitte les méssages en retournant le message avec le numéro de sequence incrémenté.
  • Tant qu'un message n'est pas acquitté il est retransmis.
  • linkDeadTimeout > 2 x tooFastTimeout
  • tooFastTimeout dépend du SF tel que tooFastTimeout > 2 x messageTransmissionTime
  • messageTransmissionTime = messageSize / SFdebit
  • waitBeforeSpeedIncreaseInterval > 10 * messageTransmissionTime ?

Contenu des messages :

  • indicateur de session
  • indicateur de sequence
  • SF demandé

Code :

SPEED_INC_VALID_MSG_COUNT = SPEED_INC_REQ_COUNT = TOO_FAST_TIMEOUT = LINK_DEAD_TIMEOUT =

String sessionId = random; int seqId = 0; byte requestedSpreadFactor = 0; int sequentialValidMessages = 0; int speedIncreaseReqCount = 0;

long lastValidMessageReceivedTimestamp = now();

while(lastValidMessageReceivedTimestamp + LINK_DEAD_TIMEOUT > now()) {

message = sessionId + "_" + seqId + "_";
if (sequentialValidMessages > SPEED_INC_VALID_MSG_COUNT) {
  message = message + (requestedSpreadFactor + 1);
}
sendMessage(message);
long lastMessageSentTimestamp = now();
while (lastMessageSentTimestamp + TOO_FAST_TIMEOUT > now()) {
  String message = receiveMessage();
  int msgSessionId = message.substring();
  int msgSeqId = message.substring();
  
  if (msgSessionId == sessionId && msgSeqId == seqId + 1) {
    sequentialValidMessages += 1;
    lastValidMessageReceivedTimestamp = now();
    seqId = msgSeqId + 1;
    
    int msgRequestedSpreadFactor = message.substring();
    if (msgRequestedSpreadFactor) {
      speedIncreaseReqCount += 1;
      
      if (speedIncreaseReqCount > SPEED_INC_REQ_COUNT)
    }
  } else {
    sequentialValidMessages = 0;
  }
}

}

Ressources

e45-ttl-100.1547675993.txt.gz · Dernière modification : 2019/01/16 21:59 de bigMax