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

vous devriez voir trois 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:

Le branchement du module NodeMCU:


Le breadboard, la LED et le PIR


Le cable Mauve : +5V
Le cable Brun : D1
Le cable Vert : GND

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.

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.

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.