Skip to content
This repository has been archived by the owner on Jun 2, 2020. It is now read-only.

Smart Car Box (SCB) repository. Made by pizza-team, a group of students from University of Cagliari.

Notifications You must be signed in to change notification settings

maurapintor/SCB-bot-telegram

Repository files navigation

SCB - Smart Car Box

In questo readme è presentato il progetto SmartCarBox (SCB) realizzato dal pizza-team, un gruppo di studenti dell'Università di Cagliari. Il progetto fa seguito ai laboratori del Corso di Reti Radiomobili (Corso di Studi di Ing. delle Telecomunicazioni).

Contributori:

  • Matteo Anedda (docente del corso)
  • Enrico Ferrara
  • Maurra Pintor
  • Marco Uras

Nota: se vuoi saltare l'introduzione e sai già come funziona il sistema, clicca qui.

Funzionalità richieste dal progetto

Sviluppare un sistema per il tracciamento di un veicolo tramite GPS. Il trigger per l'accensione del sistema è un accelerometro, che tramite un semplice algoritmo si accorge quando la macchina si sta spostando e invia tempestivamente un messaggio tramite Telegram al proprietario della macchina. Il sistema fa uso provvisoriamente di connettività WiFi, ma sarebbe opportuno integrare un modulo GSM per renderlo completamente autonomo.

Sullo smartphone:

  • si deve ricevere un messaggio automatico (con BOT Telegram) nel momento in cui si passa dallo stato statico ad uno stato con una variazione sulla direzione x (o y) superiore a 15 metri (o comunque la minima distanza che identifichi uno spostamento superiore alla normale ricalibrazione della posizione dovuta all’incertezza del posizionamento GPS).
  • in un generico percorso da un punto A a un punto B, al raggiungimento del punto B (assenza di variazione direzione x o y – macchina ferma per un periodo superiore ai 30 secondi), il BOT Telegram deve comunicare le coordinate GPS della posizione statica.
  • le coordinate GPS dello SBC devono essere fornite anche su specifica richiesta al BOT Telegram indipendentemente dal verificarsi degli eventi menzionati in precedenza (es., alla stringa “posizione” il bot deve rispondere con le coordinate GPS, ad esempio “@39.2292043 9.109925” in modo tale che tramite browser si riconduca al posizionamento).
  • Il tracking e la posizione devono essere visualizzati su mappa attraverso una applicazione in ambiente Android

Aggiunte proposte dal team

Il team ha apportato le seguenti modifiche al funzionamento:

  • le coordinate sono inviate tramite Telegram con una visualizzazione della mappa, non più come sola stringa testuale
  • il bot di telegram è stato caricato su Google App Engine per consentire funzionalità più complesse, come l'invio della location su mappa o la risposta ai messaggi anche quando il modulo non è connesso

Materiale a disposizione

  • Due antenne GPS – External Active Antenna
  • Due cavi adattatori con connettore UFL-SMA
  • Una antenna GPS con modulo Ublox NEO6MV2 GY-GPS6MV2
  • Resistenze necessarie al modulo Ublox NEO6MV2 GY-GPS6MV2
  • 1 ESP8266 NODE MCU V3
  • 1 cavetto micro usb
  • 1 cavetto per Arduino
  • 1 Arduino UNO
  • 1 modulo accelerometro (xyz) MMA7361 (analogico)
  • Cavetteria/dupont necessari: 20 M-M + 10 M-M + 10 M-M + 2 F-F
  • Breadboard
  • 1 kit: 3 led, 5+5+1+1 resistenze, 1 diodo, 1 fotoresistore, 3 pulsanti
  • Alimentatore esterno per ESP 5V
  • Alimentatore esterno via USB 5V
  • Power bank

Contenuto del repository

  • examples : sketch di esempio per test dei singoli moduli
  • handlers : funzionalità del bot telegram e gestione dati
  • images : immagini per il tutorial
  • italian : cartella del readme in italiano
  • models : gestione datastore (tabelle)
  • templates : visualizzazione della mappa
  • utils : classi di utilità
  • README.md : readme del repository (inglese)
  • app.yaml : configurazione Google App Engine
  • main.py : main file GAE

