Table des matières
5. AM2315 - Température et humidité
7. BME280 et BMP280 - Pression, humidité, température
9. ADS1115 - Lecture analogique
11. Photorésistance - luminosité
12. PIR - Détection de mouvement
14. Senseur à effet Hall numérique
1. Installation du Raspberry Pi
2. Utilitaires : des outils pour travailler
c. Transfert de fichiers via SSH (sftp)
1. Le broker MQTT, élément central du réseau MQTT
2. Création de topic et bonnes pratiques
Configurer le login du broker MQTT
3. Documentation complémentaire
1. Les possibilités offertes par l’ESP8266
2. Les plateformes ESP8266 populaires
4. Feather Huzzah ESP8266 en détail
5. Brochage du Feather Huzzah ESP8266
Charger le firmware MicroPython
1. Identifier le firmware MicroPython
1. Communiquer avec MicroPython
2. Communiquer avec un ESP8266 sous MicroPython
3. REPL : l’invite de commandes MicroPython
a. Activer WebREPL sur l’ESP8266
2. Réseau Wi-Fi visible ou masqué
5. Désactivation du point d’accès
6. Rechercher l’adresse IP d’un ESP8266
Séquence de démarrage MicroPython
3. Un fichier boot.py pour ESP8266
a. Script trop optimiste et conséquences
b. RunApp - Activation de l’application
1. Création d’une bibliothèque
2. Les bibliothèques MicroPython
a. Bibliothèques standards et microbibliothèques
b. Bibliothèques spécifiques à MicroPython
c. Bibliothèque spécifique à l’ESP8266
d. Autres bibliothèques MicroPython
e. Mécanisme de chargement d’une bibliothèque
3. Charger et exécuter un script à la volée
4. RunApp : exécution conditionnelle de main.py
5. Entrées/sorties sur ESP8266
b. Entrée numérique (pull-up interne)
c. Entrée numérique et déparasitage logiciel
f. Ajout d’entrée/sortie avec MCP23017
g. Lecture analogique avec l’ADS1115
6. Senseur et interface sur ESP8266
a. Senseur PIR - senseur de proximité
f. BME280 - température, humidité et pression barométrique
1. Publication MQTT sous MicroPython
2. Souscription MQTT sous MicroPython
3. Fonction run_every pour Asyncio
4. Plus d’informations sur Asyncio
1. Prérequis et configurations
4. Télécharger et préparer le code des objets IoT
Fonctionnement général d’un objet IoT
3. RunApp et la LED d’activité
5. Les tâches et fonctions asynchrones des objets IoT
Objet 1 : Météo cabane de jardin
4. Senseur PIR - variables et utilisation
5. Senseur PIR - la fonction pir_activated
6. Senseur PIR - la fonction pir_alert
7. Senseur PIR - la fonction pir_update
Objet 3 : Surveillance de la véranda
4. La fonction check_contact()
5. La fonction check_mqtt_sub()
7. La fonction chaud_exec_cmd()
1. Pourquoi utiliser une base de données ?
2. Quel moteur de base de données ?
3. Principe de fonctionnement de push-to-db
2. Classe de stockage, type de données et affinité
c. Affinité de type pour les colonnes
d. Résolution de l’affinité de type
3. Affinité, expressions, comparaison et tri
b. Comparaison, tri et groupage
4. Clé primaire et auto-incrément
b. Table rowid et clé primaire
5. SQLite3 et accès concurrents
b. Installer le support Python
a. Documentation SQL pour SQLite
b. Commandes de l’interpréteur SQLite
a. Opération de lecture SQLite
b. Opération d’insertion SQLite
Approches techniques de push-to-db
1. Approche base de données de push-to-db
a. topicmsg - dernier message reçu
b. ts_xxx - historique de messages
2. Approche logicielle de push-to-db
a. Diagramme des classes (partie 1)
b. Fichier de configuration de push-to-db
c. Diagramme des classes (partie 2)
1. Les répertoires de stockage de push-to-db
2. Création des tables de push-to-db
4. Le script d’installation de push-to-db
1. Logger et fichier de configuration
Exécution du script push-to-db
Service systemd pour push-to-db
1. Quand démarrer le service ?
3. Configurer, démarrer, contrôler
3. Les nombreuses extensions Flask
4. Application Flask en production
b. Connexion à la base de données
c. Organisation du mini-projet
12. Ressources et documentations
a. Créer une application Flask
b. Test avec serveur web Flask et string Python
c. Test en console et string Python
d. Utiliser le projet Jinja Live Parser
a. {{ … }} : évaluation d’expression
b. {% … %} : instructions de contrôle de flux
c. {# … #} : insertion de commentaire
b. Heritage-app : l’héritage Jinja par la pratique
4. Fonctionnalités du projet Dashboard
2. Utilisation du template de base
1. Base de données dashboard.db
a. Schéma de la base de données
c. Création des tables de Dashboard
d. Copie de la base de données
2. Fichier de configuration de Dashboard
Détails de l’application Flask
a. La fonction get_db( db_key ) multi bases de données
b. Les classes DBHelper de Dashboard
c. Exemple : liste des topics disponibles pour Dashboard
d. Exemple : extraction de l’historique dans Dashboard
e. Affichage d’un tableau de bord
4. Les filtres Jinja personnalisés
5. Affichage du tableau de bord
d. La macro select_color (édition d’un bloc)
1. Développements complémentaires
b. Bloc et paramètres additionnels
b. Ajouter le nouveau type de bloc
b. MQTT en JavaScript et WebSocket
c. Activer le support WebSocket sur Mosquitto
d. Tester le client MQTT JavaScript
e. Mille milliards de mille sabords !
La liste ci-dessous reprend différents éléments exploités dans le projet ou dans l’ouvrage. Chaque élément est accompagné d’une petite description.
Raspberry Pi 3
Le Raspberry Pi est certainement le nano-ordinateur le plus célèbre du monde.
À peine plus grand qu’une carte de crédit, le Raspberry Pi est un formidable outil d’apprentissage et une excellente base pour le développement de solutions amateur et semi-professionnelles.
Propulsé par 4 cœurs à 1 GHz, 1 gigaoctet de RAM et Linux, le Raspberry Pi dispose d’interfaces Wi-Fi et Bluetooth, de 4 ports USB, d’une interface Ethernet et d’un GPIO à 40 broches permettant de brancher une multitude de périphériques et de matériels électroniques.
Feather ESP8266 Huzzah
L’ESP8266 est un microcontrôleur Wi-Fi et probablement la plateforme la plus célèbre après l’Arduino UNO (la référence en programmation de microcontrôleurs dans le monde des makers).
L’ESP8266 basé sur le module ESP12S se retrouve sur de nombreuses plateformes de développement comme Feather, Wemos, NodeMCU. C’est la version Feather ESP8266 d’Adafruit Industries qui a été sélectionnée dans cet ouvrage. Adafruit Industries dispose d’un large réseau de distribution et de produits fiables. Le module Feather exploite un module ESP certifié et les cartes restent identiques d’une livraison à l’autre (ce qui n’est pas forcément le cas des produits directement commandés en Chine). Autre point important, cette version Feather de l’ESP8266 dispose d’un auto-reset pour activer le mode flash sans avoir à manipuler de bouton.
Feather est également un écosystème de cartes et d’extensions plus intéressantes les unes que les autres. La gamme Feather d’Adafruit est accessible directement sur : https://www.adafruit.com/category/943
Hormis des produits de qualité, Adafruit Industries dispose d’une grande communauté et d’un excellent support technique.
Les modules relais pré-assemblés permettent de commander facilement des objets de notre quotidien. Ils agissent comme des interrupteurs commandés par un microcontrôleur ou un nano-ordinateur.
Si le module relais permet de travailler facilement avec des appareils connectés sur le réseau domestique, il est important de mentionner que l’utilisation d’une tension supérieure à 30 V peut devenir extrêmement dangereuse. Les risques d’électrocution sont réels et peuvent, dans certains cas, conduire à un arrêt cardiaque ! La manipulation de circuits haute tension, y compris du réseau domestique, doit être réservée aux personnes disposant du savoir-faire adéquat.
Senseur d’humidité DHT11
Le DHT11 est un senseur d’humidité très bon marché souvent utilisé par les makers. Il permet de relever l’humidité relative entre 20 et 80 %. Le senseur mesure la température pour ajuster les mesures effectuées, information également fournie par le senseur. À noter que l’humidité relative dépend de la température, car l’air peut emmagasiner plus d’humidité si la température augmente.
Le vieillissement de ce type de senseur est une caractéristique méconnue par ses utilisateurs. En effet, la mesure de l’humidité est réalisée par un effet capacitif, ce qui implique qu’une partie du senseur doit être en contact avec l’air ambiant. Il y a donc des phénomènes d’oxydation qui entrent en compte et qui provoquent le vieillissement du senseur.
Senseur AM2315
Le senseur AM2315 fonctionne de façon similaire au DHT11 à la différence que celui-ci offre un relevé entre 0 et 100 % d’humidité relative et embarque également un senseur de température numérique. À placer à l’abri des intempéries (il n’est pas weather proof), ce senseur peut effectuer des relevés en extérieur.
Senseur DS18B20
Le senseur DS18B20 est un senseur numérique utilisant un bus de données 1-Wire qui permet de placer plusieurs senseurs sur un même bus. Le DS18B20 est populaire dans le monde des makers et régulièrement exploité dans le monde professionnel. Ce composant est utilisé sur une grande variété de plateformes. Disponible sous forme d’un composant brut ressemblant à un transistor, le DS18B20 est également distribué sous forme de sonde (dans un capuchon en inox) permettant de relever la température en de nombreux endroits.
Senseur BME280 en breakout
Senseur BMP280 en breakout
Le BMP280 est un senseur environnemental permettant de relever la température et la pression atmosphérique. C’est donc un composant idéal pour réaliser des relevés météorologiques.
Le BME280 est une évolution du BMP280 permettant, en plus, de faire un relevé d’humidité relative.
Senseur TSL2561 en breakout
Le TSL2561 permet d’effectuer un relevé de luminosité mesuré en Lux. Le TSL2561 utilise un double senseur interne autorisant un relevé du spectre entier et du spectre infrarouge. Ce senseur dispose donc des informations adéquates pour être capable de fournir une réponse proche de celle de l’œil humain.
Convertisseur ADC ADS1115 en breakout
L’ADS1115 est un convertisseur analogique vers numérique, ce qui lui permet de lire des tensions analogiques. L’ADS1115 dispose d’un amplificateur à gain programmable, ce qui permet à la carte de lire de très faibles tensions. L’ADS1115 propose des relevés d’une excellente précision et supporte également un mode différentiel permettant de lire la différence de tension entre deux broches du convertisseur.
L’ADS1115 est un composant idéal pour offrir des entrées analogiques à un Raspberry Pi ou un ESP8266. Sur un Arduino, il offrira des entrées analogiques avec une bien meilleure précision que celle offerte par le microcontrôleur Atmel.
Senseur TMP36
Le TMP36 est un senseur de température analogique bon marché et très populaire dans le monde Arduino. Ce composant fournit une tension analogique proportionnelle à la température. Le TMP36 s’utilise conjointement avec un ADS1115 sur un Raspberry Pi ou un ESP8266.
Photorésistance
La photorésistance, également appelée LDR, est un composant dont la résistance varie en fonction des conditions de luminosité. Un tel composant n’offre pas de mesure précise, mais permet de relever des conditions de luminosité relatives. Il peut être utilisé pour savoir si la lumière est allumée dans une pièce, s’il fait jour ou nuit ou toute autre mesure impliquant une forte modification des conditions de luminosité.
Senseur PIR
Le senseur PIR est utilisé pour réaliser la détection de mouvement. Celui employé dans cet ouvrage est un senseur autonome avec sortie numérique. Ce modèle est très simple à utiliser, il active une sortie pendant plusieurs secondes lorsqu’un mouvement est détecté. Un tel senseur est généralement équipé de deux potentiomètres : un premier potentiomètre permet de régler la sensibilité du senseur tandis que le deuxième potentiomètre règle le temps d’activation de la sortie numérique.
Contact magnétique
Le contact magnétique est composé de deux éléments : un interrupteur reed (sensible au champ magnétique) et un aimant. Lorsque l’aimant s’éloigne, l’interrupteur magnétique s’ouvre, ce qui permet d’interrompre un circuit électrique. Lorsque l’aimant revient près de l’interrupteur alors celui-ci se referme.
Les contacts magnétiques sont utilisés pour détecter l’ouverture d’une porte, d’un tiroir, d’une cache secrète, etc.
Senseur à effet Hall
Le senseur à effet Hall permet de détecter la présence d’un champ magnétique. Ce senseur existe avec une sortie analogique ou une sortie numérique. Un senseur analogique permet de faire des relevés d’intensité de champ magnétique (hors cadre du présent ouvrage) tandis que le senseur numérique permet de relever la présence (ou l’absence) du champ magnétique.
Le senseur à effet Hall numérique s’utilise généralement avec un aimant et permet de réaliser des interrupteurs sans contact. Il est ainsi possible de réaliser une fin de course avec un aimant, un compte tour, un détecteur de niveau d’eau en plaçant l’aimant sur un flotteur, un détecteur sans contact (très pratique pour détecter l’ouverture d’une poubelle) ou un interrupteur masqué.
Le code source du projet est disponible sous forme d’une archive depuis la page Informations générales.
Cette archive contient une version figée du projet dans l’état où il était au moment de l’édition du présent ouvrage.
L’archive contenant le code source
Cette version correspond scrupuleusement aux explications disponibles dans l’ouvrage.
L’archive peut être extraite dans le répertoire utilisateur du Raspberry Pi (soit /home/pi/) à l’aide de la commande :
unzip -e LFPYRASPFL.zip
Le projet a entièrement été développé dans le dépôt la-maison-pythonic disponible sur GitHub. Ce projet connaîtra certainement d’autres évolutions après la parution de l’ouvrage.
Durant la lecture de l’ouvrage, il est recommandé d’utiliser l’archive disponible depuis la page Informations générales.
Après la lecture de l’ouvrage, le lecteur pourra profiter des dernières avancées en téléchargeant la version disponible sur GitHub.
La version GitHub est disponible ici : https://github.com/mchobby/la-maison-pythonic
GitHub du projet « la-maison-pythonic »
Le contenu du GitHub peut être cloné sur le Raspberry Pi avec la commande :
git clone https://github.com/mchobby/la-maison-pythonic.git
Clonage du projet GitHub sur le Raspberry Pi
Ce livre utilise un Raspberry Pi comme élément central du développement. Sa configuration est donc un point important.
Pour simplifier les étapes de configuration, le Raspberry Pi sera démarré avec un système d’exploitation Raspbian (Linux) pleinement fonctionnel et donc avec un environnement de bureau, ce qui est plus confortable pour les nouveaux venus.
Cela étant, tout au long du livre, la ligne de commande et la connexion SSH seront surtout exploitées. SSH permet de disposer d’une ligne de commande sur le Raspberry Pi depuis un ordinateur distant.
Préparer la carte micro SD
Flasher la carte micro SD avec le système d’exploitation Raspbian Stretch (ou plus récent). Le système d’exploitation peut être téléchargé depuis le site de la fondation Raspberry Pi (https://www.raspberrypi.org). Pour flasher la carte SD, le logiciel Etcher (https://etcher.io/) est un excellent outil libre fonctionnant sur les systèmes d’exploitation Linux, Windows et macOS.