Détecteur de mouvement & LoRa

De Ensiwiki
Aller à : navigation, rechercher


Project schedule.png
Titre du projet Détecteur de mouvement & LoRa avec un Raspberry pi
Cadre Projets Réseaux Mobiles et Avancés

Équipe Antoine CharletMathilde DuboillePaul Walger
Encadrants Franck Rousseau


Présentation

Objectifs

L'objectif de ce projet et de transmettre des informations prélevées avec une camera grâce au réseau LoRa. L'exploitation d'un réseau à faible débit nécessite un traitement sur le site de production de l'information, nous avons donc utilisé un Raspberry Pi. Des données issues de la camera, une fois traitées, sont envoyées au serveur "LoRa serveur" puis récupérées et affichées sur une page web.

Composants

Fonctionnement général

- Raspberry Pi 3: Board principale de traitement.

- Camera: La camera utilisé utilise un port CSI pour se connecter directement au Raspberry Pi.

- Module Lora: RN2483 Microship avec communication Serial, la connexion est établie directement sur le port GPIO du raspberry Pi.

- LoRa server: TODO

- Serveur: Mathilde I need help! # TODO

Capture de mouvement

Pour la capture, nous utilisons un Raspberry Pi 3, sa connectivité facilite la mise en oeuvre, mais un autre modèle peut tout aussi bien fonctionner.

Installation de Raspbian

- Télécharger l'image a l'adresse: https://raspbian-france.fr/telechargements/ - Flasher la carte microSD avec votre logiciel préféré(Rufus par exemple: https://rufus.ie/fr_FR.html) - Insérer la carte et brancher le Raspberry. La suite de la configuration nécessite uniquement l’accès à un terminal sur le Pi et peut donc se faire en SSH.

Modification de l'UART principal

Le Raspberry Pi 3 possède deux UART (Universal Asynchronous Receiver Transmitter). Ce composant permet de faire le lien entre l'ordinateur et un port série. Le premier UART est dédié au module Bluetooth, la connexion avec le deuxième s'établit sur le port GPIO, c'est ce dernier que nous allons utiliser pour communiquer avec le module RN2483.

Par défaut, l'UART utilisé pour le port GPIO possède un bauderate dérivé de la fréquence du processeur ce qui peut poser problème lors des communications. N'ayant pas besoin du bluetooth dans ce projet, nous allons échanger les entrées/sorties des deux ports séries pour profiter d'un bauderate constant et plus important sur le GPIO. Pour cela, il faut:

- Ajouter au fichier /boot/config.txt la ligne suivante: "dtoverlay=pi3-disable-bt"

- Supprimer du fichier /boot/cmdline.txt la ligne suivante: "console=serial0,115200"

Installation de Motion et Motioneye