Lista degli sketch esempio

  • GPS_example.ino : lettura dati GPS e stampa su seriale
  • acc_gps.ino : stampa coordinate GPS quando è rilevato un movimento (tramite accelerometro) - solo Arduino
  • motion_detector.ino : sensore di movimento tramite lettura accelerometro (accensione del led come "allarme")
  • nodeAlarmGPS.ino : stampa coordinate GPS su nodeMCU quando è rilevato un movimento (tramite accelerometro) su Arduino
  • nodePOST_GPS.ino : post su ThingSpeak delle coordinate lette, funzionamento analogo a "nodeAlarmGPS.ino"
  • post_gps_mqtt.ino : funzionamento analogo a "nodePOST_GPS.ino", con aggiunta di richiesta coords tramite mqtt e post su Google Datastore

Istruzioni

Setup dell'Hardware

Nella seguente sezione sono illustrati i passaggi per il montaggio fisico del sistema. Le connessioni effettuate sono illustrate nello schema seguente. Si consiglia di prenderne visione ed effettuare le connessioni nell'ordine di spiegazione del tutorial.

Schematics

Boards

Nel sistema si è scelto di utilizzare un Arduino UNO per gestire il trigger con accelerometro, e un NodeMCU V3 per la connettività e lettura coordinate GPS. Le due board sono connesse tramite un piedino digitale.

Connessioni
D7 (GPIO13) NodeMCU --> 10K Ohm --> D4 Arduino
3.3V Arduino --> breadboard +
GND Arduino --> breadboard -

Le ultime due connessioni sono consigliate per la gestione dei cavi. In seguito il + e - della breadboard saranno chiamati 3.3V e GND.

Accelerometro

Connessioni
Z accelerometro --> A3 Arduino
Y accelerometro --> A4 Arduino
X accelerometro --> A5 Arduino
SL accelerometro --> 3.3V
3V3 accelerometro --> 3V3
GND accelerometro --> GND
gSEL accelerometro --> GND

Aggiungiamo la connessione di un led per verificare l'attivazione del trigger:

Connessioni
D2 Arduino --> resistenza 1k Ohm --> led --> GND

GPS

Connessioni
VCC GPS --> 5V Arduino
RX GPS --> D4 NodeMCU (GPIO2)
TX GPS --> D2 NodeMCU (GPIO4)
GND GPS --> GND

Il GPS ha anche bisogno di un'antenna. Per questo caso specifico si consiglia di usare una External Active Antenna come questa.

Setup del software

Andiamo a preparare gli script necessari su Arduino e NodeMCU (contenuti nella cartella "flash_to_boards"):

Board Script
NodeMCU flash_to_boards/SCBNode.ino
Arduino flash_to_boards/SCBArduino.ino

Prima di caricare gli sketch sulla board è importante inserire alcuni parametri per il setup della connettività WiFi e le chiavi per le API (cosa sono le API).

WiFi e parametri da personalizzare

Inserire nello script del NodeMCU i seguenti parametri. Fare attenzione alle lettere maiuscole e minuscole, o lo sketch non funzionerà correttamente.

char ssid[]     = "";               // SSID della rete
char password[] = "";               // password
String yourProjectName = "";        // your GAE project name

Google cloud platform

Per l'hosting del bot e del database dobbiamo utilizzare servizi Cloud. Abbiamo scelto di usare Google Cloud Platform (GCP). Per proseguire nel tutorial è necessario avere un account Google (per crearne uno seguire questo link).

Una volta effettuato l'accesso, è necessario creare un progetto su GCP console.

In questo video è possibile vedere tutti i passaggi elencati in questa sezione, ovvero come effetture la distribuzione (deploy) dell'applicazione con i servzi GCP.

Creazione del progetto: Creazione progetto

Annotare l'ID del progetto (Attenzione: potrebbe essere diverso dal nome perché gli ID sono univoci).

