{"id":1349,"date":"2015-08-30T03:30:42","date_gmt":"2015-08-30T07:30:42","guid":{"rendered":"http:\/\/nagashur.com\/blog\/?p=1349"},"modified":"2015-08-30T03:31:43","modified_gmt":"2015-08-30T07:31:43","slug":"ds18b20-raspberry-pi-mesurer-la-temperature-avec-une-sonde-numerique","status":"publish","type":"post","link":"http:\/\/nagashur.com\/blog\/2015\/08\/30\/ds18b20-raspberry-pi-mesurer-la-temperature-avec-une-sonde-numerique\/","title":{"rendered":"DS18B20 Raspberry pi &#8211; Mesurer la temp\u00e9rature avec une sonde num\u00e9rique"},"content":{"rendered":"<p>Pour mesurer la temp\u00e9rature, il est possible d&#8217;utiliser divers capteurs, tels que le <a href=\"http:\/\/www.analog.com\/en\/products\/analog-to-digital-converters\/integrated-special-purpose-converters\/integrated-temperature-sensors\/tmp36.html\">TMP36<\/a>, le <a href=\"https:\/\/www.adafruit.com\/products\/386\">DHT11<\/a>\/<a href=\"https:\/\/www.google.com\/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=2&amp;cad=rja&amp;uact=8&amp;ved=0CCUQFjABahUKEwj2jaub0c_HAhUBFRQKHc90AKc&amp;url=https%3A%2F%2Fwww.adafruit.com%2Fdatasheets%2FDigital%2520humidity%2520and%2520temperature%2520sensor%2520AM2302.pdf&amp;ei=lVniVbbvA4GqUM_pgbgK&amp;usg=AFQjCNF5T-gsIkq5_unvRMxOQs4Etrj-ZA&amp;sig2=-gNN8vu41Q9mQiO-al-IvQ\">DH22<\/a>, ou encore le <a href=\"http:\/\/www.google.com\/aclk?sa=l&amp;ai=CZBAPvVniVf76MIO4bKb4qcgHi5GXhQXrvO2V7wG145EUCAAQAWDbA6ABz5r0uAPIAQGqBB9P0GCBAW2hIW-Wk9UtoB1mC_ewWJXhqRbrNn52IxHIgAfDy5svkAcBqAemvhvYBwE&amp;sig=AOD64_0_Laot34GIOfI2En1RZ5WjpRfdWg&amp;clui=0&amp;rct=j&amp;q=&amp;ved=0CBsQ0QxqFQoTCOLg3q7Rz8cCFcWyFAodX9kOaA&amp;adurl=http:\/\/www.alldatasheet.com\/view.jsp%3FSearchword%3DDs18b20&amp;cad=rja\">DS18B20<\/a>. C&#8217;est \u00e0 cette derni\u00e8re sonde que nous nous int\u00e9resserons aujourd&#8217;hui. Il s&#8217;agit d&#8217;une sonde num\u00e9rique (pas besoin de convertisseur analogique-num\u00e9rique tel que le <a href=\"http:\/\/nagashur.com\/blog\/2013\/01\/13\/lire-des-entrees-analogiques-sur-un-raspberry-avec-un-circuit-adc-le-mcp3008\/\">MCP3008<\/a>) qui est assez pr\u00e9cise (\u00b10.5\u00b0C sur la plage -10\u00b0C &#8211; 85\u00b0C), raisonnablement facile \u00e0 utiliser, et consommant peu. Par rapport \u00e0 une sonde analogique, c&#8217;est un peu plus complexe, puisqu&#8217;il faut utiliser le protocole dallas 1-wire, mais nous verrons qu&#8217;il y a d\u00e9j\u00e0 les outils n\u00e9cessaires pour exploiter tout cela.<\/p>\n<p><!--more--><\/p>\n<h2>DS18B20 Raspberry pi : le c\u00e2blage<\/h2>\n<p>Si nous regardons la sonde de pr\u00e8s, elle est en forme de demi cylindre, avec un c\u00f4t\u00e9 plat, portant des inscriptions, comme on peut le voir sur la photo suivante :<\/p>\n<div id=\"attachment_1358\" style=\"width: 810px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/DS18B20_pinout_4747_800px.jpg\"><img aria-describedby=\"caption-attachment-1358\" data-attachment-id=\"1358\" data-permalink=\"http:\/\/nagashur.com\/blog\/2015\/08\/30\/ds18b20-raspberry-pi-mesurer-la-temperature-avec-une-sonde-numerique\/ds18b20_pinout_4747_800px\/\" data-orig-file=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/DS18B20_pinout_4747_800px.jpg\" data-orig-size=\"800,280\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;3.4&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;Canon PowerShot SX200 IS&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1440896596&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;5&quot;,&quot;iso&quot;:&quot;100&quot;,&quot;shutter_speed&quot;:&quot;0.00125&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Brochage du DS18B20\" data-image-description=\"\" data-medium-file=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/DS18B20_pinout_4747_800px-300x105.jpg\" data-large-file=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/DS18B20_pinout_4747_800px.jpg\" loading=\"lazy\" class=\"wp-image-1358 size-full\" src=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/DS18B20_pinout_4747_800px.jpg\" alt=\"Brochage du DS18B20\" width=\"800\" height=\"280\" srcset=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/DS18B20_pinout_4747_800px.jpg 800w, http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/DS18B20_pinout_4747_800px-300x105.jpg 300w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><p id=\"caption-attachment-1358\" class=\"wp-caption-text\">Brochage du DS18B20<\/p><\/div>\n<p>Lorsque nous regardons le c\u00f4t\u00e9 plat, les pattes \u00e9tant vers le bas, on \u00e0 de gauche \u00e0 droite les trois pattes de la sonde. La premi\u00e8re pour la <strong>masse (GND)<\/strong>, la seconde pour le <strong>signal<\/strong> (connect\u00e9 au GPIO4) et la derni\u00e8re est l&#8217;alimentation, <strong>VCC<\/strong> (ici 3.3V) .<\/p>\n<p>&nbsp;<\/p>\n<p>On va donc logiquement connecter la broche <strong>GND<\/strong> \u00e0 la <strong>masse<\/strong> du Raspberry Pi, la broche <strong>VCC<\/strong> au <strong>+3.3V<\/strong>, et la broche <strong>signal<\/strong> au <strong>GPIO4<\/strong>. Mais il faudra \u00e9galement connecter la broche signal \u00e0 VCC, via une r\u00e9sistance de 4.7KOhms. Vous pouvez suivre le sch\u00e9ma suivant :<\/p>\n<div id=\"attachment_1353\" style=\"width: 555px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/DS18B20_bb.png\"><img aria-describedby=\"caption-attachment-1353\" data-attachment-id=\"1353\" data-permalink=\"http:\/\/nagashur.com\/blog\/2015\/08\/30\/ds18b20-raspberry-pi-mesurer-la-temperature-avec-une-sonde-numerique\/ds18b20_bb\/\" data-orig-file=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/DS18B20_bb.png\" data-orig-size=\"1818,756\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"DS18B20 Raspberry pi &#8211; c\u00e2blage\" data-image-description=\"\" data-medium-file=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/DS18B20_bb-300x125.png\" data-large-file=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/DS18B20_bb-1024x426.png\" loading=\"lazy\" class=\"wp-image-1353 size-large\" src=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/DS18B20_bb-1024x426.png\" alt=\"DS18B20 Raspberry pi - c\u00e2blage\" width=\"545\" height=\"227\" srcset=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/DS18B20_bb-1024x426.png 1024w, http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/DS18B20_bb-300x125.png 300w, http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/DS18B20_bb-387x160.png 387w, http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/DS18B20_bb.png 1818w\" sizes=\"(max-width: 545px) 100vw, 545px\" \/><\/a><p id=\"caption-attachment-1353\" class=\"wp-caption-text\">DS18B20 Raspberry pi &#8211; c\u00e2blage<\/p><\/div>\n<p>Et c&#8217;est tout \ud83d\ude42<\/p>\n<h2>Configuration du syst\u00e8me<\/h2>\n<p>Avant de pouvoir utiliser notre sonde, il faut configurer le syst\u00e8me. Nous verrons donc les quelques commandes n\u00e9cessaires pour cela.<\/p>\n<h3>\u00c9tape 1 : modifier \/boot\/config.txt<\/h3>\n<p>Pour cela, vous pouvez taper la commande suivante :<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">sudo nano \/boot\/config.txt<\/pre>\n<p>Il faudra alors ajouter le texte suivant \u00e0 la fin du fichier :<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">dtoverlay=w1-gpio<\/pre>\n<p>&nbsp;<\/p>\n<p>Sauvegardez avec <strong>CTRL+W<\/strong>, puis quittez avec <strong>CTRL+X<\/strong>.<\/p>\n<p>Vous pouvez alors red\u00e9marrer le syst\u00e8me :<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">sudo reboot<\/pre>\n<h3 class=\"prettyprint linenums\">\u00c9tape 2: charger les modules <span class=\"pln\">w1<\/span><span class=\"pun\">&#8211;<\/span><span class=\"pln\">gpio et w1<\/span><span class=\"pun\">&#8211;<\/span><span class=\"pln\">therm<\/span><\/h3>\n<p class=\"prettyprint linenums\"><span class=\"pln\">Pour charger les modules noyau n\u00e9cessaire \u00e0 l&#8217;exploitation du capteur, on ex\u00e9cutera les commandes suivantes : <\/span><\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\"> sudo modprobe w1-gpio sudo modprobe w1-therm <\/pre>\n<p>Cela nous permettra de charger les modules jusqu&#8217;au prochain red\u00e9marrage du syst\u00e8me. Du coup,<strong> il faudra refaire cette manipulation \u00e0 chaque d\u00e9marrage<\/strong>.<\/p>\n<p>&nbsp;<\/p>\n<p>Si l&#8217;on souhaite au contraire <strong>faire en sorte que les modules en question soient automatiquement charg\u00e9s<\/strong>, une autre solution est de modifier le fichier <strong>\/etc\/modules<\/strong> :<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">sudo nano \/etc\/modules<\/pre>\n<p>On ajoute alors en fin de fichier les deux lignes suivantes :<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nw1-gpio\r\nw1-therm\r\n<\/pre>\n<p>Ainsi, \u00e0 chaque d\u00e9marrage du syst\u00e8me, ces deux modules seront automatiquement charg\u00e9s.<\/p>\n<h3>\u00c9tape 3 : lire les donn\u00e9es de la sonde<\/h3>\n<p>On pourra alors v\u00e9rifier le fonctionnement de la sonde en faisant ceci :<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\ncd \/sys\/bus\/w1\/devices\r\nls\r\n<\/pre>\n<p>Si la sonde est reconnue, on verra apparaitre une liste contenant au moins un \u00e9l\u00e9ment qui correspond \u00e0 la sonde (quelque chose comme 28-xxxx).<br \/>\nOn pourra alors faire ceci pour lire les donn\u00e9es du capteur :<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\ncd 28-xxxx\r\ncat w1_slave\r\n<\/pre>\n<p>Cela affichera alors les donn\u00e9es du capteur, comme on peut le voir ici :<\/p>\n<div id=\"attachment_1356\" style=\"width: 653px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/shell_read_DS18B20.png\"><img aria-describedby=\"caption-attachment-1356\" data-attachment-id=\"1356\" data-permalink=\"http:\/\/nagashur.com\/blog\/2015\/08\/30\/ds18b20-raspberry-pi-mesurer-la-temperature-avec-une-sonde-numerique\/shell_read_ds18b20\/\" data-orig-file=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/shell_read_DS18B20.png\" data-orig-size=\"643,202\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"terminal lecture DS18B20\" data-image-description=\"\" data-medium-file=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/shell_read_DS18B20-300x94.png\" data-large-file=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/shell_read_DS18B20.png\" loading=\"lazy\" class=\"wp-image-1356 size-full\" src=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/shell_read_DS18B20.png\" alt=\"terminal lecture DS18B20\" width=\"643\" height=\"202\" srcset=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/shell_read_DS18B20.png 643w, http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/shell_read_DS18B20-300x94.png 300w\" sizes=\"(max-width: 643px) 100vw, 643px\" \/><\/a><p id=\"caption-attachment-1356\" class=\"wp-caption-text\">terminal :\u00a0 lecture du DS18B20<\/p><\/div>\n<p>Comme vous pouvez le voir dans l&#8217;exemple de l&#8217;image, on obtient une sortie sur deux lignes. La premi\u00e8re ligne est termin\u00e9e par YES, indiquant que notre capteur \u00e0 pu lire une temp\u00e9rature, et la seconde ligne est termin\u00e9e par t=xxxxx, ou l&#8217;on a la temp\u00e9rature en milli\u00e8mes de degr\u00e9s (on divise par 1000 pour obtenir la temp\u00e9rature en degr\u00e9s).<\/p>\n<p>Dans l&#8217;exemple, je fournis une ligne de code permettant de ne s\u00e9lectionner que la temp\u00e9rature :<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\ncat \/sys\/bus\/w1\/devices\/28-000006799670\/w1_slave | tail -n 1 | cut -f10 -d &quot; &quot; | cut -f 2 -d &quot;=&quot;\r\n<\/pre>\n<h2>Programmation<\/h2>\n<p>Nous verrons maintenant comment exploiter la sortie fournie par la sonde afin de surveiller une temp\u00e9rature. Nous verrons pour cela deux solutions : la premi\u00e8re avec un script bash, et la seconde via un script python.<\/p>\n<p>Comme nous l&#8217;avons d\u00e9j\u00e0 vu bri\u00e8vement, il est possible de r\u00e9cup\u00e9rer uniquement la temp\u00e9rature dans une variable. Nous devrons alors diviser l&#8217;ensemble par 1000 pour pouvoir avoir une temp\u00e9rature en\u00a0 degr\u00e9s Celsius. Cependant, le probl\u00e8me est que l&#8217;interpr\u00e9teur bash ne g\u00e8re pas les nombres \u00e0 virgule, mais uniquement les entiers. Il existe diverses solutions, et <a href=\"http:\/\/stackoverflow.com\/questions\/12722095\/how-can-i-get-a-float-division-in-bash\">vous pourrez en apprendre davantage en suivant ce lien<\/a>. Pour faire simple, une solution serait d&#8217;utiliser bc, mais ce n&#8217;est pas install\u00e9 par d\u00e9faut sur le raspberry pi. Une autre solution qui fonctionne sans ajouter de paquets est d&#8217;utiliser awk.<\/p>\n<h3>Script bash<\/h3>\n<p>Ainsi, on obtient un petit script readTemp1.sh basique :<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n\r\n#!\/bin\/bash\r\ntemp01=`cat \/sys\/bus\/w1\/devices\/28-000006799670\/w1_slave | tail -n 1 | cut -f10 -d &quot; &quot; | cut -f 2 -d &quot;=&quot;`\r\ntemp02=$(awk &quot;BEGIN {printf \\&quot;%.3f\\&quot;,${temp01}\/1000}&quot;)\r\necho $temp02\r\n\r\n<\/pre>\n<p>Enregistrez donc ceci dans un fichier readTemp1.sh, puis faites ajoutez les droits d&#8217;ex\u00e9cution :<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n\r\nchmod u+x readTemp1.sh\r\n\r\n<\/pre>\n<p>Vous pouvez alors ex\u00e9cuter le script en faisant\u00a0 <strong>sudo .\/readTemp1.sh<\/strong> . Il est \u00e9galement possible de ne pas ajouter les droits en ex\u00e9cution, et se contenter de faire <strong>sudo sh .\/readTemp1.sh<\/strong>.<\/p>\n<p>Dans tous les cas, on obtient un affichage en degr\u00e9s Celsius avec les d\u00e9cimales (trois, mais on peut r\u00e9duire en changeant le <strong>%.3f<\/strong> en <strong>%.2f<\/strong> dans le script pour avoir deux d\u00e9cimales par exemple).<\/p>\n<p>Cette approche basique fonctionne, et permet d&#8217;obtenir la temp\u00e9rature. Mais id\u00e9alement, il faudrait v\u00e9rifier sur la premi\u00e8re ligne si l&#8217;on a bien un YES.<\/p>\n<p>C&#8217;est ce que nous ferons maintenant :<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n\r\n#!\/bin\/bash\r\nprobe_addr='28-000006799670'\r\nres=`cat \/sys\/bus\/w1\/devices\/$probe_addr\/w1_slave | head -n 1 | grep YES | wc -l`\r\nif [ $res -eq 1 ]\r\nthen\r\ntemp01=`cat \/sys\/bus\/w1\/devices\/$probe_addr\/w1_slave | tail -n 1 | cut -f10 -d &quot; &quot; | cut -f 2 -d &quot;=&quot;`\r\ntemp02=$(awk &quot;BEGIN {printf \\&quot;%.2f\\&quot;,${temp01}\/1000}&quot;)\r\necho $temp02\r\nfi\r\n\r\n<\/pre>\n<p>Dans ce contexte, le script teste si on a bien YES sur la ligne 1, et si c&#8217;est le cas, r\u00e9cup\u00e8re la temp\u00e9rature et l&#8217;affiche. Dans le cas contraire, il n&#8217;affiche rien.<\/p>\n<p>On peut ajouter un elif dans le script si on veut afficher un message d&#8217;erreur.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h3>Script python<\/h3>\n<p>Pour ce script, je ne vais pas r\u00e9inventer la roue, et on va utiliser un script inspir\u00e9 du <a href=\"https:\/\/learn.adafruit.com\/adafruits-raspberry-pi-lesson-11-ds18b20-temperature-sensing\/software\">code d&#8217;exemple d&#8217;Adafruit<\/a> :<\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\">\r\n#!\/usr\/bin\/env python\r\nimport os\r\nimport glob\r\nimport time\r\nimport sys\r\n\r\nos.system('modprobe w1-gpio')\r\nos.system('modprobe w1-therm')\r\n\r\nbase_dir = '\/sys\/bus\/w1\/devices\/'\r\ndevice_folder = glob.glob(base_dir + '28*')[0]\r\ndevice_file = device_folder + '\/w1_slave'\r\n\r\ndef read_temp_raw():\r\n f = open(device_file, 'r')\r\n lines = f.readlines()\r\n f.close()\r\n return lines\r\n\r\ndef read_temp():\r\n lines = read_temp_raw()\r\n while lines[0].strip()[-3:] != 'YES':\r\n time.sleep(0.2)\r\n lines = read_temp_raw()\r\n equals_pos = lines[1].find('t=')\r\n if equals_pos != -1:\r\n temp_string = lines[1][equals_pos+2:]\r\n temp_c = float(temp_string) \/ 1000.0\r\n temp_f = temp_c * 9.0 \/ 5.0 + 32.0\r\n return temp_c, temp_f\r\n\r\ntry:\r\n while True:\r\n print(read_temp()[0])\r\n time.sleep(0.3)\r\nexcept KeyboardInterrupt:\r\n sys.exit(0)\r\n<\/pre>\n<p>J&#8217;ai modifi\u00e9 leur code pour ajouter un <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Shebang\">shebang<\/a> au d\u00e9but, l&#8217;ajout de <a href=\"http:\/\/stackoverflow.com\/questions\/15318208\/capture-control-c-in-python\">la gestion d&#8217;une exception<\/a> pour capturer le <strong>CTRL+C<\/strong>, qui permet de quitter le script, sans afficher de messages d&#8217;erreur, et enfin le fait de n&#8217;afficher que la temp\u00e9rature en\u00a0 Celsius. Si vous voulez des degr\u00e9s Fahrenheit, il suffira de modifier la ligne 34 pour remplacer le 0 en 1 entre les crochets, et pour afficher les deux il suffit d&#8217;enlever les crochets et le nombre.<\/p>\n<p>Ce script affiche la temp\u00e9rature toutes les demi-secondes, et tourne en boucle pour ne se terminer que si l&#8217;on fait <strong>CTRL+C<\/strong>. En outre, il affichera la temp\u00e9rature de la premi\u00e8re sonde DS18B20 trouv\u00e9e, et donc ne sera pas adapt\u00e9 \u00e0 l&#8217;affichage de plusieurs temp\u00e9ratures. On peut le modifier pour afficher une sonde bien pr\u00e9cise qui n&#8217;est pas forc\u00e9ment la premi\u00e8re, et \u00e9galement pour qu&#8217;il affiche la temp\u00e9rature une fois avant de quitter (pouvant ainsi \u00eatre utilis\u00e9 pour d&#8217;autres scripts) :<\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\">\r\n#!\/usr\/bin\/env python\r\nimport os\r\nimport glob\r\nimport time\r\nimport sys\r\n\r\nos.system('modprobe w1-gpio')\r\nos.system('modprobe w1-therm')\r\n\r\nbase_dir = '\/sys\/bus\/w1\/devices\/'\r\nprobe_addr='28-000006799670\/' #remplacer ici par l'adresse de la sonde\r\ndevice_folder = glob.glob(base_dir + probe_addr)[0]\r\ndevice_file = device_folder + '\/w1_slave'\r\n\r\ndef read_temp_raw():\r\n f = open(device_file, 'r')\r\n lines = f.readlines()\r\n f.close()\r\n return lines\r\n\r\ndef read_temp():\r\n lines = read_temp_raw()\r\n while lines[0].strip()[-3:] != 'YES':\r\n time.sleep(0.2)\r\n lines = read_temp_raw()\r\n equals_pos = lines[1].find('t=')\r\n if equals_pos != -1:\r\n temp_string = lines[1][equals_pos+2:]\r\n temp_c = float(temp_string) \/ 1000.0\r\n temp_f = temp_c * 9.0 \/ 5.0 + 32.0\r\n return temp_c, temp_f\r\n\r\nprint(read_temp()[0])\r\n<\/pre>\n<p>A noter qu&#8217;on peut \u00e9galement se d\u00e9barrasser des deux lignes 7 et 8 si l&#8217;on a charg\u00e9 les modules au d\u00e9marrage.<\/p>\n<h2>Autres ressources<\/h2>\n<p>S&#8217;il vous faut d&#8217;autres ressources, en voici quelques unes :<\/p>\n<ul>\n<li>Le<a href=\"https:\/\/learn.adafruit.com\/adafruits-raspberry-pi-lesson-11-ds18b20-temperature-sensing\/hardware\"> tutoriel d&#8217;Adafruit, en Anglais<\/a>, qui m&#8217;a servi de base;<\/li>\n<li>Le <a href=\"http:\/\/www.manuel-esteban.com\/raspi-capteur-de-temperature-ds18b20\/\">tutoriel de Yaug&#8217;s corner<\/a>, (en Fran\u00e7ais) qui fournit encore quelques liens;<\/li>\n<li>Le <a href=\"http:\/\/www.framboise314.fr\/mesure-de-temperature-1-wire-ds18b20-avec-le-raspberry-pi\/\">tutoriel de framboise314<\/a>, toujours en Fran\u00e7ais, extr\u00eamement complet, avec notamment des explications sur le bus 1-wire, et le mode parasite, et qui compl\u00e8te tr\u00e8s bien cet article ou je me suis davantage concentr\u00e9 sur le code que sur le principe \u00e9lectronique g\u00e9n\u00e9ral du capteur.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ce tutoriel sur le DS18B20 pour Raspberry pi indique comment c\u00e2bler le tout, configurer le syst\u00e8me pour pouvoir s&#8217;en servir, et pr\u00e9sente\/explique le code permettant d&#8217;exploiter ce capteur num\u00e9rique (code bash et python).<\/p>\n","protected":false},"author":2,"featured_media":1355,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","jetpack_publicize_message":""},"categories":[354,168,335],"tags":[407,108,406,268,405,160,218,401,404,61,408,156,106,402,403],"jetpack_featured_media_url":"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/DS18B20_logo_4747_800px.jpg","jetpack_publicize_connections":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v15.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>DS18B20 Raspberry pi - Mesurer la temp\u00e9rature avec une sonde num\u00e9rique - Nagashur<\/title>\n<meta name=\"description\" content=\"DS18B20 Raspberry pi - tutoriel : connecter le capteur, configurer le syst\u00e8me, et faire un programme adapt\u00e9 (code bash et python cl\u00e9 en main fourni).\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/nagashur.com\/blog\/2015\/08\/30\/ds18b20-raspberry-pi-mesurer-la-temperature-avec-une-sonde-numerique\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"DS18B20 Raspberry pi - Mesurer la temp\u00e9rature avec une sonde num\u00e9rique - Nagashur\" \/>\n<meta property=\"og:description\" content=\"DS18B20 Raspberry pi - tutoriel : connecter le capteur, configurer le syst\u00e8me, et faire un programme adapt\u00e9 (code bash et python cl\u00e9 en main fourni).\" \/>\n<meta property=\"og:url\" content=\"http:\/\/nagashur.com\/blog\/2015\/08\/30\/ds18b20-raspberry-pi-mesurer-la-temperature-avec-une-sonde-numerique\/\" \/>\n<meta property=\"og:site_name\" content=\"Nagashur\" \/>\n<meta property=\"article:published_time\" content=\"2015-08-30T07:30:42+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2015-08-30T07:31:43+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/DS18B20_logo_4747_800px.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"412\" \/>\n<meta name=\"twitter:card\" content=\"summary\" \/>\n<meta name=\"twitter:creator\" content=\"@audreyrobinel\" \/>\n<meta name=\"twitter:site\" content=\"@audreyrobinel\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"http:\/\/nagashur.com\/blog\/#website\",\"url\":\"http:\/\/nagashur.com\/blog\/\",\"name\":\"Nagashur\",\"description\":\"raspi et arduino FTW :)\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"http:\/\/nagashur.com\/blog\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"ImageObject\",\"@id\":\"http:\/\/nagashur.com\/blog\/2015\/08\/30\/ds18b20-raspberry-pi-mesurer-la-temperature-avec-une-sonde-numerique\/#primaryimage\",\"inLanguage\":\"fr-FR\",\"url\":\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/DS18B20_logo_4747_800px.jpg\",\"width\":800,\"height\":412,\"caption\":\"DS18B20 logo sonde temp\\u00e9rature num\\u00e9rique\"},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/nagashur.com\/blog\/2015\/08\/30\/ds18b20-raspberry-pi-mesurer-la-temperature-avec-une-sonde-numerique\/#webpage\",\"url\":\"http:\/\/nagashur.com\/blog\/2015\/08\/30\/ds18b20-raspberry-pi-mesurer-la-temperature-avec-une-sonde-numerique\/\",\"name\":\"DS18B20 Raspberry pi - Mesurer la temp\\u00e9rature avec une sonde num\\u00e9rique - Nagashur\",\"isPartOf\":{\"@id\":\"http:\/\/nagashur.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\/\/nagashur.com\/blog\/2015\/08\/30\/ds18b20-raspberry-pi-mesurer-la-temperature-avec-une-sonde-numerique\/#primaryimage\"},\"datePublished\":\"2015-08-30T07:30:42+00:00\",\"dateModified\":\"2015-08-30T07:31:43+00:00\",\"author\":{\"@id\":\"http:\/\/nagashur.com\/blog\/#\/schema\/person\/11a329fa33df4e94444716624beb8186\"},\"description\":\"DS18B20 Raspberry pi - tutoriel : connecter le capteur, configurer le syst\\u00e8me, et faire un programme adapt\\u00e9 (code bash et python cl\\u00e9 en main fourni).\",\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/nagashur.com\/blog\/2015\/08\/30\/ds18b20-raspberry-pi-mesurer-la-temperature-avec-une-sonde-numerique\/\"]}]},{\"@type\":\"Person\",\"@id\":\"http:\/\/nagashur.com\/blog\/#\/schema\/person\/11a329fa33df4e94444716624beb8186\",\"name\":\"sky99\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p6yqc2-lL","jetpack-related-posts":[{"id":1918,"url":"http:\/\/nagashur.com\/blog\/2016\/10\/06\/nouveau-tutoriel-wiki-ds18b20-raspberry-pi\/","url_meta":{"origin":1349,"position":0},"title":"Nouveau tutoriel sur le wiki : le DS18B20 sur un Raspberry pi","date":"6 octobre 2016","format":"link","excerpt":"L'un des tutoriels \u00e0 \u00e9t\u00e9 port\u00e9 sur le wiki. Cette fois ci, il s'agit de la Mesure de la temp\u00e9rature avec une sonde num\u00e9rique DS18B20 sur un RaspberryPi. Ce tutoriel avait \u00e9t\u00e9 pr\u00e9alablement publi\u00e9 au format blog ici. Cette version permet une bonne visualisation du code et le t\u00e9l\u00e9chargement ais\u00e9\u2026","rel":"","context":"Dans &quot;annonces&quot;","img":{"alt_text":"Sonde de temp\u00e9rature DS18B20","src":"https:\/\/i0.wp.com\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/DS18B20_4747_800px.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":584,"url":"http:\/\/nagashur.com\/blog\/2013\/01\/13\/lire-des-entrees-analogiques-sur-un-raspberry-avec-un-circuit-adc-le-mcp3008\/","url_meta":{"origin":1349,"position":1},"title":"Lire des entr\u00e9es analogiques sur un Raspberry avec un circuit ADC : le MCP3008","date":"13 janvier 2013","format":false,"excerpt":"Nous connectons un circuit MCP3008 \u00e0 4 ports GPIO du Raspberry pi, et nous pouvons alors connecter divers capteurs \u00e0 l'une des 8 broches libres du MCP3008 pour lire les valeurs de divers capteurs analogiques. Un exemple de code python r\u00e9alisant cela est fourni, et les sch\u00e9mas de c\u00e2blage de\u2026","rel":"","context":"Dans &quot;capteurs&quot;","img":{"alt_text":"Convertisseur analogique-num\u00e9rique MCP3008","src":"https:\/\/i1.wp.com\/nagashur.com\/blog\/wp-content\/uploads\/2013\/01\/MCP3008-01.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":921,"url":"http:\/\/nagashur.com\/blog\/2015\/04\/14\/tutoriels-raspberry-pi\/","url_meta":{"origin":1349,"position":2},"title":"Liste de tutoriels Raspberry pi sur le wiki","date":"14 avril 2015","format":false,"excerpt":"J'ai commenc\u00e9 \u00e0 porter les tutoriels Raspberry Pi sur le wiki. Je remets donc en forme, corrige, actualise et am\u00e9liore les anciens tutoriels, tout en ajoutant de nouvelles ressources. Si vous \u00eates donc int\u00e9ress\u00e9s par le Raspberry Pi, et vous demandez comment r\u00e9aliser une chose en particulier, n'h\u00e9sitez pas \u00e0\u2026","rel":"","context":"Dans &quot;annonces&quot;","img":{"alt_text":"wiki.nagashur.com : section raspi","src":"https:\/\/i0.wp.com\/nagashur.com\/blog\/wp-content\/uploads\/2015\/04\/wiki.nagashur_section_raspi.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":543,"url":"http:\/\/nagashur.com\/blog\/2013\/01\/01\/controler-une-led-depuis-les-ports-gpio-du-raspberry-pi\/","url_meta":{"origin":1349,"position":3},"title":"Contr\u00f4ler une LED depuis les GPIO du Raspberry PI","date":"1 janvier 2013","format":false,"excerpt":"Un des grands int\u00e9r\u00eats du Raspberry pi est qu'il dispose de GPIO utilisables comme entr\u00e9e ou sortie afin de lire des capteurs ou commandes des syst\u00e8mes. Nous nous verrons ici comment contr\u00f4ler les GPIO du Raspberry pi configur\u00e9s en mode sorte, \u00e0 travers un exemple concret ou nous commanderons une\u2026","rel":"","context":"Dans &quot;\u00e9lectronique&quot;","img":{"alt_text":"LED de 5mm : rouge, jaune, verte, orange, bleue, blanche et infrarouge","src":"https:\/\/i2.wp.com\/nagashur.com\/blog\/wp-content\/uploads\/2013\/01\/LEDs_5mm_4755_800px.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":778,"url":"http:\/\/nagashur.com\/blog\/2013\/06\/18\/lecture-dune-sonde-de-temperature-tmp36-sur-un-arduino\/","url_meta":{"origin":1349,"position":4},"title":"Lecture d'une sonde de temp\u00e9rature TMP36 sur un Arduino","date":"18 juin 2013","format":false,"excerpt":"Si le cot\u00e9 plat est vers vous, alors la broche de gauche ira sur le +5V de votre Arduino, ou sur le +3.3V du Raspberry Pi. La broche centrale ira sur votre entr\u00e9e analogique, par exemple le A0 du Arduino, ou une broche d'entr\u00e9e du MCP3008 connect\u00e9 \u00e0 votre Raspberry\u2026","rel":"","context":"Dans &quot;Arduino&quot;","img":{"alt_text":"sonde TMP36 (cr\u00e9dits Adafruit)","src":"https:\/\/i0.wp.com\/nagashur.com\/blog\/wp-content\/uploads\/2013\/06\/TMP36.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":553,"url":"http:\/\/nagashur.com\/blog\/2013\/01\/02\/lire-la-valeur-dun-bouton-connecte-aux-gpio-du-raspberry-pi\/","url_meta":{"origin":1349,"position":5},"title":"Lire la valeur d'un bouton connect\u00e9 aux GPIO du Raspberry Pi","date":"2 janvier 2013","format":false,"excerpt":"Les GPIO du Raspberry pi peuvent \u00eatre utilis\u00e9s en sortie (\u00e9criture), mais \u00e9galement en entr\u00e9e (lecture). Nous nous int\u00e9resserons ici \u00e0 cette seconde possibilit\u00e9, qui permettra au Raspberry pi de recevoir des informations du monde ext\u00e9rieur. L'objectif de ce tutoriel est de s'appuyer sur le tutoriel sur l'utilisation d'un GPIO\u2026","rel":"","context":"Dans &quot;bricolo&quot;","img":{"alt_text":"boutons chrom\u00e9s","src":"https:\/\/i2.wp.com\/nagashur.com\/blog\/wp-content\/uploads\/2013\/01\/boutons_4750_800px.jpg?resize=350%2C200","width":350,"height":200},"classes":[]}],"_links":{"self":[{"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/posts\/1349"}],"collection":[{"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/comments?post=1349"}],"version-history":[{"count":0,"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/posts\/1349\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/media\/1355"}],"wp:attachment":[{"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/media?parent=1349"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/categories?post=1349"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/tags?post=1349"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}