e45-ttl-100
Ceci est une ancienne révision du document !
Table des matières
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
- Quelques billets de blog : https://quadmeup.com/tag/e45-ttl-100/
e45-ttl-100.1547675993.txt.gz · Dernière modification : 2019/01/16 21:59 de bigMax