start:projets:capteurweb

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

start:projets:capteurweb [2021/11/26 23:59] – créée finizistart:projets:capteurweb [2021/11/26 23:59] (Version actuelle) finizi
Ligne 1: Ligne 1:
-\\ +[[:start:projets|Les idées & projets]]
-<p>\\ +
-<a href="/wiki0/doku.php?id=start:projets" class="wikilink1" title="start:projets" data-wiki-id="start:projets">Les idées & projets</a>\\ +
-</p>\\ +
-<hr />+
  
-<h1>Les données, du capteur au Web</h1>\\ +----
-<div class="level1">+
  
-</div>+====== Les données, du capteur au Web ======
  
-<h4>Aussi appelé "IOT" pour "Internet des Objets" (Internet Of Things)</h4>\\ +=== Aussi appelé "IOT" pour "Internet des Objets" (Internet Of Things) ===
-<div class="level4">\\ +
-<hr />+
  
-<p>\\ +----
-Cet atelier va permettre de découvrir toutes les techniques utilisées pour lire une donnée (température, pression, qualité de l'air, puissance consommée, …) et pour l'utiliser et l'afficher sur Internet :\\ +
-</p>\\ +
-<ul>\\ +
-<li class="level1"> Utiliser des capteurs avec Arduino ou RaspberryPi afin d'obtenir des données. Commencer par un capteur de température: le DS18B20. On en utilisera plusieurs sur une même broche Arduino</li>\\ +
-<li class="level1"> Enregistrer les données obtenues. L'arduino sera connecté à un Pi (Raspberry ou Orange). Cela permet d'alléger le sketch Arduino qui reste ainsi solide. Il est aussi possible de faire un prétraitement des informations fournies, et éventuellement de servir rapidement une ou plusieurs pages HTML. Il va fallor commencer à apprendre à communiquer avec l'Arduino, en Python, via le port série.</li>\\ +
-<li class="level1"> Server MQTT, pour distribuer les données à d'autres appareils, comme par exemple une box domotique</li>\\ +
-<li class="level1"> Server de base de données SQL afin de conserver un historique de toutes les données</li>\\ +
-<li class="level1"> Traiter éventuellement ces données (moyenne journalière par exemple)</li>\\ +
-<li class="level1"> Afficher ces données sous formes graphique, dans un navigateur. Server Web HTML EcmaScript (js)</li>\\ +
-</ul>+
  
-</div>+Cet atelier va permettre de découvrir toutes les techniques utilisées pour lire une donnée (température, pression, qualité de l'air, puissance consommée, …) et pour l'utiliser et l'afficher sur Internet :
  
-<h4>Plusieurs technologies seront abordées et utilisées :</h4>\\ +  * Utiliser des capteurs avec Arduino ou RaspberryPi afin d'obtenir des données. Commencer par un capteur de température: le DS18B20. On en utilisera plusieurs sur une même broche Arduino 
-<div class="level4">\\ +  * Enregistrer les données obtenues. L'arduino sera connecté à un Pi (Raspberry ou Orange). Cela permet d'alléger le sketch Arduino qui reste ainsi solide. Il est aussi possible de faire un prétraitement des informations fournieset éventuellement de servir rapidement une ou plusieurs pages HTML. Il va fallor commencer à apprendre à communiquer avec l'Arduinoen Pythonvia le port série. 
-<ul>\\ +  * Server MQTTpour distribuer les données à d'autres appareils, comme par exemple une box domotique 
-<li class="level1"> Arduino et sa programmation</li>\\ +  * Server de base de données SQL afin de conserver un historique de toutes les données 
-<li class="level1"> RaspberryPi et sa programmation en Python</li>\\ +  * Traiter éventuellement ces données (moyenne journalière par exemple) 
-<li class="level1"> Réseau et transport des données, protocoles TCP IPMQTTHTTP</li>\\ +  * Afficher ces données sous formes graphiquedans un navigateur. Server Web - HTML - EcmaScript (js)
-<li class="level1"> Eventuellement communication radio</li>\\ +
-<li class="level1"> Bases de donnéesSQL</li>\\ +
-<li class="level1"> Serveur Web, HTML, JavaScript</li>\\ +
-</ul>\\ +
-<hr />+
  
-</div>+=== Plusieurs technologies seront abordées et utilisées : ===
  
-<h2>Les ateliers</h2>\\ +  * Arduino et sa programmation 
-<div class="level2">+  * RaspberryPi et sa programmation en Python 
 +  * Réseau et transport des données, protocoles TCP IP, MQTT, HTTP 
 +  * Eventuellement , communication radio 
 +  * Bases de données, SQL 
 +  * Serveur Web, HTML, JavaScript
  
-<p>\\ +----
-Voici la liste non exhaustive et dans le désordre des ateliers à venir. <br/>\\ +
-Noter que certains de ces ateliers se feront sans doute en plusieurs séances.\\ +
-</p>\\ +
-<ul>\\ +
-<li class="level1"> Arduino + DS18B20. Envoie des données sur le port série, en <a href="http://www.json.org/" class="urlextern" title="http://www.json.org/" rel="ugc nofollow">JSON</a></li>\\ +
-<li class="level1"> Installation & Configuration d'un RaspberryPi (<a href="https://www.raspberrypi.org/downloads/" class="urlextern" title="https://www.raspberrypi.org/downloads/" rel="ugc nofollow">raspbian</a>) et d'un OrangePi (<a href="https://www.armbian.com/download/" class="urlextern" title="https://www.armbian.com/download/" rel="ugc nofollow">armbian</a>)</li>\\ +
-<li class="level1"> Programmation en <a href="https://www.python.org/" class="urlextern" title="https://www.python.org/" rel="ugc nofollow">Python</a> pour communiquer avec le port série grace à la bibliothèque <a href="https://pyserial.readthedocs.io/en/latest/" class="urlextern" title="https://pyserial.readthedocs.io/en/latest/" rel="ugc nofollow">pySerial</a></li>\\ +
-<li class="level1"> Programmation en Python avec <a href="http://bottlepy.org/docs/dev/" class="urlextern" title="http://bottlepy.org/docs/dev/" rel="ugc nofollow">Bottle</a> pour monter un premier server Web servant des pages statiques. Découverte du HTML.</li>\\ +
-<li class="level1"> Ajouter de la dynamique dans les pages, c'est à dire des données vivantes et fraiches. Utilisation de bibliothèques <a href="https://fr.wikipedia.org/wiki/JavaScript" class="urlextern" title="https://fr.wikipedia.org/wiki/JavaScript" rel="ugc nofollow">JavaScript</a>.</li>\\ +
-<li class="level1"> Installation de Linux sur un PC et initiation</li>\\ +
-<li class="level1"> Quelques notions de réseau et du protocole <a href="https://fr.wikipedia.org/wiki/Transmission_Control_Protocol" class="urlextern" title="https://fr.wikipedia.org/wiki/Transmission_Control_Protocol" rel="ugc nofollow">TCP</a> <a href="https://fr.wikipedia.org/wiki/Internet_Protocol" class="urlextern" title="https://fr.wikipedia.org/wiki/Internet_Protocol" rel="ugc nofollow">IP</a> <a href="https://fr.wikipedia.org/wiki/IPv4" class="urlextern" title="https://fr.wikipedia.org/wiki/IPv4" rel="ugc nofollow">v4</a></li>\\ +
-<li class="level1"> Server <a href="https://fr.wikipedia.org/wiki/MQTT" class="urlextern" title="https://fr.wikipedia.org/wiki/MQTT" rel="ugc nofollow">MQTT</a> <a href="https://mosquitto.org/" class="urlextern" title="https://mosquitto.org/" rel="ugc nofollow">Mosquitto</a></li>\\ +
-<li class="level1"> Server <a href="https://fr.wikipedia.org/wiki/Structured_Query_Language" class="urlextern" title="https://fr.wikipedia.org/wiki/Structured_Query_Language" rel="ugc nofollow">SQL</a> <a href="https://www.postgresql.org/" class="urlextern" title="https://www.postgresql.org/" rel="ugc nofollow">PostgreSQL</a> ou <a href="https://sqlite.org/index.html" class="urlextern" title="https://sqlite.org/index.html" rel="ugc nofollow">SQLite</a> pour enregistrer toutes les données</li>\\ +
-<li class="level1"> Augmentation du server web pour servir des historiques de données.</li>\\ +
-<li class="level1"> Server <a href="https://nodered.org/" class="urlextern" title="https://nodered.org/" rel="ugc nofollow">Node-RED</a> pour éventuellement faire interagir les différents capteurs et actionneurs : <a href="https://fr.wikipedia.org/wiki/Internet_des_objets" class="urlextern" title="https://fr.wikipedia.org/wiki/Internet_des_objets" rel="ugc nofollow">IOT</a></li>\\ +
-</ul>\\ +
-<hr />+
  
-</div>+===== Les ateliers =====
  
-<h2>Arduino + DS18B20</h2>\\ +Voici la liste non exhaustive et dans le désordre des ateliers à venir. \\ Noter que certains de ces ateliers se feront sans doute en plusieurs séances.
-<div class="level2">+
  
-<p>\\ +  * Arduino + DS18B20. Envoie des données sur le port série, en [[http://www.json.org/|JSON]] 
-Découverte du capteur DS18B20. <br/>\\ +  * Installation & Configuration d'un RaspberryPi ([[https://www.raspberrypi.org/downloads/|raspbian]]) et d'un OrangePi ([[https://www.armbian.com/download/|armbian]]) 
-Apparence physique du capteur simple (boitier TO92)et du capteur tel qu'on peut le trouver inséré dans un bulbe métallique étanche<br/>\\ +  * Programmation en [[https://www.python.org/|Python]] pour communiquer avec le port série grace à la bibliothèque [[https://pyserial.readthedocs.io/en/latest/|pySerial]] 
-<b>Connexion du capteur DS18B20 à l'Arduino</b><br/>\\ +  * Programmation en Python avec [[http://bottlepy.org/docs/dev/|Bottle]] pour monter un premier server Web servant des pages statiques. Découverte du HTML. 
-Le DS18B20 est un capteur numérique qui communique ses données selon le protocole "OneWire"Il présente l'avantage de pouvoir utiliser une seule broche de l'Arduino pour lire plusieurs capteurs disposés en réseau parallèle ou en étoile<br/>\\ +  * Ajouter de la dynamique dans les pages, c'est à dire des données vivantes et fraichesUtilisation de bibliothèques [[https://fr.wikipedia.org/wiki/JavaScript|JavaScript]]. 
-Un schéma de montage pour un seul capteur nu est disponible <a href="https://konkarlab.fr/nextcloud/index.php/s/XfA4AbnSarww89E" class="urlextern" title="https://konkarlab.fr/nextcloud/index.php/s/XfA4AbnSarww89E" rel="ugc nofollow">ici (image)</a> ou <a href="https://konkarlab.fr/nextcloud/index.php/s/8xejK9Xk5coCB6M" class="urlextern" title="https://konkarlab.fr/nextcloud/index.php/s/8xejK9Xk5coCB6M" rel="ugc nofollow">ici (fritzing)</a>Le fil rouge correspond au +5V, le fil noir à la masse et le fil jaune sera connecté à la broche de lecture, soit la broche 2 en utilisant le sketch ci-dessous.  <br/>\\ +  * Installation de Linux sur un PC et initiation 
-A noter qu'il existe des capteurs intégrés dans un bulbe étanche qui utilisent les codes couleur suivant  <br/>\\ +  * Quelques notions de réseau et du protocole [[https://fr.wikipedia.org/wiki/Transmission_Control_Protocol|TCP]] [[https://fr.wikipedia.org/wiki/Internet_Protocol|IP]] [[https://fr.wikipedia.org/wiki/IPv4|v4]] 
-| Masse ^ +5V ^ Data ^\\ +  * Server [[https://fr.wikipedia.org/wiki/MQTT|MQTT]] [[https://mosquitto.org/|Mosquitto]] 
-</p>+  * Server [[https://fr.wikipedia.org/wiki/Structured_Query_Language|SQL]] [[https://www.postgresql.org/|PostgreSQL]] ou [[https://sqlite.org/index.html|SQLite]] pour enregistrer toutes les données 
 +  * Augmentation du server web pour servir des historiques de données. 
 +  * Server [[https://nodered.org/|Node-RED]] pour éventuellement faire interagir les différents capteurs et actionneurs : [[https://fr.wikipedia.org/wiki/Internet_des_objets|IOT]]
  
-<span class='np_break'> </span>\\ +----
-<div class="table sectionedit1"><table class="inline">\\ +
- <tr class="row0">\\ +
-     <th class="col0">Bulbe Noir Rouge Jaune</th><td class="centeralign">  Noir  </td><td class="centeralign">  Rouge  </td><td class="centeralign">  Jaune  </td>\\ +
- </tr>\\ +
- <tr class="row1">\\ +
-     <th class="col0">Bulbe Jaune Rouge Vert</th><td class="centeralign">  Jaune  </td><td class="centeralign">  Rouge  </td><td class="centeralign">  Vert  </td>\\ +
- </tr>\\ +
- <tr class="row2">\\ +
-     <th class="leftalign">Bulbe cable réseau  </th><td class="centeralign">  Orange  </td><td class="centeralign">  Rouge  </td><td class="centeralign">  Vert  </td>\\ +
- </tr>\\ +
-</table>\\ +
-<span class='np_break'> </span>\\ +
-</div>\\ +
-<p>\\ +
-Dans le cas de capteurs en réseau, il est nécessaire de découvrir l'adresse unique de chaque capteur. <br/>\\ +
-Cela se fait par exemple avec ce <a href="https://konkarlab.fr/nextcloud/index.php/s/eQbbf9xBQzzHosL" class="urlextern" title="https://konkarlab.fr/nextcloud/index.php/s/eQbbf9xBQzzHosL" rel="ugc nofollow">programme </a>.\\ +
-</p>+
  
-<p>\\ +===== Arduino + DS18B20 =====
-<b><a href="http://www.fritzing.org" class="urlextern" title="http://www.fritzing.org" rel="ugc nofollow">Fritzing</a></b> est un logiciel libre qui permet de faire facilement des schémas électriques simples afin de documenter ses projets.\\ +
-</p>\\ +
-<hr />+
  
-</div>+Découverte du capteur DS18B20. \\ Apparence physique du capteur simple (boitier TO92), et du capteur tel qu'on peut le trouver inséré dans un bulbe métallique étanche. \\ **Connexion du capteur DS18B20 à l'Arduino**: \\ Le DS18B20 est un capteur numérique qui communique ses données selon le protocole "OneWire". Il présente l'avantage de pouvoir utiliser une seule broche de l'Arduino pour lire plusieurs capteurs disposés en réseau parallèle ou en étoile. \\ Un schéma de montage pour un seul capteur nu est disponible [[https://konkarlab.fr/nextcloud/index.php/s/XfA4AbnSarww89E|ici (image)]] ou [[https://konkarlab.fr/nextcloud/index.php/s/8xejK9Xk5coCB6M|ici (fritzing)]]. Le fil rouge correspond au +5V, le fil noir à la masse et le fil jaune sera connecté à la broche de lecture, soit la broche 2 en utilisant le sketch ci-dessous. \\ 
 +A noter qu'il existe des capteurs intégrés dans un bulbe étanche qui utilisent les codes couleur suivant: \\ 
 +| Masse ^ +5V ^ Data ^
  
-<h2>Installer Linux</h2>\\ +^Bulbe Noir Rouge Jaune|  Noir  |  Rouge  |  Jaune  | 
-<div class="level2">+^Bulbe Jaune Rouge Vert|  Jaune  |  Rouge  |  Vert  | 
 +^Bulbe cable réseau  |  Orange  |  Rouge  |  Vert  |
  
-<p>\\ +Dans le cas de capteurs en réseau, il est nécessaire de découvrir l'adresse unique de chaque capteur. \\ Cela se fait par exemple avec ce [[https://konkarlab.fr/nextcloud/index.php/s/eQbbf9xBQzzHosL|programme ]].
-La distribution souhaitée est Xubuntu. C'est un Ubuntu, avec une interface XFCE, assez légère et réactive <br/>\\ +
-Bien entendu, cette distribution existe en 64 bits et 32 bits. Pour des machines anciennes, il est nécessaire de choisir la version 32 bits<br/>\\ +
-Une <a href="/wiki0/doku.php?id=start:howto:installlinux" class="wikilink1" title="start:howto:installlinux" data-wiki-id="start:howto:installlinux">page est dédiée</a> à cela.\\ +
-</p>\\ +
-<hr />+
  
-</div>+**[[http://www.fritzing.org|Fritzing]]** est un logiciel libre qui permet de faire facilement des schémas électriques simples afin de documenter ses projets.
  
-<h2>Découverte du langage Python</h2>\\ +----
-<div class="level2">+
  
-<p>\\ +===== Installer Linux =====
-Le langage de programmation "Python" est le langage officiel du Raspberry Pi. En outre, je trouve que Python est aisément accessible et polyvalent. <br/>\\ +
-On trouve énormément de documenation et de tutoriels sur Internet, en français qui plus est. Le site <a href="https://openclassrooms.com/courses/apprenez-a-programmer-en-python" class="urlextern" title="https://openclassrooms.com/courses/apprenez-a-programmer-en-python" rel="ugc nofollow">OpenClassRoom</a> par exemple propose une bonne porte d'entrée. Il y a aussi un <a href="https://www.fun-mooc.fr/courses/inria/41001S03/session03/about" class="urlextern" title="https://www.fun-mooc.fr/courses/inria/41001S03/session03/about" rel="ugc nofollow">MOOC</a> python. <br/>+
  
-EnfinJosé a préparé "<a href="https://konkarlab.fr/nextcloud/index.php/s/dnHLiGECxBKwdS3" class="urlextern" title="https://konkarlab.fr/nextcloud/index.php/s/dnHLiGECxBKwdS3" rel="ugc nofollow">Une introduction à l’environnement Linux pour des bricoleuses et bricoleurs</a>"document qui contient aussi "Une introduction au langage Python pour des bricoleuses et bricoleurs"<br/>+La distribution souhaitée est Xubuntu. C'est un Ubuntuavec une interface XFCE, assez légère et réactive \\ Bien entendu, cette distribution existe en 64 bits et 32 bitsPour des machines anciennesil est nécessaire de choisir la version 32 bits. \\ Une [[:start:howto:installlinux|page est dédiée]] à cela.
  
-J'ai aussi trouvé une "<a href="https://konkarlab.fr/nextcloud/index.php/s/y5WkrNd4dD8NYqa" class="urlextern" title="https://konkarlab.fr/nextcloud/index.php/s/y5WkrNd4dD8NYqa" rel="ugc nofollow">Initiation à Python par l’exemple</a>".\\ +----
-</p>+
  
-<p>\\ +===== Découverte du langage Python =====
-Avec Python, on découvre aussi ce qui est un peu une curiosité : la simultanéité de 2 versions pas tout à fait compatibles : la 2 et la 3, cette dernière étant disponible depuis plus de 10 ans. Toutefois, les 2 versions ont continué à évoluer. On considère actuellement que la version 2 touche à sa fin et que la majorité des bibliothèques en cours de vie ont actuellement migrées vers la version 3.\\ +
-</p>+
  
-<p>\\ +Le langage de programmation "Python" est le langage officiel du Raspberry Pi. En outre, je trouve que Python est aisément accessible et polyvalent. \\ On trouve énormément de documenation et de tutoriels sur Interneten français qui plus est. Le site [[https://openclassrooms.com/courses/apprenez-a-programmer-en-python|OpenClassRoom]] par exemple propose une bonne porte d'entréeIl y a aussi un [[https://www.fun-mooc.fr/courses/inria/41001S03/session03/about|MOOC]] python. \\ 
-Sur la plupart des machinesles 2 versions maintenant sont installées, mais la version 2 reste encore souvent la version par défaut<br/>\\ +EnfinJosé a préparé "[[https://konkarlab.fr/nextcloud/index.php/s/dnHLiGECxBKwdS3|Une introduction à l’environnement Linux pour des bricoleuses et bricoleurs]]"document qui contient aussi "Une introduction au langage Python pour des bricoleuses et bricoleurs". \\ 
-Pour exécuter un code python en version 3il faut explicitement appeler python3Par exemplele script toto.py devra être exécuter avec la commande\\ +J'ai aussi trouvé une "[[https://konkarlab.fr/nextcloud/index.php/s/y5WkrNd4dD8NYqa|Initiation à Python par l’exemple]]".
-</p>\\ +
-<pre class="code">python3 toto.py+
  
-</pre><p> </p>+Avec Python, on découvre aussi ce qui est un peu une curiosité : la simultanéité de 2 versions pas tout à fait compatibles : la 2 et la 3, cette dernière étant disponible depuis plus de 10 ans. Toutefois, les 2 versions ont continué à évoluer. On considère actuellement que la version 2 touche à sa fin et que la majorité des bibliothèques en cours de vie ont actuellement migrées vers la version 3.
  
-<p>\\ +Sur la plupart des machines, les 2 versions maintenant sont installées, mais la version 2 reste encore souvent la version par défaut\\ Pour exécuter un code python en version 3, il faut explicitement appeler python3. Par exemple, le script toto.py devra être exécuter avec la commande 
-la commande par défaut\\ +<code>
-</p>\\ +
-<pre class="code">python toto.py+
  
-</pre><p> </p>+python3 toto.py
  
-<p>\\ +</code>
-utiliserait la version 2 de Python.\\ +
-</p>+
  
-</div>+la commande par défaut
  
-<h3>Gestion des versions de Python.</h3>\\ +<code> 
-<div class="level3">+python toto.py
  
-<p>\\ +</code>
-Pour commencer, il est possible d'identifier la version par défaut en tapant la commande\\ +
-</p>\\ +
-<pre class="code">python --version+
  
-</pre><p> </p>+utiliserait la version 2 de Python.
  
-<p>\\ +==== Gestion des versions de Python. ==== 
-Ensuite, il est possible de spécifier la version par défaut à utiliser en utilisant la commande "<em>update-alternatives</em>" <br/>\\ + 
-La version par défaut sera celle pour laquelle il aura été spécifié le plus grand numéro en fin de commande. Il est même possible de gérer ainsi différentes versions 2.x et versions 3.x. <br/>\\ +Pour commencer, il est possible d'identifier la version par défaut en tapant la commande 
-Voici un exemple de commande mettant une version 3 par défaut :\\ + 
-</p>\\ +<code> 
-<pre class="code">sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.5 2\\+python --version 
 + 
 +</code> 
 + 
 +Ensuite, il est possible de spécifier la version par défaut à utiliser en utilisant la commande "//update-alternatives//\\ La version par défaut sera celle pour laquelle il aura été spécifié le plus grand numéro en fin de commande. Il est même possible de gérer ainsi différentes versions 2.x et versions 3.x. \\ Voici un exemple de commande mettant une version 3 par défaut : 
 + 
 +<code> 
 +sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.5 2
 sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1 sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
  
-</pre><p> </p>+</code>
  
-<p>\\ +Il est maintenant possible de faire un script Python permettant de connaître la version utilisée:
-Il est maintenant possible de faire un script Python permettant de connaître la version utilisée:\\ +
-</p>\\ +
-<pre class="code python"><span class="co1">#!/usr/bin/python</span>\\ +
-<span class="co1"># -*- coding: utf-8 -*-</span>\\ +
-\\ +
-<span class="kw1">import</span> <span class="kw3">sys</span>\\ +
-<span class="kw1">print</span><span class="br0">(</span><span class="kw3">sys</span>.<span class="me1">version</span><span class="br0">)</span>+
  
-</pre><p> </p>\\ +<code python> 
-<hr />+#!/usr/bin/python 
 +# -*- coding: utf-8 -*-
  
-</div>+import sys 
 +print(sys.version)
  
-<h2>Communication Arduino Python</h2>\\ +</code>
-<div class="level2">+
  
-<p>\\ +----
-Le but est de récupérer les informations envoyées par l'Arduino, éventuellement de les afficher, mais surtout de les traiter. <br/>\\ +
-Pour cela, on va utiliser le port USB de l'Arduino et on va essayer de faire le tri entre les informations de fonctionnement ou de débuggage, et les informations utiles, qui elles, seront présentées en <b><a href="http://www.json.org/" class="urlextern" title="http://www.json.org/" rel="ugc nofollow">json</a></b>. <br/>\\ +
-Il sera aussi intéressant de pouvoir envoyer des commandes à l'Arduino. <br/>\\ +
-Pour commencer, il est nécessaire d'avoir un sketch Arduino qui va nous servir à tester tout cela. Le sketch <a href="https://konkarlab.fr/nextcloud/index.php/s/NKLzBQcdstMLnWd" class="urlextern" title="https://konkarlab.fr/nextcloud/index.php/s/NKLzBQcdstMLnWd" rel="ugc nofollow">testJson1.ino</a> est disponible. <br/>+
  
-Ce sketch récupère une tension sur une borne analogique de l'Arduino, en prépare 3 valeurs et les envoie sur le port USB formattées en json, parmi d'autres informations de contrôle et de débuggage. <br/>+===== Communication Arduino Python =====
  
-Un site intéressant pour vérifier le bon formattage d'un document json : <a href="https://jsonchecker.com/" class="urlextern" title="https://jsonchecker.com/" rel="ugc nofollow">jsonchecker.com</a>.\\ +Le but est de récupérer les informations envoyées par l'Arduino, éventuellement de les afficher, mais surtout de les traiter. \\ Pour cela, on va utiliser le port USB de l'Arduino et on va essayer de faire le tri entre les informations de fonctionnement ou de débuggage, et les informations utiles, qui elles, seront présentées en **[[http://www.json.org/|json]]**. \\ Il sera aussi intéressant de pouvoir envoyer des commandes à l'Arduino. \\ Pour commencer, il est nécessaire d'avoir un sketch Arduino qui va nous servir à tester tout cela. Le sketch [[https://konkarlab.fr/nextcloud/index.php/s/NKLzBQcdstMLnWd|testJson1.ino]] est disponible. \\ 
-</p>+Ce sketch récupère une tension sur une borne analogique de l'Arduino, en prépare 3 valeurs et les envoie sur le port USB formattées en json, parmi d'autres informations de contrôle et de débuggage. \\ 
 +Un site intéressant pour vérifier le bon formattage d'un document json : [[https://jsonchecker.com/|jsonchecker.com]].
  
-<p>\\ +Coté miniPC, c'est donc le script python [[https://konkarlab.fr/nextcloud/index.php/s/FNyfPYooW9BReLs|testSerial.py]] qui sera chargé de communiquer avec l'Arduino, en utilisant la bibliothèque **pyserial**.
-Coté miniPC, c'est donc le script python <a href="https://konkarlab.fr/nextcloud/index.php/s/FNyfPYooW9BReLs" class="urlextern" title="https://konkarlab.fr/nextcloud/index.php/s/FNyfPYooW9BReLs" rel="ugc nofollow">testSerial.py</a> qui sera chargé de communiquer avec l'Arduino, en utilisant la bibliothèque <b>pyserial</b>.\\ +
-</p>+
  
-<p>\\ +Noter que j'utilise python3. \\ La bibliothèque **pyserial**  n'est pas installée par défaut sur Linux. Il est donc nécessaire de l'installer. Cela se fait par la commande : 
-Noter que j'utilise python3. <br/>\\ +<code>
-La bibliothèque <b>pyserial</b>  n'est pas installée par défaut sur Linux. Il est donc nécessaire de l'installer. Cela se fait par la commande :\\ +
-</p>\\ +
-<pre class="code">sudo apt install python3-serial+
  
-</pre><p> </p>+sudo apt install python3-serial
  
-<p>\\ +</code>
-Le fichier testSerial.py est donc un fichier qui s'ouvre avec n'importe que éditeur de texte. Pour l'exécuter, ouvrir une fenêtre de terminal dans le dossier dans le quel se trouve le fichier et lancer la commande\\ +
-</p>\\ +
-<pre class="code">python3 testSerial.py+
  
-</pre><p> </p>+Le fichier testSerial.py est donc un fichier qui s'ouvre avec n'importe que éditeur de texte. Pour l'exécuter, ouvrir une fenêtre de terminal dans le dossier dans le quel se trouve le fichier et lancer la commande
  
-<p>\\ +<code
-ou simplement\\ +python3 testSerial.py
-</p>\\ +
-<pre class="code">python testSerial.py+
  
-</pre><p> </p>+</code>
  
-<p>\\ +ou simplement
-si python3 est la version de python utilisée par défaut sur votre PC. <br/>\\ +
-Penser à vérifier le port série utilisé par le code. Comme il s'agit d'une boucle infinie, il est nécessaire d'arrêter le programme manuellement. Cela se fait avec la combinaison de touche "Ctrl + C"\\ +
-</p>\\ +
-<hr />+
  
-</div>+<code> 
 +python testSerial.py
  
-<h2>Bottle, un server web léger, en Python</h2>\\ +</code>
-<div class="level2">+
  
-<p>\\ +si python3 est la version de python utilisée par défaut sur votre PC. \\ Penser à vérifier le port série utilisé par le codeComme il s'agit d'une boucle infinie, il est nécessaire d'arrêter le programme manuellementCela se fait avec la combinaison de touche "Ctrl + C"
-Pour servir les pages web qui nous intéressent, qui affichent notamment des données issues de capteurs locaux, le framework web léger <a href="http://bottlepy.org/docs/dev/" class="urlextern" title="http://bottlepy.org/docs/dev/" rel="ugc nofollow">Bottle</a> suffit amplement. Et sans alourdir l'ensemble, il est facile d'utiliser un autre Framework web minimaliste supportant le multitache: <a href="https://cherrypy.org/class="urlextern" title="https://cherrypy.org/" rel="ugc nofollow">CherryPy</a>. <br/>+
  
-Il est donc nécessaire d'installer <b>Bottle</b>  et <b>CherryPy</b>  avec la commande suivante:\\ +----
-</p>\\ +
-<pre class="code">sudo apt install python3-bottle python3-cherrypy3+
  
-</pre><p> </p>+===== Bottle, un server web léger, en Python =====
  
-<p>\\ +Pour servir les pages web qui nous intéressentqui affichent notamment des données issues de capteurs locaux, le framework web léger [[http://bottlepy.org/docs/dev/|Bottle]] suffit amplement. Et sans alourdir l'ensemble, il est facile d'utiliser un autre Framework web minimaliste supportant le multitache: [[https://cherrypy.org/|CherryPy]]. \\ 
-Et maintenantun premier exempleavec le traditionnel "Bonjour le monde !" :\\ +Il est donc nécessaire d'installer **Bottle**  et **CherryPy**  avec la commande suivante
-</p>\\ +<code>
-<pre class="code python"><span class="co1">#!/usr/bin/python</span>\\ +
-<span class="co1"># -*- codingutf-8 -*-</span>\\ +
-\\ +
-<span class="kw1">from</span> bottle <span class="kw1">import</span> route<span class="sy0">,</span> run\\ +
-\\ +
-<span class="sy0">@</span>route<span class="br0">(</span><span class="st0">'/hello'</span><span class="br0">)</span>\\ +
-<span class="kw1">def</span> hello<span class="br0">(</span><span class="br0">)</span>:\\ +
-<span class="kw1">return</span> <span class="st0">'Bonjour le monde de < b>Python< /b>! '</span>\\ +
-\\ +
-run<span class="br0">(</span>host<span class="sy0">=</span><span class="st0">'localhost'</span><span class="sy0">,</span> port<span class="sy0">=</span><span class="nu0">8080</span><span class="sy0">,</span> server<span class="sy0">=</span><span class="st0">'cherrypy'</span><span class="br0">)</span>+
  
-</pre><p> </p>+sudo apt install python3-bottle python3-cherrypy3
  
-<p>\\ +</code>
-Pour voir cette page s'afficher dans votre navigateur, exécuter ce script python, puis, aller à l'adresse <a href="http://locahost:8080/hello" class="urlextern" title="http://locahost:8080/hello" rel="ugc nofollow">http://locahost:8080/hello</a>. <br/>+
  
-Noter que les page web sont servies sur le port 8080qui est spécifié dans la dernière ligne. "localhostest l'adresse IP de votre machine. <br/>+Et maintenantun premier exemple, avec le traditionnel "Bonjour le monde !:
  
-Ensuite, la page s'appelle "hello". Dans le code, c'est le décorateur "@route" qui spécifie cela.\\ +<code python> 
-</p>+#!/usr/bin/python 
 +# -*- coding: utf-8 -*-
  
-<p>\\ +from bottle import route, run
-Mais comment faire pour transmettre des images et d'autres fichier ? <br/>\\ +
-C'est relativement simple, avec l'exemple suivant :\\ +
-</p>\\ +
-<pre class="code python"><span class="co1">#!/usr/bin/python</span>\\ +
-<span class="co1"># -*- coding: utf-8 -*-</span>\\ +
-\\ +
-<span class="kw1">from</span> bottle <span class="kw1">import</span> route<span class="sy0">,</span> run<span class="sy0">,</span> static_file\\ +
-\\ +
-<span class="sy0">@</span>route<span class="br0">(</span><span class="st0">'/static/< filename>'</span><span class="br0">)</span>\\ +
-<span class="kw1">def</span> serverStatic<span class="br0">(</span>filename<span class="br0">)</span>:\\ +
-<span class="kw1">return</span> static_file<span class="br0">(</span>filename<span class="sy0">,</span> root<span class="sy0">=</span><span class="st0">'myStaticsFiles'</span><span class="br0">)</span>\\ +
-\\ +
-<span class="sy0">@</span>route<span class="br0">(</span><span class="st0">'/hello'</span><span class="br0">)</span>\\ +
-<span class="kw1">def</span> hello<span class="br0">(</span><span class="br0">)</span>:\\ +
-<span class="kw1">return</span> <span class="st0">'Bonjour le monde de < b>Python< /b>! '</span>\\ +
-\\ +
-run<span class="br0">(</span>host<span class="sy0">=</span><span class="st0">'0.0.0.0'</span><span class="sy0">,</span> port<span class="sy0">=</span><span class="nu0">8080</span><span class="sy0">,</span> server<span class="sy0">=</span><span class="st0">'cherrypy'</span><span class="br0">)</span>+
  
-</pre><p> </p>+@route('/hello'
 +def hello(): 
 +    return 'Bonjour le monde de <b>Python</b>! '
  
-<p>\\ +run(host='localhost', port=8080, server='cherrypy')
-La nouvelle fonction "serverStatic" a été ajoutée, avec le décorateur "@route('/static/') ". Cela signifie que le server pourra répondre aux adresses commençant par <a href="http://locahost:8080/static/..." class="urlextern" title="http://locahost:8080/static/..." rel="ugc nofollow">http://locahost:8080/static/...</a> avec un nom de fichier valide à la place des "…". Ce fichier devra se trouver dans le sous-dossier "myStaticsFiles" du dossier courant. Il est bien entendu possible de spécifier un chemin absolu, du style "/home/user/softs/testBottle/myStaticsFiles". <br/>+
  
-Autre nouveauté par rapport au premier exemple, le contenu de "host" dans la dernière ligne. Dans le premier exemple, seul l'ordinateur local, nommé "Localhost" pouvoir interroger le server. Maintenant, "0.0.0.0" signifie que le server web va répondre à toutes les adresse IP. Si vous avez une autre machine sur le réseau local, il lui est maintenant possible d'interroger le server web, une fois celui-ci en cours d'exécution bien sûr. <br/>+</code>
  
-Avec Linuxpour obtenir l'adresse IP locale de sa machine, c'est la commande:\\ +Pour voir cette page s'afficher dans votre navigateur, exécuter ce script python, puisaller à l'adresse [[http://locahost:8080/hello|http://locahost:8080/hello]]. \\ 
-</p>\\ +Noter que les page web sont servies sur le port 8080, qui est spécifié dans la dernière ligne. "localhost" est l'adresse IP de votre machine. \\ 
-<pre class="code">ip addr+Ensuite, la page s'appelle "hello". Dans le code, c'est le décorateur "@routequi spécifie cela.
  
-</pre><p> </p>\\ +Mais comment faire pour transmettre des images et d'autres fichier ? \\ C'est relativement simple, avec l'exemple suivant :
-<hr />+
  
-</div>+<code python> 
 +#!/usr/bin/python 
 +# -*- coding: utf-8 -*-
  
-<h2>OrangePi & Raspberry Pi</h2>\\ +from bottle import route, run, static_file
-<div class="level2">+
  
-<p>\\ +@route('/static/<filename>') 
-L'installation d'un OrangePi est décrite <a href="/wiki0/doku.php?id=start:howto:installorangepi" class="wikilink1" title="start:howto:installorangepi" data-wiki-id="start:howto:installorangepi">sur cette page dédiée</a>.\\ +def serverStatic(filename): 
-</p>+    return static_file(filename, root='myStaticsFiles')
  
-<p>\\ +@route('/hello') 
-Un tuto complet est aussi disponible sur le site <a href="https://herve-troadec.developpez.com/tutoriels/orangepi/install-armbian/" class="urlextern" title="https://herve-troadec.developpez.com/tutoriels/orangepi/install-armbian/" rel="ugc nofollow">developpez.com</a>. Toujours sur ce même site, et du même auteur, un tutoriel explique <a href="https://herve-troadec.developpez.com/tutoriels/raspberry/connexion-ssh-vnc/" class="urlextern" title="https://herve-troadec.developpez.com/tutoriels/raspberry/connexion-ssh-vnc/" rel="ugc nofollow">comment contrôler un RaspberryPi depuis un PC Linux</a>.\\ +def hello()
-</p>\\ +    return 'Bonjour le monde de <b>Python</b>! '
-<hr />+
  
-</div>+run(host='0.0.0.0', port=8080, server='cherrypy')
  
-<h2>MQTT : pour les réunir tous...</h2>\\ +</code>
-<div class="level2">+
  
-<p>\\ +La nouvelle fonction "serverStatic" a été ajoutée, avec le décorateur "@route('/static/') ". Cela signifie que le server pourra répondre aux adresses commençant par [[http://locahost:8080/static/...|http://locahost:8080/static/...]] avec un nom de fichier valide à la place des "…"Ce fichier devra se trouver dans le sous-dossier "myStaticsFiles" du dossier courant. Il est bien entendu possible de spécifier un chemin absolu, du style "/home/user/softs/testBottle/myStaticsFiles"\\ 
-MQTT est un protocole de transport particulièrement adapté à véhiculer les données fournies par les capteurs<br/>\\ +Autre nouveauté par rapport au premier exemple, le contenu de "host" dans la dernière ligne. Dans le premier exemple, seul l'ordinateur local, nommé "Localhostpouvoir interroger le serverMaintenant, "0.0.0.0" signifie que le server web va répondre à toutes les adresse IP. Si vous avez une autre machine sur le réseau local, il lui est maintenant possible d'interroger le server web, une fois celui-ci en cours d'exécution bien sûr. \\ 
-MQTT pourrait être l'abréviation de "Message Queuing Telemetry Transport"<br/>\\ +Avec Linux, pour obtenir l'adresse IP locale de sa machine, c'est la commande: 
-Il existe des librairies qui permettent d'utiliser MQTT pour Arduino et pour la plupart des microcontroleurs utilisés pour des capteurs.\\ +<code>
-</p>+
  
-<p>\\ +ip addr
-Chaque information est assuciée à un sujet, ou "topic". Les topics sont organisés de façon arborescente, et sont laissé au bon soin des utilisateur. Il n'y a aucune structure prédéfinie.\\ +
-</p>+
  
-</div>+</code>
  
-<h3>Installation du service MQTT :</h3>\\ +----
-<div class="level3">\\ +
-<ul>\\ +
-<li class="level1"> Installation</li>\\ +
-</ul>\\ +
-<pre class="code bash"><span class="kw2">sudo</span> apt <span class="kw2">install</span> mosquitto+
  
-</pre><p> </p>\\ +===== OrangePi & Raspberry Pi =====
-<ul>\\ +
-<li class="level1"> Lancer le server :</li>\\ +
-</ul>\\ +
-<pre class="code bash">mosquitto <span class="re5">-d</span>+
  
-</pre><p> </p>+L'installation d'un OrangePi est décrite [[:start:howto:installorangepi|sur cette page dédiée]].
  
-<p>\\ +Un tuto complet est aussi disponible sur le site [[https://herve-troadec.developpez.com/tutoriels/orangepi/install-armbian/|developpez.com]]. Toujours sur ce même site, et du même auteur, un tutoriel explique [[https://herve-troadec.developpez.com/tutoriels/raspberry/connexion-ssh-vnc/|comment contrôler un RaspberryPi depuis un PC Linux]].
-Normalement, il se lance automatiquement après l'installation. <br/>\\ +
-Le port n'a pas besoin d'être précisé si on utilise le port par défaut qui est 1883. C'est l'option "-p" qui permet de spécifier un port différentIl sera alors nécessaire de toujours spécifier le port à utiliser avec les commandes clients que l'on verra plus bas.\\ +
-</p>\\ +
-<ul>\\ +
-<li class="level1"> modifier le fichier /etc/mosquitto/mosquitto.conf</li>\\ +
-</ul>\\ +
-<pre class="code autoconf">pid_file <span class="sy0">/</span>var<span class="sy0">/</span>run<span class="sy0">/</span>mosquitto.pid\\ +
-persistence true\\ +
-persistence_location <span class="sy0">/</span>var<span class="sy0">/</span>lib<span class="sy0">/</span>mosquitto\\ +
-listener <span class="nu0">1883</span>\\ +
-listener <span class="nu0">8083</span>\\ +
-protocol websocket\\ +
-log_dest topic\\ +
-log_type error\\ +
-log_type warning\\ +
-log_type notice\\ +
-log_type information\\ +
-connection_messages true\\ +
-log_timestamp true\\ +
-include_dir <span class="sy0">/</span>etc<span class="sy0">/</span>mosquitto.conf.d+
  
-</pre><p> </p>\\ +----
-<ul>\\ +
-<li class="level1"> Installer les clients mosquitto</li>\\ +
-</ul>\\ +
-<pre class="code batch">sudo apt<span class="co101">-get</span> install mosquitto<span class="co101">-clients</span>+
  
-</pre><p> </p>+===== MQTT : pour les réunir tous... =====
  
-</div>+MQTT est un protocole de transport particulièrement adapté à véhiculer les données fournies par les capteurs. \\ MQTT pourrait être l'abréviation de "Message Queuing Telemetry Transport". \\ Il existe des librairies qui permettent d'utiliser MQTT pour Arduino et pour la plupart des microcontroleurs utilisés pour des capteurs.
  
-<h3>Utilisation du service MQTT :</h3>\\ +Chaque information est assuciée à un sujet, ou "topic". Les topics sont organisés de façon arborescente, et sont laissé au bon soin des utilisateur. Il n'y a aucune structure prédéfinie.
-<div class="level3">+
  
-<p>\\ +==== Installation du service MQTT ====
-Un fois le client installé, il est possible de :\\ +
-</p>+
  
-<p>\\ +  * Installation
-<b>S'abonner</b>\\ +
-</p>+
  
-<p>\\ +<code bash> 
-Par exemple souscrivant aux données du topic "test" et de tout ses enfants:\\ +sudo apt install mosquitto
-</p>\\ +
-<pre class="code bash">mosquitto_sub <span class="re5">-t</span> test<span class="sy0">/</span><span class="co0"># -v</span>+
  
-</pre><p> </p>+</code>
  
-<p>\\ +  * Lancer le server :
-Les options suivantes sont disponibles (entre autres):\\ +
-</p>\\ +
-<ul>\\ +
-<li class="level1"></li>\\ +
-</ul>+
  
-<p>\\ +<code bash
--t : pour spécifier le topic auquel on souhaite souscrire ou s'abonner. Le caractère # est un caractère générique qui signifie, dans l'exemple ci-dessus, que l'on souhaite tous les topics commençant par la racine "test"\\ +mosquitto -d
-</p>\\ +
-<ul>\\ +
-<li class="level1"></li>\\ +
-</ul>+
  
-<p>\\ +</code>
--v : pour afficher le topic. Cela est utile quand on s'abonne en utilisant le caratère générique #.\\ +
-</p>\\ +
-<ul>\\ +
-<li class="level1"></li>\\ +
-</ul>+
  
-<p>\\ +Normalement, il se lance automatiquement après l'installation. \\ Le port n'a pas besoin d'être précisé si on utilise le port par défaut qui est 1883. C'est l'option "-p" qui permet de spécifier un port différent. Il sera alors nécessaire de toujours spécifier le port à utiliser avec les commandes clients que l'on verra plus bas.
--h : pour spécifier l'adresse IP ou le nom d'une autre machine\\ +
-</p>\\ +
-<ul>\\ +
-<li class="level1"></li>\\ +
-</ul>+
  
-<p>\\ +  * modifier le fichier /etc/mosquitto/mosquitto.conf
--p : pour spécifier un port différent\\ +
-</p>+
  
-<p>\\ +<code autoconf
-<b>Publier des données</b>\\ +pid_file /var/run/mosquitto.pid 
-</p>+persistence true 
 +persistence_location /var/lib/mosquitto 
 +listener 1883 
 +listener 8083 
 +protocol websocket 
 +log_dest topic 
 +log_type error 
 +log_type warning 
 +log_type notice 
 +log_type information 
 +connection_messages true 
 +log_timestamp true 
 +include_dir /etc/mosquitto.conf.d
  
-<p>\\ +</code>
-en alimentant le topic "test/a" :\\ +
-</p>\\ +
-<pre class="code bash">mosquitto_pub <span class="re5">-t</span> test<span class="sy0">/</span>a <span class="re5">-m</span> "toto fait <span class="kw2">du</span> vélo" <span class="re5">-r</span>+
  
-</pre><p> </p>+  * Installer les clients mosquitto
  
-<p>\\ +<code batch
-Les options suivantes sont disponibles (entre autres):\\ +sudo apt-get install mosquitto-clients
-</p>\\ +
-<ul>\\ +
-<li class="level1"></li>\\ +
-</ul>+
  
-<p>\\ +</code>
--t : pour spécifier le topic sur lequel on souhaite publier.\\ +
-</p>\\ +
-<ul>\\ +
-<li class="level1"></li>\\ +
-</ul>+
  
-<p>\\ +==== Utilisation du service MQTT : ====
--m pour spécifier le message ou la valeur à publier. Les guillemets sont nécessaire si le message comporte des espaces.\\ +
-</p>\\ +
-<ul>\\ +
-<li class="level1"></li>\\ +
-</ul>+
  
-<p>\\ +Un fois le client installé, il est possible de :
--r : pour demander au server de conserver la dernière valeur pour le topic en question\\ +
-</p>\\ +
-<ul>\\ +
-<li class="level1"></li>\\ +
-</ul>+
  
-<p>\\ +**S'abonner**
--h : pour spécifier l'adresse IP ou le nom d'une autre machine\\ +
-</p>\\ +
-<ul>\\ +
-<li class="level1"></li>\\ +
-</ul>+
  
-<p>\\ +Par exemple souscrivant aux données du topic "test" et de tout ses enfants:
--p pour spécifier un port différent.\\ +
-</p>+
  
-<p>\\ +<code bash
-Enfin, voici quelques liens intéressants :\\ +mosquitto_sub -t test/-v
-</p>\\ +
-<ul>\\ +
-<li class="level1"> <a href="https://www.frugalprototype.com/installation-de-votre-propre-broker-mqtt/" class="urlextern" title="https://www.frugalprototype.com/installation-de-votre-propre-broker-mqtt/" rel="ugc nofollow">Installer votre propre broker MQTT</a></li>\\ +
-<li class="level1"> <a href="https://projetsdiy.fr/mosquitto-broker-mqtt-raspberry-pi/" class="urlextern" title="https://projetsdiy.fr/mosquitto-broker-mqtt-raspberry-pi/" rel="ugc nofollow">Bien débuter avec le Broker MQTT Mosquitto</a> &lt;= avec pas mal de pub :(</li>\\ +
-<li class="level1"> <a href="https://blog.guiguiabloc.fr/index.php/2014/11/13/mqtt-faites-communiquer-vos-objets-simplement/" class="urlextern" title="https://blog.guiguiabloc.fr/index.php/2014/11/13/mqtt-faites-communiquer-vos-objets-simplement/" rel="ugc nofollow">MQTT, faites communiquer vos objets simplement</a></li>\\ +
-</ul>+
  
-</div>+</code>
  
-<h3>Python</h3>\\ +Les options suivantes sont disponibles (entre autres):
-<div class="level3">+
  
-<p>\\ +  *
-Enfin, on va pouvoir interragir avec toutes les données via des scripts écrit en Python. <br/>\\ +
-Avant cela, il va être nécessaire d'installer la librairie ad-hoc via l'utilitaire PIP :\\ +
-</p>\\ +
-<pre class="code bash"><span class="kw2">sudo</span> apt <span class="kw2">install</span> python3-pip\\ +
-<span class="kw2">sudo</span> pip3 <span class="kw2">install</span> paho-mqtt+
  
-</pre><p> </p>+-t : pour spécifier le topic auquel on souhaite souscrire ou s'abonner. Le caractère # est un caractère générique qui signifie, dans l'exemple ci-dessus, que l'on souhaite tous les topics commençant par la racine "test"
  
-<p>\\ +  *
-Nous voilà maintenant paré à pouvoir triturer et croiser facilement toutes nos données issues des différents capteurs.\\ +
-</p>+
  
-</div>+-v : pour afficher le topic. Cela est utile quand on s'abonne en utilisant le caratère générique #.
  
-<h3>HTML</h3>\\ +  *
-<div class="level3">+
  
-<p>\\ +-h : pour spécifier l'adresse IP ou le nom d'une autre machine
-Il peut être aussi extrèmement intéressant de construire une page web dynamique sans server. ce est possible via des scripts JavaScript utilisant l'interface WebSocket du server MQTT.\\ +
-</p>+
  
-<p>\\ +  *
-Dans le fichier de configuration du server Mosquitto, nous avons ajouter 2 lignes :\\ +
-</p>\\ +
-<pre class="code autoconf">listener <span class="nu0">8083</span>\\ +
-protocol websocket+
  
-</pre><p> </p>+-: pour spécifier un port différent
  
-<p>\\ +**Publier des données**
-Cela pour spécifier que le protocole WebSocket doit être disponible sur le port 8083.\\ +
-</p>+
  
-<p>\\ +en alimentant le topic "test/a" :
-C'est en effet ce protocole qui sera utilisé par les pages HTML pour souscrire au flux MQTT et récupérer directement les données publiées au fur et à mesure.\\ +
-</p>+
  
-<p>\\ +<code bash
-Un projet exemple est disponible ici : <href="https://konkarlab.fr/nextcloud/index.php/s/fJTy6zGHnW24fJZ" class="urlextern" title="https://konkarlab.fr/nextcloud/index.php/s/fJTy6zGHnW24fJZ" rel="ugc nofollow">dans ce fichier zip</a>\\ +mosquitto_pub -t test/-m "toto fait du vélo" -r 
-</p>+ 
 +</code> 
 + 
 +Les options suivantes sont disponibles (entre autres): 
 + 
 +  * 
 + 
 +-t : pour spécifier le topic sur lequel on souhaite publier. 
 + 
 +  * 
 + 
 +-m : pour spécifier le message ou la valeur à publier. Les guillemets sont nécessaire si le message comporte des espaces. 
 + 
 +  * 
 + 
 +-r : pour demander au server de conserver la dernière valeur pour le topic en question 
 + 
 +  * 
 + 
 +-h : pour spécifier l'adresse IP ou le nom d'une autre machine 
 + 
 +  * 
 + 
 +-p : pour spécifier un port différent. 
 + 
 +Enfin, voici quelques liens intéressants : 
 + 
 +  * [[https://www.frugalprototype.com/installation-de-votre-propre-broker-mqtt/|Installer votre propre broker MQTT]] 
 +  * [[https://projetsdiy.fr/mosquitto-broker-mqtt-raspberry-pi/|Bien débuter avec le Broker MQTT Mosquitto]] <avec pas mal de pub :( 
 +  * [[https://blog.guiguiabloc.fr/index.php/2014/11/13/mqtt-faites-communiquer-vos-objets-simplement/|MQTT, faites communiquer vos objets simplement]] 
 + 
 +==== Python ==== 
 + 
 +Enfin, on va pouvoir interragir avec toutes les données via des scripts écrit en Python. \\ Avant cela, il va être nécessaire d'installer la librairie ad-hoc via l'utilitaire PIP : 
 + 
 +<code bash> 
 +sudo apt install python3-pip 
 +sudo pip3 install paho-mqtt 
 + 
 +</code> 
 + 
 +Nous voilà maintenant paré à pouvoir triturer et croiser facilement toutes nos données issues des différents capteurs. 
 + 
 +==== HTML ==== 
 + 
 +Il peut être aussi extrèmement intéressant de construire une page web dynamique sans server. ce est possible via des scripts JavaScript utilisant l'interface WebSocket du server MQTT. 
 + 
 +Dans le fichier de configuration du server Mosquitto, nous avons ajouter 2 lignes : 
 + 
 +<code autoconf> 
 +listener 8083 
 +protocol websocket
  
-<p>\\ +</code>
-Ce projet comprend 5 fichiers à déposer dans le même dossier:\\ +
-</p>\\ +
-<ul>\\ +
-<li class="level1"> <b>SteelTemp.html</b>  : Le fichier html que nous devons construire, avec un peu de javaScript pour personnaliser les interactions avec le server MQTT.</li>\\ +
-<li class="level1"> <b>jquery-1.8.3.min.js</b>  : une bibliothèque javaScript très utile</li>\\ +
-<li class="level1"> <b>tween-min.js</b>  : une autre bibliothèque javaScript</li>\\ +
-<li class="level1"> <b>mqttws31.js</b>  : la bibliothèque javaScript qui gère tout le code permettant de souscrire à un server MQTT</li>\\ +
-<li class="level1"> <b>steelseries.js</b>  : une bibliothèque javascript qui permet d'afficher un thermomètre graphique</li>\\ +
-</ul>+
  
-<p>\\ +Cela pour spécifier que le protocole WebSocket doit être disponible sur le port 8083.
-—-\\ +
-</p>+
  
-</div>+C'est en effet ce protocole qui sera utilisé par les pages HTML pour souscrire au flux MQTT et récupérer directement les données publiées au fur et à mesure.
  
-<h2>MySensors, sans fil</h2>\\ +Un projet exemple est disponible ici : [[https://konkarlab.fr/nextcloud/index.php/s/fJTy6zGHnW24fJZ|dans ce fichier zip]]
-<div class="level2">+
  
-<p>\\ +Ce projet comprend 5 fichiers à déposer dans le même dossier:
-Une petite démo d'un capteur de température sans fil en utilisant la bibliothèque <a href="https://www.mysensors.org" class="urlextern" title="https://www.mysensors.org" rel="ugc nofollow">MySensors</a>. <br/>+
  
-Plutôt orienté domotique, le système repose sur le composant radio <b>NRF24L01</b>  et un arduino nanoD'un coté, un ensemble (arduino + radio) doté d'un capteur de température DS18B20, et de l'autre, un ensemble seul faisant office de passerelle via le port série<br/>\\ +  * **SteelTemp.html**  : Le fichier html que nous devons construireavec un peu de javaScript pour personnaliser les interactions avec le server MQTT
-Il est possible de connecter toute une série de capteurs et d'actionneurs<br/>\\ +  * **jquery-1.8.3.min.js** une bibliothèque javaScript très utile 
-Plusieurs box domotiques sont capables d'utiliser ce système.\\ +  * **tween-min.js**  : une autre bibliothèque javaScript 
-</p>\\ +  * **mqttws31.js**  : la bibliothèque javaScript qui gère tout le code permettant de souscrire à un server MQTT 
-<hr />+  * **steelseries.js**  : une bibliothèque javascript qui permet d'afficher un thermomètre graphique 
 +—-
  
-<p>\\ +===== MySensors, sans fil =====
-<br/>+
  
-</p>+Une petite démo d'un capteur de température sans fil en utilisant la bibliothèque [[https://www.mysensors.org|MySensors]]. \\ 
 +Plutôt orienté domotique, le système repose sur le composant radio **NRF24L01**  et un arduino nano. D'un coté, un ensemble (arduino + radio) doté d'un capteur de température DS18B20, et de l'autre, un ensemble seul faisant office de passerelle via le port série. \\ Il est possible de connecter toute une série de capteurs et d'actionneurs. \\ Plusieurs box domotiques sont capables d'utiliser ce système.
  
-</div>\\ +----
-<!-- EDIT{"target":"table","name":"","hid":"table","secid":1,"range":"4572-"-->+
  
  
  • start/projets/capteurweb.1637967560.txt.gz
  • Dernière modification : 2021/11/26 23:59
  • de finizi