Nous utilisons ici Motion(https://motion-project.github.io/index.html), qui est programme de détection et de traitement de vidéo, et motioneye, un front-end Web pour Motion.

- Lancer le script suivant pou l'installation de Motion et Motioneye:

   
    #!/usr/bin/env bash
    sudo apt-get install -y ffmpeg v4l-utils libmariadbclient18 libpq5
    wget https://github.com/Motion-Project/motion/releases/download/release-4.1.1/pi_stretch_motion_4.1.1-1_armhf.deb
    sudo dpkg -i pi_stretch_motion_4.1.1-1_armhf.deb
    sudo apt-get install -y python-pip python-dev libssl-dev libcurl4-openssl-dev libjpeg-dev libz-dev
    sudo pip install motioneye
    mkdir -p /etc/motioneye
    cp /usr/local/share/motioneye/extra/motioneye.conf.sample /etc/motioneye/motioneye.conf
    sudo  mkdir -p /var/lib/motioneye
    cp /usr/local/share/motioneye/extra/motioneye.systemd-unit-local /etc/systemd/system/motioneye.service
    sudo echo "sudo systemctl start motioneye" >> /etc/init.d/startup.sh
    sudo systemctl daemon-reload
    sudo systemctl enable motioneye
    sudo systemctl start motioneye
    


- Une fois le script exécuté, se connecter à: ip-du-raspberry:8765 pour paramétrer la détection.

- Dans le champ Commande a executer, renseigner "sudo python3 path-to-test.py"

Envoie des données

TODO: integrer ici le calcul du poids des images et de la capacité reseau

Module Python

https://github.com/paulwalger/Lora_rn2483

LoraServer

- Se créer un compte sur : https://lora.campusiot.imag.fr

- Ajouter une application avec le nom de votre projet.

- Dans l'application, ajouter un device, ici nous utilisons un microchip RN2483. Vous pouvez suivre les instructions disponibles à l’adresse https://github.com/CampusIoT/tutorial/blob/master/loraserver/README-app.md

- Générer un device EUI aléatoire

- Device-profile : Classe A

Connection Serial

- Installer pySerial :

   pip3 install pySerial

- Brancher l'usb serial sur un port usb

- Pour connaître l'url du port serial, entrer dans votre terminal :

   python3 -m serial.tools.list_ports

- Modifier SERIAL_PORT dans rn2483.py par l'url du port serial obtenu précedement

   SERIAL_PORT = "<url_serial_port>"


Paramétrer le module RN2483

- Modifier DEV_UI et APP_KEY dans rn2483.py selon les clefs générés sur LoraServer

   DEV_UI = "<>"
   APP_KEY = "<>"

- Pour les versions 1.0 de loraware, il n'est pas nécessaire d'avoir une APP_UI

- la méthode Lora.config() se charge de paramétrer votre microchip en fonction de ces paramètres

Tester

- Lancer test.py, des données devraient arriver sur votre serveur Lora

- la méthode Lora.join() se charge d'établir une connexion avec LoraServer

- la méthode Lora.send(data) permet d'envoyer des datas sous format text

Erreurs possibles

- Vous êtes trop loin de l'antenne, ou des éléments interfèrent (se mettre dehors)

- Le nombre de requête est limité, donc vous pouvez avoir des réponses comme 'busy' ou 'no free channel'. Il faut attendre ou redémarrer le tout

Réception des données

Prérequis

Client mosquitto : sudo apt-get install -y mosquitto-clients

Docker-CE & docker-compose

Instructions

Dans le répertoire de votre application, lancez les commandes suivantes :

wget https://raw.githubusercontent.com/CampusIoT/campusiot-certs/master/mqtt/ca.crt

BROKER=lora.campusiot.imag.fr

ORGID=<id_de_votre_organisation>

MQTTUSER=org-$ORGID

MQTTPASSWORD=<password_de_votre_organisation>

TLS="--cafile ca.crt -p 8883"


Puis lancez nodered :

docker run -it -p 1880:1880 -v $PWD/msg.log:/usr/src/node-red/msg.log–name campusiot-nodered nodered/node-red-docker


Ouvrez dans votre navigateur http://127.0.0.1:1880


Créez le “flot” en important le JSON suivant au moyen du Menu > Import > Clipboard :

[{"id":"9d6b9737.6ee6a8","type":"mqtt in","z":"b3a2df4.51c83a","name":"campusiot","topic":"#","qos":"2","broker":"61ca344b.cfb484","x":210,"y":180,"wires":"7fea5047.da2c5","4ece3642.56654"},{"id":"7fea5047.da2c5","type":"debug","z":"b3a2df4.51c83a","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":510,"y":180,"wires":[]},{"id":"4ece3642.56654","type":"file","z":"b3a2df4.51c83a","name":"msg.log","filename":"msg.log","appendNewline":true,"createDir":true,"overwriteFile":"false","x":500,"y":260,"wires":[[]]},{"id":"61ca344b.cfb484","type":"mqtt-broker","z":"","name":"campusiot","broker":"lora.campusiot.imag.fr","port":"8883","tls":"11b0c2f3.c55f2d","clientid":"","usetls":true,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"11b0c2f3.c55f2d","type":"tls-config","z":"","name":"","cert":"","key":"","ca":"","certname":"","keyname":"","caname":"ca.crt","servername":"","verifyservercert":false}]


Double-cliquez sur campusiot pour éditer le noeud :

Modifiez le topic par application/<device_id>/#

Cliquez sur le crayon à côté de Server puis cliquez sur le crayon à côté TLS Configuration pour importer votre certificat ca.crt. Dans Securité renseignez le username et le mot de passe MQTT. Sauvegardez et deployez (Attention, si vous êtes connectés au wifi eduroam, le filtrage bloquera la connection.)


Les données seront enregistrées dans le fichier msg.log. Tous les nouveaux messages reçus seront ajoutés en fin de fichier. Les données sont accessibles dans la variable data de chaque message, en base 64.