Completati i passaggi su GCP, si passa ora a configurare il progetto del bot telegram. Sarà necessario scaricare questo repository e modificare alcuni file di configurazione.

Il primo passo è quello di installare il software development kit (sdk) per Google App Engine e Python. Qui si trova il tutorial con i link utili e le istruzioni.

Seguire poi questo tutorial per effettuare il deploy dell'applicazione.

Bot Telegram

Per questo progetto è stato scelto di implementare il bot su piattaforma cloud, la stessa configurata nel punto precedente. A tale scopo risulta molto utile la guida fornita da yukuku, la quale è molto chiara e dettagliata.

Adesso è il momento di creare un nuovo bot con BotFather. Alla fine di questo processo avremo la chiave API necessaria per comandare il bot.

Per prima cosa cerchiamo @BotFather su Telegram. Apriamo la conversazione e premiamo sulla scritta "avvia" o "start" in basso. Seguire le istruzioni per creare un nuovo bot.

Tutorial Bot Father

I passaggi principali sono:

  1. Cercare il profilo @BotFather e avviare la conversazione
  2. Inviare il comando /newbot
  3. Inserire il nome per il bot
  4. Inserire username per il bot (facendolo finire con la parola chiave "bot")
  5. Prendere la API key che ci scrive BotFather

Ricordiamoci la API key, in quanto dovremo usarla in seguito.

Una volta effettuati i passaggi elencati, si può modificare il file:

File
utils/token.py

inserendo il token che ci ha dato BotFather.

Richiesta posizione real-time

Per la richiesta di posizione in real-time, è necessario comunicare in maniera diretta con il dispositivo hardware. Purtroppo non avendo a disposizione un indirizzo IP fisso e pubblico, non è possibile raggiungere il dispositivo con una normale chiamata HTTP, parimenti ad una pagina web.

Per questa funzionalità si può usare il protocollo MQTT, è necessario però configurare sia il software su NodeMcu che sul web server.

ATTENZIONE: per proseguire è necessario utilizzare un bridge HTTP-MQTT in quanto il servizio cloud che abbiamo scelto non consente di farlo gratuitamente. Nel seguito faremo riferimento ad un bridge gratuito e messo a disposizione dall'Università di Cagliari. Inoltre sarà necessario utilizzare un proprio topic in modo tale che solo i nostri dispositivi lo ascoltino.

Aprire il file flash_to_boards/SCBNode.ino e inserire l'indirizzo del bridge e il topic in corrispondenza delle righe:

File
flash_to_boards/SCBNode.ino
const char* mqtt_server = "tools.lysis-iot.com";
String topic = "scb";

quindi quello che abbiamo utilizzato è: tools.lysis-iot.com

Annotare il nome del topic perchè sarà utile nel seguito.

A questo punto abbiamo configurato il dispositivo in modo tale da farlo rimanere in ascolto sul nostro topic.

La seconda parte riguarda la configurazione del web server, colui che effettivamente utilizzerà la parte di bridge. Ricordiamo che il bridge si occupa di tradurre una chiamata HTTP in una publish/subscribe MQTT.

Ciò che dobbiamo fare è aprire il file handlers/PositionRequestHandler.py e modificare l'url e topic. L'url presente è relativo al servizio messo a disposizione dal dipartimento, se viene usato un altro bridge sarà necessario aggiornarlo.

Il topic deve essere modificato in ogni caso, inserendo quello scelto al passaggio precedente.

File
handlers/PositionRequestHandler.py
url = 'http://tools.lysis-iot.com/MqttPublish/publish.php'
topic = 'scb'

Abbiamo configurato il web server in modo tale da fare una chiamata HTTP verso un servizio esterno, il quale si occupa di pubblicare sul topic MQTT desiderato.

Bonus material

Risultati ottenuti: Result Design Work in progress Lots of code Pizza team Try our demo application

About

Smart Car Box (SCB) repository. Made by pizza-team, a group of students from University of Cagliari.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •