1. Livres et vidéos
  2. Python, Raspberry Pi et Flask - Capturez des données télémétriques et réalisez des tableaux de bord web (2e édition)

Python, Raspberry Pi et Flask Capturez des données télémétriques et réalisez des tableaux de bord web (2e édition)

  • En stock
  • Expédié en 24h00
  • Livraison à partir de 0,01 €
  • Version en ligne offerte pendant 1 an
  • 1 h d'accès gratuit à tous nos livres et vidéos pour chaque commande
  • Accessible immédiatement
  • Version HTML
  • Accès illimité 24h/24, 7J/7
  • Accès illimité 24h/24, 7J/7
  • Tous les livres en ligne, les vidéos et les cours enregistrés ENI
  • Plus de 10 nouveautés livres et vidéos chaque mois
  • Les nouveautés disponibles le jour de leur sortie
  • Accès 100% en ligne

Présentation

Ce livre s'adresse à toute personne qui souhaite découvrir comment capturer des données télémétriques d'une maison (température, humidité, pression atmosphérique, luminosité) et les présenter dans une interface web sous forme de tableaux de bord. L'auteur s'appuie pour cela sur les possibilités offertes par le langage Python, le nano-ordinateur Raspberry Pi et le framework Flask. Bien qu'appliqué au Raspberry Pi, le contenu du livre est suffisamment universel pour être exploité sur d'autres plateformes telles que des ordinateurs.

Pour tirer le meilleur profit de la lecture de ce livre, des notions de programmation orientée objet et quelques rudiments sur le langage Python et en électronique sont nécessaires. Une première expérience avec le Raspberry Pi est également souhaitée.

Les points technologiques du livre sont isolés et vulgarisés avant d'être intégrés dans un projet global qui sert de fil conducteur à la prise en main et l'exploitation des différentes technologies étudiées. L'auteur commence par présenter la collecte de données à l'aide de composants basés sur les microcontrôleurs ESP8266 et ESP32 programmés avec MicroPython. Il détaille ensuite la centralisation de ces données à l'aide d'un broker MQTT fonctionnant sur un Raspberry Pi. Dans la suite du livre, le lecteur découvre comment une base de données SQLite 3 permet d'offrir un stockage persistant des données et comment elle peut être exploitée par une application Flask pour produire des tableaux de bord sur mesure.

En marge d'une solution Python, les objets ESP et le broker MQTT peuvent également être réutilisés avec InfluxDB et Grafana. Le lecteur découvrira alors InfluxDB, une base de données TimeSeries optimisée pour la capture de gros volumes de données en temps réel. Le greffon Telegraph permettra de capturer les données envoyées sur le broker MQTT pour les injecter dans InfluxDB. Enfin, l'outil Grafana permettra de consulter ces données sous forme de graphiques et visualisations attrayants.

À l'issue de ce livre, le lecteur disposera de bases solides pour créer sereinement une grande variété de solutions, plus ou moins sophistiquées, en fonction de ses besoins.

Des éléments complémentaires sont en téléchargement sur le site www.editions-eni.fr.

Table des matières

  • Présentation
    • 1. Avant-propos
    • 2. Motivations
    • 3. Présentation du projet
    • 4. Objectifs de l'ouvrage
    • 5. Prérequis
    • 6. Matériel utilisé
      • 6.1 Raspberry Pi
      • 6.2 Feather ESP8266 Huzzah
      • 6.3 Feather ESP32 Huzzah
      • 6.4 Feather OLED Wing
      • 6.5 Module relais
      • 6.6 DHT11 - Humidité
      • 6.7 AM2315 - Température et humidité
      • 6.8 DS18B20 - Température
      • 6.9 BME280 et BMP280 - Pression, humidité, température
      • 6.10 TSL2561 - Luminosité
      • 6.11 ADS1115 - Lecture analogique
      • 6.12 TMP36 - Température
      • 6.13 Photorésistance - Luminosité
      • 6.14 PIR - Détection de mouvement
      • 6.15 Contact magnétique
      • 6.16 Capteur à effet Hall numérique
      • 6.17 CCS811 - Mesure de CO2
      • 6.18 Capteur de courant non invasif
    • 7. Code source
      • 7.1 Téléchargement
      • 7.2 GitHub
    • 8. Configuration
      • 8.1 Installation du Raspberry Pi
      • 8.2 Utilitaires : des outils pour travailler
        • 8.2.1 Connexion SSH
        • 8.2.2 Éditeur de texte Nano
        • 8.2.3 Transfert de fichiers via SSH (sftp)
        • 8.2.4 Système de fichiers SSH
        • 8.2.5 Bureau à distance
    • 9. Type de données collectées
  • Le broker MQTT
    • 1. Présentation et concepts
      • 1.1 Le broker MQTT, élément central du réseau MQTT
      • 1.2 Les éléments de MQTT
      • 1.3 Le broker MQTT
      • 1.4 Les topics
      • 1.5 Les publishers
      • 1.6 Les subscribers
      • 1.7 Le ClientId
    • 2. Révisions de MQTT
    • 3. Les topics en détail
      • 3.1 Contenu du message
        • 3.1.1 Le message selon MQTT
        • 3.1.2 En marge du standard
      • 3.2 Création de topic et bonnes pratiques
      • 3.3 Les topics système
    • 4. Souscription et expression de filtrage
      • 4.1 Expression de filtrage sans joker
      • 4.2 Le joker de niveau
      • 4.3 Le joker multiniveau
    • 5. Les qualités de service MQTT
      • 5.1 Les niveaux de qualité
        • 5.1.1 QoS 0 : une fois maximum
        • 5.1.2 QoS 1 : au moins une fois
        • 5.1.3 QoS 2 : exactement une fois
      • 5.2 Rétrogradation de QoS
      • 5.3 Quel QoS utiliser et quand ?
    • 6. La rétention de messages
    • 7. Les clients persistants
    • 8. Message testament
    • 9. Quel broker MQTT ?
    • 10. Installation de Mosquitto
      • 10.1 Mise à jour
      • 10.2 Installation
    • 11. Test avec Mosquitto.org
      • 11.1 La souscription
      • 11.2 La publication
      • 11.3 Tester le broker MQTT du Raspberry Pi
    • 12. Topics du projet
    • 13. QoS du projet
    • 14. Sécurité
    • 15. Configurer le login du broker MQTT
      • 15.1 Modifier la configuration
      • 15.2 Tester la configuration
    • 16. MQTT en Python
      • 16.1 test-mqtt-client-sub.py
      • 16.2 test-mqtt-client-pub.py
      • 16.3 Documentation complémentaire
    • 17. MQTT en MicroPython
  • ESP8266 et ESP32 sous MicroPython
    • 1. Présentation des ESP
      • 1.1 Les possibilités offertes par ESP
      • 1.2 Les plateformes ESP populaires
        • 1.2.1 Les plateformes ESP8266
        • 1.2.2 Les plateformes ESP32
      • 1.3 Programmer un ESP
      • 1.4 Feather Huzzah ESP8266 et ESP32 en détail
      • 1.5 Brochage des Feather Huzzah ESP8266 et ESP32
        • 1.5.1 Alimentation
        • 1.5.2 Port série
        • 1.5.3 Broches d'entrée/sortie
        • 1.5.4 Les autres broches
    • 2. Charger le firmware MicroPython
      • 2.1 Identifier le firmware MicroPython
      • 2.2 Préparatifs
      • 2.3 Reflasher un ESP
    • 3. Prise de contrôle
      • 3.1 Communiquer avec MicroPython
      • 3.2 Communiquer avec un ESP sous MicroPython
      • 3.3 REPL : l'invite de commandes MicroPython
      • 3.4 RShell
      • 3.5 Ampy
    • 4. WebREPL
      • 4.1 Le démon WebREPL
        • 4.1.1 Activer WebREPL sur l'ESP
        • 4.1.2 Le mot de passe WebREPL
      • 4.2 Le client WebREPL
    • 5. Nom d'hôte et adresse MAC
    • 6. Le mode point d'accès (AP)
    • 7. Le mode station (STA)
      • 7.1 Mode STA et scan réseau
      • 7.2 Réseau Wi-Fi visible ou masqué
      • 7.3 Connexion en mode STA
      • 7.4 WebREPL en mode STA
      • 7.5 Désactivation du point d'accès
      • 7.6 Rechercher l'adresse IP d'un ESP
    • 8. Séquence de démarrage MicroPython
      • 8.1 Fichier boot.py
      • 8.2 Fichier main.py
      • 8.3 Un fichier boot.py pour ESP
        • 8.3.1 Script trop optimiste et conséquences
        • 8.3.2 RunApp - Activation de l'application
        • 8.3.3 Un script de boot avancé
    • 9. Programmer
      • 9.1 Création d'une bibliothèque
      • 9.2 Les bibliothèques MicroPython
        • 9.2.1 Bibliothèques standards et microbibliothèques
        • 9.2.2 Bibliothèques spécifiques à MicroPython
        • 9.2.3 Bibliothèque spécifique à l'ESP
        • 9.2.4 Autres bibliothèques MicroPython
        • 9.2.5 Mécanisme de chargement d'une bibliothèque
      • 9.3 Charger et exécuter un script à la volée
      • 9.4 RunApp : exécution conditionnelle de main.py
      • 9.5 Entrées/sorties sur ESP
        • 9.5.1 Entrée numérique
        • 9.5.2 Entrée numérique (pull-up interne)
        • 9.5.3 Entrée numérique et déparasitage logiciel
        • 9.5.4 Sortie numérique
        • 9.5.5 Entrée analogique sur ESP8266
        • 9.5.6 Entrées analogiques sur ESP32
        • 9.5.7 Ajout d'entrée/sortie avec MCP23017
        • 9.5.8 Lecture analogique avec l'ADS1115
      • 9.6 Capteur et interface sur ESP
        • 9.6.1 Capteur PIR - capteur de proximité
        • 9.6.2 Contact magnétique
        • 9.6.3 DHT11 - humidité
        • 9.6.4 Capteur à effet Hall
        • 9.6.5 TSL2561 - luminosité
        • 9.6.6 TSL2591 - luminosité
        • 9.6.7 BME280 - température, humidité et pression barométrique
        • 9.6.8 CCS811 - capteur de qualité d’air
        • 9.6.9 MOD-ENV - capteur environnemental
        • 9.6.10 Module relais
        • 9.6.11 OLED FeatherWing - afficheur OLED
    • 10. MQTT sous ESP
      • 10.1 Publication MQTT sous MicroPython
      • 10.2 Souscription MQTT sous MicroPython
    • 11. Asyncio sur ESP
      • 11.1 Asyncio en quelques mots
      • 11.2 Installer Asyncio
      • 11.3 Asyncio par l'exemple
      • 11.4 Fonction run_every pour Asyncio
      • 11.5 Plus d'informations sur Asyncio
    • 12. Abstraction matérielle ESP8266/ESP32
      • 12.1 Abstraction du bus I2C
      • 12.2 Abstraction de la LED utilisateur
  • Les objets ESP
    • 1. Informations pratiques
      • 1.1 Prérequis et configurations
      • 1.2 LED de statut
      • 1.3 Les topics MQTT
      • 1.4 Télécharger et préparer le code des objets IoT
    • 2. Fonctionnement général d’un objet IoT
      • 2.1 Principales sections
      • 2.2 Paramètres d’un objet IoT
      • 2.3 RunApp et LED d'activité
      • 2.4 La fonction led_error()
      • 2.5 Les tâches et fonctions asynchrones des objets IoT
    • 3. Objet 1 : Météo cabane de jardin
      • 3.1 Schéma de raccordement
      • 3.2 Téléverser les scripts
      • 3.3 Fonctionnement du script
      • 3.4 Tester l'objet
    • 4. Objet 1a : Cabane complément
      • 4.1 Schéma de raccordement
      • 4.2 Téléverser les scripts
      • 4.3 Fonctionnement du script
    • 5. Objet 2 : Surveillance salon
      • 5.1 Téléverser les scripts
      • 5.2 Fonctionnement du script
      • 5.3 La fonction capture_1h()
      • 5.4 Capteur PIR - variables et utilisation
      • 5.5 Senseur PIR - la fonction pir_activated
      • 5.6 Capteur PIR - la fonction pir_alert
      • 5.7 Capteur PIR - la fonction pir_update
      • 5.8 Problèmes de concurrence
      • 5.9 Tester l'objet
    • 6. Objet 3 : Surveillance de la véranda
      • 6.1 Téléverser les scripts
      • 6.2 Fonctionnement du script
      • 6.3 La fonction capture_1h()
      • 6.4 La fonction check_contact()
      • 6.5 La fonction check_ldr()
      • 6.6 Tester l'objet
    • 7. Objet 4 : Chaufferie
      • 7.1 Téléverser les scripts
      • 7.2 Fonctionnement du script
      • 7.3 La fonction capture_1h()
      • 7.4 La fonction capture_10m()
      • 7.5 La fonction check_mqtt_sub()
      • 7.6 La fonction sub_cb()
      • 7.7 La fonction chaud_exec_cmd()
      • 7.8 Tester l'objet
    • 8. Objet 5 : Commande de chaufferie
      • 8.1 Téléverser les scripts
      • 8.2 Fonctionnement du script
      • 8.3 Gestion du changement d’état
      • 8.4 Réception des données MQTT
    • 9. Objet 5 : Surveillance environnementale
      • 9.1 Téléverser les scripts
      • 9.2 Fonctionnement du script
      • 9.3 La fonction capture_5min()
      • 9.4 Tester l’objet
    • 10. Dépannage d’un objet IoT
  • Persistance des données
    • 1. Introduction
      • 1.1 Pourquoi utiliser une base de données ?
      • 1.2 Quel moteur de base de données ?
      • 1.3 Principe de fonctionnement de push-to-db
    • 2. SQLite 3
      • 2.1 Présentation
      • 2.2 Classe de stockage, type de données et affinité
        • 2.2.1 Classe de stockage
        • 2.2.2 Stockage des date et heure
        • 2.2.3 Affinité de type pour les colonnes
        • 2.2.4 Résolution de l'affinité de type
      • 2.3 Affinité, expressions, comparaison et tri
        • 2.3.1 Affinité des expressions
        • 2.3.2 Comparaison, tri et groupage
      • 2.4 Clé primaire et auto-incrément
        • 2.4.1 Définir une clé primaire
        • 2.4.2 Table rowid et clé primaire
      • 2.5 SQLite 3 et accès concurrents
      • 2.6 Installation
        • 2.6.1 Installer SQLite 3
        • 2.6.2 Installer le support Python
      • 2.7 Premiers pas avec SQLite 3
        • 2.7.1 Documentation SQL pour SQLite
        • 2.7.2 Commandes de l'interpréteur SQLite
      • 2.8 SQLite et Python
        • 2.8.1 Opération de lecture SQLite
        • 2.8.2 Opération d'insertion SQLite
        • 2.8.3 Row Factory de SQLite
    • 3. Approches techniques de push-to-db
      • 3.1 Approche base de données de push-to-db
        • 3.1.1 topicmsg - dernier message reçu
        • 3.1.2 ts_xxx - historique de messages
      • 3.2 Approche logicielle de push-to-db
        • 3.2.1 Diagramme des classes (partie 1)
        • 3.2.2 Fichier de configuration de push-to-db
        • 3.2.3 Diagramme des classes (partie 2)
    • 4. Configuration de push-to-db
      • 4.1 Les répertoires de stockage de push-to-db
      • 4.2 Création des tables de push-to-db
      • 4.3 push-to-db.ini
      • 4.4 Le script d'installation de push-to-db
    • 5. Logger Python
      • 5.1 Logger et fichier de configuration
      • 5.2 Configuration du logger
      • 5.3 Utilisation du logger
    • 6. Exécution du script push-to-db
    • 7. Service systemd pour push-to-db
      • 7.1 Quand démarrer le service ?
      • 7.2 Créer le fichier Unit
      • 7.3 Configurer, démarrer, contrôler
      • 7.4 Documentation sur systemd
    • 8. Améliorations
  • Développement web en Python
    • 1. Présentation de Flask
      • 1.1 Pourquoi Flask ?
      • 1.2 La flexibilité de Flask
      • 1.3 Les nombreuses extensions Flask
      • 1.4 Flask plus en détail
        • 1.4.1 Werkzeug
        • 1.4.2 WSGI
        • 1.4.3 Application Flask
        • 1.4.4 Jinja
        • 1.4.5 Base de données
      • 1.5 Documentations
    • 2. Anatomie d'un projet Flask
    • 3. Installation et prise en main
      • 3.1 L'utilitaire flask
      • 3.2 Prise en main avancée
      • 3.3 Déboguer avec Flask
      • 3.4 Application Flask en production
    • 4. Les fondamentaux de Flask
      • 4.1 Routes et paramètres
      • 4.2 Retourner une erreur
      • 4.3 Utilisation de template
      • 4.4 Création d'URL
      • 4.5 Redirection
      • 4.6 Requêtes GET et POST
      • 4.7 Contexte applicatif
        • 4.7.1 L'objet g
        • 4.7.2 Connexion à la base de données
      • 4.8 Les cookies
      • 4.9 Les sessions
      • 4.10 Journalisation
      • 4.11 Mini-projet Fruits
        • 4.11.1 Sources du mini-projet
        • 4.11.2 La connexion SQLite 3
        • 4.11.3 Organisation du mini-projet
        • 4.11.4 Détails du mini-projet
      • 4.12 Ressources et documentations
    • 5. Templates Jinja
      • 5.1 Exécution d'un template
      • 5.2 Tester un template
        • 5.2.1 Créer une application Flask
        • 5.2.2 Test avec serveur web Flask et string Python
        • 5.2.3 Test en console et string Python
        • 5.2.4 Utiliser le projet Jinja Live Parser
      • 5.3 Évaluation des balises
        • 5.3.1 {{ ... }} : évaluation d'expression
        • 5.3.2 {% ... %} : instructions de contrôle de flux
        • 5.3.3 {# ... #} : insertion de commentaire
        • 5.3.4 # ... : ligne d'instruction
      • 5.4 Variables et expressions
        • 5.4.1 Variables spéciales
        • 5.4.2 Séquence d'échappement
        • 5.4.3 Assignation
      • 5.5 Branchement
      • 5.6 Itération
      • 5.7 Les macros
      • 5.8 Contrôle des espaces
      • 5.9 Filtres Jinja
      • 5.10 Inclusion de template
      • 5.11 Importer des macros
      • 5.12 Héritage de template
        • 5.12.1 Les éléments de l'héritage
        • 5.12.2 Heritage-app : l'héritage Jinja par la pratique
        • 5.12.3 Template de base et blocs
      • 5.13 Template enfant
        • 5.13.1 Superbloc
        • 5.13.2 Ressources
      • 5.14 Message Flash
  • Le tableau de bord
    • 1. Présentation
      • 1.1 Préambule
      • 1.2 Dépôt du projet Dashboard
      • 1.3 Éléments principaux
      • 1.4 Fonctionnalités du projet Dashboard
    • 2. Structure HTML
      • 2.1 Disposition de la page
      • 2.2 Les blocs d'informations
      • 2.3 La liste
    • 3. Template Jinja
      • 3.1 Le template de base
      • 3.2 Utilisation du template de base
    • 4. Configuration
      • 4.1 Base de données dashboard.db
        • 4.1.1 Schéma de la base de données
        • 4.1.2 Répertoire de stockage
        • 4.1.3 Création des tables de Dashboard
        • 4.1.4 Copie de la base de données
      • 4.2 Fichier de configuration de Dashboard
    • 5. Détails de l'application Flask
      • 5.1 Répertoires et fichiers
      • 5.2 Les routes de Dashboard
      • 5.3 Accès aux données
        • 5.3.1 La fonction get_db( db_key ) multibases de données
        • 5.3.2 Les classes DBHelper de Dashboard
        • 5.3.3 Exemple : liste des topics disponibles pour Dashboard
        • 5.3.4 Exemple : extraction de l'historique dans Dashboard
        • 5.3.5 Affichage d'un tableau de bord
      • 5.4 Les filtres Jinja personnalisés
      • 5.5 Affichage du tableau de bord
      • 5.6 Les macros Jinja
        • 5.6.1 La macro make_block
        • 5.6.2 La macro block_icon
        • 5.6.3 La macro block_big_text
        • 5.6.4 La macro select_color (édition d'un bloc)
    • 6. Bloc SWITCH (marche/arrêt)
      • 6.1 Développements complémentaires
        • 6.1.1 MQTT sources
        • 6.1.2 Bloc et paramètres additionnels
      • 6.2 Ajout du bloc SWITCH
        • 6.2.1 Block_config du switch
        • 6.2.2 Ajouter le nouveau type de bloc
      • 6.3 Le switch et MQTT
        • 6.3.1 Client MQTT JavaScript
        • 6.3.2 MQTT en JavaScript et WebSocket
        • 6.3.3 Activer le support WebSocket sur Mosquitto
        • 6.3.4 Tester le client MQTT JavaScript
        • 6.3.5 Alternative à MQTT en JavaScript
        • 6.3.6 La route MqttProxyPublish
        • 6.3.7 Événement on_switch_change
      • 6.4 Tester le bloc SWITCH
    • 7. Améliorations
  • InfluxDB
    • 1. Introduction
    • 2. InfluxDB
      • 2.1 Présentation
      • 2.2 Concepts InfluxDB
    • 3. Installation
    • 4. Premiers pas avec InfluxDB
      • 4.1 Quelques commandes utiles
      • 4.2 Autocritique
    • 5. Commandes de l’interpréteur
      • 5.1 Commandes InfluxDB
      • 5.2 Paramètres de l’utilitaire influx
    • 6. La commande SELECT
      • 6.1 Multiple sources
      • 6.2 Nom de table qualifié
      • 6.3 La clause WHERE
      • 6.4 Expressions régulières
      • 6.5 Casting de type
    • 7. Importer des données
    • 8. Règles de rétention
      • 8.1 Accès aux données
      • 8.2 Requêtes continues
      • 8.3 Rétention et requêtes continues par la pratique
      • 8.4 Bonnes pratiques de conception
      • 8.5 Documentation pour InfluxDB
    • 9. InfluxDB API
      • 9.1 Créer un utilisateur
      • 9.2 Activer l’authentification sur InfluxDB
      • 9.3 Tester l’authentification
      • 9.4 Tester InfluxDB API
    • 10. Capture des données MQTT
    • 11. Greffon Telegraf MQTT pour InfluxDB
      • 11.1 Installation
        • 11.1.1 Mise à jour des dépôts
        • 11.1.2 Installation de telegraf
      • 11.2 Configuration
        • 11.2.1 Configuration du service Telegraf
        • 11.2.2 Configuration telegraf avancée
    • 12. InfluxDB et Python
      • 12.1 Installation
      • 12.2 Opération de lecture
      • 12.3 Opération d’écriture
    • 13. Duplicata de champs
    • 14. Ensuite
  • Grafana
    • 1. Introduction
    • 2. Les concepts fondamentaux
      • 2.1 Les sources de données
      • 2.2 Éditeur de requêtes
      • 2.3 Organisation
      • 2.4 Utilisateur
      • 2.5 Panneau
      • 2.6 Ligne
      • 2.7 Tableau de bord
    • 3. Installer Grafana
      • 3.1 Installation du dépot
      • 3.2 Première connexion et mot de passe
    • 4. Les données InfluxDB
      • 4.1 Collecter rapidement des données
      • 4.2 Améliorer la fiabilité des mesures
      • 4.3 Contrôler la capture de données
    • 5. Afficher les données InfluxDB
      • 5.1 Source de données InfluxDB
      • 5.2 Créer un tableau de bord
        • 5.2.1 Ajouter un panneau
        • 5.2.2 Sélectionner la série pour la cabane
      • 5.3 Ajouter une seconde série dans le graphique
      • 5.4 Exploration des données
      • 5.5 Autre visualisation
      • 5.6 Quelques astuces Grafana
        • 5.6.1 Redimensionner un panneau
        • 5.6.2 Glisser/déposer un panneau
        • 5.6.3 Transformer en ligne
        • 5.6.4 Enregistrer le tableau de bord
    • 6. Limites de Grafana
      • 6.1 Liens Internet sur un panneau
      • 6.2 Lien vers MqttProxyPublish
      • 6.3 Liens Grafana et méthode GET
  • Conclusion
    • 1. Introduction
    • 2. Remerciements
    • 3. Retour sur client MQTT JavaScript
  • Annexes
    • 1. Installation rapide
      • 1.1 Prérequis
      • 1.2 Début de l'installation
      • 1.3 Récupération des sources
      • 1.4 Poursuivre l'installation
      • Index

Auteur

Dominique MEURISSEEn savoir plus

Ingénieur de formation et ancien architecte logiciel, Dominique MEURISSE se passionne pour la programmation des nano-ordinateurs (Raspberry Pi, Odroid, OlinuXino) et des microcontrôleurs (Arduino, Feather, ESP, Pyboard, etc.). Ardent défenseur de Python, MicroPython ou Open-Hardware (Adafruit Industries), sa passion le pousse à participer activement à la rédaction du wiki, du blog et des fiches produits documentées du site de vente en ligne de sa société Microcontrôleur Hobby (MC Hobby SPRL). Fort de cet enthousiasme, il poursuit le partage de son savoir avec l'écriture de ses livres dédiés au langage Python sur microcontrôleur.

Caractéristiques

  • Nombre de pages 794 pages
  • Parution avril 2021
    • Livre (broché) - 17 x 21 cm
    • ISBN : 978-2-409-02988-2
    • EAN : 9782409029882
    • Ref. ENI : LF2PYRASPFL
  • Parution avril 2021
    • HTML
    • ISBN : 978-2-409-02989-9
    • EAN : 9782409029899
    • Ref. ENI : LNLF2PYRASPFL

Téléchargements

En complétant ce formulaire, vous acceptez d'être contacté afin de recevoir des informations sur nos produits et services ainsi que nos communications marketing. Vous aurez la possibilité de vous désabonner de nos communications à tout moment. Pour plus d'informations sur notre politique de protection des données, cliquez ici.
  • Des fichiers complémentaires (27 923 Ko)