Skip to content

tommasoclini/rete_mqtt_nodi_lora

Repository files navigation

MQTT via LoRa

Questa e un'applicazione Python che permette l'uso di un protocollo simile all'MQTT via LoRa, questo e un diagramma di esempio di applicazione di questo progetto:

Tutta la struttura e formata da tre parti principali:

  • Raspberry pi 4: ha il compito di svolgere le funzioni principali di un broker mqtt

  • Esp32 Master: ha il compito di far passare messaggi fra i nodi della rete LoRa e Raspberry e viceversa con una porta seriale

  • Nodi(Esp32 o qualsiasi altra scheda in grado di trasmettere attraverso il protocollo LoRa): clienti del broker mqtt

Quest'applicazione in particolare si occupa della prima parte(Raspberry pi 4), essa e il cosiddetto broker, si occupa delle funzioni principali di un broker MQTT, al momento esse sono:

  • Gestire richieste di iscrizione ad un argomento

  • Gestire richieste di disiscrizione ad un argomento

  • Gestire richieste di pubblicazione di un messaggio su un argomento

Strumenti usati e la loro documentazione:

Questo e l'albero delle cartelle e i files che ci interessano:

.

├── compose.py

├── db.sqlite3

├── decompose.py

├── funzioni_logica_mqtt.py

├── gestione_schede_lora_1

│   └── settings.py

├── main.py

├── manage.py

├── mqtt_lora

│   ├── admin.py

│   └── models.py

└── regex_formats.py

In questo albero possiamo identificare vari files che corrispondono ai tre blocchi indicati nel diagramma:

  • La struttura del database Django e` contenuta nel file models.py:

    Qui vengono dichiarati tre modelli, che ereditano dalla classe models.Model interna al modulo python django in se:

    • DataBaseMessage:

      Questo tipo di oggetto non e necessario al funzionamento dell'applicazione standalone, ma in caso si volessero visualizzare i messaggi scambiati in questa infrastuttura, sara sempre utile

    • Scheda:

      Questo oggetto rappresenta un singolo nodo o scheda, ogni scheda ha due bytes di addresso unici nello stesso canale della stessa infrastuttura, altrimenti si puo creare della confusione, fra schede e topics c'e una relazione molti a molti, vuol dire che una scheda puo essere iscritta a piu di un topic e un topic puo avere piu di una scheda iscritta ad esso

    • Topic:

      Questo tipo di oggetto rappresenta un argomento del broker mqtt, in particolare esso tiene il nome dell'argomento e le varie Schede iscritte ad esso

  • La struttura del blocco "messaggi seriale" si puo` trovare nei files decompose.py e regex_formats.py:

    • Nel file regex_formats.py sono presenti le varies stringhe di interpretazione dei messaggi arrivati dall'esp32 per scomporre i messaggi, per fare cio viene usato il modulo python re che premette di interpretare stringhe secondo espressioni regolari(regex)

    • Nel file decompose.py sono presenti le varie funzioni che interpretano i vari tipi di messaggi che usano i formati dichiarati in regex_formats

  • La struttura del blocco "logica mqtt" si trova nei files funzioni_logica_mqtt.py e main.py:

    • Il file funzioni_logica_mqtt dichiara varie funzioni importate da main.py che servono ad applicare la logica del broker mqtt a dei cambiamenti sul database

    • Invece il file main.py e il "flusso principale", esso quando riceve un messaggio dall'esp32 stabilisce che tipo di messaggio sia, lo decompone grazie alle funzioni dichiarate in decompose.py e poi inserisce le informazioni ottenute nell'opportuna funzione da funzioni_logica_mqtt.py per aggiornare il database, oltre a cio`, rimanda anche indietro i messaggi per indicare all'esp32 a chi mandare cosa

Installazione e primo avvio

Per prima cosa assicurarsi di aver installato python, pip e git, i seguenti comandi valgono dalla shell bash su una qualsiasi distro linux(testati ubuntu 22.04 LTS e debian 11), se non presenti nel sistema verranno installati:

sudo apt install python
sudo apt install python3-pip
sudo apt install git

Poi clonare questa repository in una cartella di posizione arbitraria:

git clone https://github.com/Tizio1234/rete_mqtt_nodi_lora.git

Eseguire il seguente comando dalla cartella radice del progetto per installare i moduli python necessari, se si creano dei conflitti di dipendenze, conviene usare un ambiente virtuale python:

pip install -r requirements.txt

Entrare nella cartella gestione_schede_lora_1 ed eseguire i seguenti comandi per preparare il database Django:

python manage.py makemigrations
python manage.py migrate

Ora che il database e pronto dobbiamo solamente configurare la porta seriale a cui si colleghera l'esp32(ancora dobbiamo realizzare le librerie varie per l'esp32 master e i nodi), eseguire questo comando per impostare una variabile dell'ambiente di sviluppo dove mettiamo la nostra porta seriale, es.:

export esp32=/dev/ttyUSB0

Infine eseguire il seguente comando per iniziare il programma:

python main.py

Il programma mostrera automaticamente delle informazioni utili al debugging, per fermarlo premere ctrl c

Per avviarlo d'ora in poi bastera eseguire i precedenti due passaggi(se non e stato chiuso il terminale si puo saltare il primo)

About

Implementazione protocollo simile a mqtt sul layer LoRa

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages