Détecteur de mouvement – MicroPython + NodeMCU(ESP8266) + PIR (HC-SR501) + RabbitMQ & MQTT

Pré-requis

  • NodeJS > 8
  • NPM > 6
  • Docker (Latest)
  • Docker-compose (Latest)
  • Ampy (1.0.7)
  • microPython (esp8266-20180511-v1.9.4.bin)

Matériel nécessaire

  • 1x NodeMCU
  • 1x HC-SR501
  • Une machine avec docker & NodeJS
  • Un routeur avec les accès connus.
  • 1x LED Rouge
  • 1x Résistance 220 Ohms

Introduction

L'objectif de ce projet est de faire un détecteur de mouvement (Motion detector) en utilisant un HC-SR501 avec un nodeMCU.

Dès qu'un mouvement est détecté, le ESP8266 envoi une alerte en utilisant Le protocol MQTT avec RabbitMQ. De plus, un début d'une application Web en NodeJS permet d'afficher les détections avec un timestamp sur la console.

RabbitMQ est déployé avec docker-compose.
Le cluster est déployé en réplication (3 noeuds).

Étape 1 - Installation / Branchement

La partie de l'installation des pré-requis est omise.

RabbitMQ

Cloner le repo : https://github.com/mrabdibdi/docker-rabbitmq-cluster

git clone https://github.com/mrabdibdi/docker-rabbitmq-cluster.git
cd docker-rabbitmq-cluster

Configurer les paramètres dans le fichier .env avec les informations qui correspondent à votre besoin.

Si vous ne voulez pas de SSL, vous devez tout commenter les lignes qui en font mentions et modifier certaine pour seulement enlever le SSL.

Lancer le docker-compose

docker-compose up

Après 1-2 minutes, vous devriez être en mesure d'accéder la page de management au port 15672

RabbitMQ Management Login

vous devriez voir trois instances:

RabbitMQ Instances

NodeMCU

Voici le branchement:

HC-SR501 -> NodeMCU

  • GND -> GND
  • OUTPUT (HIGH / LOW) -> D1 (GPIO 5)
  • 5v -> Breadboard (5v)

NodeMCU

  • vin -> 5v
  • GND -> GND
  • D2 -> LED
  • GND -> résistance 220 Ohms -> LED

Voici le setup:

Branchement USB 5v

Le branchement du module NodeMCU:

Les GND sur le NodeMCU
D1 & D2

Le breadboard, la LED et le PIR

Le Breadboard et la LED rouge
Le PIR (HC-SR501)
Le cable Mauve : +5V
Le cable Brun : D1
Le cable Vert : GND
Le cable jaune est relié à l'ordinateur pour faire la configuration du NodeMCU

Le code du projet

Vous devez récupérer la base du projet,

git clone https://github.com/mrabdibdi/NodeMCU.git
cd NodeMCU/

Étape 2 - Configuration

Préparer les fichiers pour les pousser sur le NodeMCU,

Configuration du WIFI

le fichier : utils/connectWIFI.py contient les informations de connexion.

Les informations de connexion

Le fichier motion_detector/main.py contient tout le code pour exécuter la séquence.
Vous devez modifier les informations pour être en mesure de vous connecter au RabbitMQ créer précédemment.

Configuration du client MQTT sur le NodeMCU

Pousser les fichiers sur le NodeMCU

Le tty.usbserial-14230 peut changer sur votre machine, pour connaitre cette valeur, vous pouvez faire cette commande pour voir la liste de tous les devices disponibles :

ls /dev/tty.usbserial*
cd motion_detector/
ampy --port /dev/tty.usbserial-14230 mkdir utils
ampy --port /dev/tty.usbserial-14230 put ../utils/connectWIFI.py utils/connectWIFI.py
ampy --port /dev/tty.usbserial-14230 put main.py

Vous devez redémarrer le NodeMCU et tout devrait fonctionner par magie.
Pour voir si le tout fonctionne, entrez cette commande:

screen /dev/tty.usbserial-14230 115200

Le serveur NodeJS

Le serveur NodeJS est loin d'être complet mais permet de voir si le pipeline fonctionne de base.

Donc il faut ce déplacer dans le dossier web_server/, puis il faut installer les dépendances et lancer le script Mqtt.js

cd web_server/
npm i
node mqtt.js

Il reste à passer devant le détecteur et de recevoir les alertes.

Étape 3 - Tests

L'intéraction avec le NodeMCU

Quand vous passez devant le PIR, la lumière rouge devrait s'allumer 5 secondes et le serveur MQTT devrait recevoir une nouvelle entrée.

Le serveur NodeJS

Pour le moment je suis au début du projet, alors il n'est pas vraiment intéressant mais c'est un début.

Vous devriez voir le output du MQTT à l'écran avec un timestamp.

Pendant que je fais ces tests, j'obtiens souvent des falses positives et le NodeMCU redémarre une fois de temps en temps car il n'arrive pas à bien exécuter la commande c.disconnect(). Donc il redémarre tout seul.

Étape 4 - Information supplémentaires

Il est préférable d'Acheter des NodeMCU avec le chip : CP2102 
Pour plus d'informations : https://cityos-air.readme.io/docs/1-usb-drivers-for-nodemcu-v10

La sensibilité du détecteur est au minimum sinon il détecte énormément de false positive.

Le debounce time est à environ 5 secondes. (Bonne chance pour le placer...)

Pour d'autres détails :

  • https://www.tweaking4all.com/hardware/pir-sensor/
  • https://github.com/pardahlman/docker-rabbitmq-cluster
  • https://www.npmjs.com/package/mqtt#example

Conclusion

Si vous avez des commentaires, des idées ou des améliorations vous pouvez laisser le tout en commentaire ou directement sur GitHub.

J'espère que le tout fonctionne bien pour vous.

Laisser un commentaire