{"id":553,"date":"2013-01-02T00:04:26","date_gmt":"2013-01-02T04:04:26","guid":{"rendered":"http:\/\/nagashur.com\/blog\/?p=553"},"modified":"2015-09-03T12:37:25","modified_gmt":"2015-09-03T16:37:25","slug":"lire-la-valeur-dun-bouton-connecte-aux-gpio-du-raspberry-pi","status":"publish","type":"post","link":"http:\/\/nagashur.com\/blog\/2013\/01\/02\/lire-la-valeur-dun-bouton-connecte-aux-gpio-du-raspberry-pi\/","title":{"rendered":"Lire la valeur d&#8217;un bouton connect\u00e9 aux GPIO du Raspberry Pi"},"content":{"rendered":"<p>Les GPIO du Raspberry pi <a class=\"wikilink1\" title=\"raspberry_pi:gpio_sortie\" href=\"http:\/\/nagashur.com\/wiki\/doku.php?id=raspberry_pi:gpio_sortie\">peuvent \u00eatre utilis\u00e9s en sortie<\/a> (\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&#8217;objectif de ce tutoriel est de s&#8217;appuyer sur le tutoriel sur <a class=\"wikilink1\" title=\"raspberry_pi:gpio_sortie\" href=\"http:\/\/nagashur.com\/wiki\/doku.php?id=raspberry_pi:gpio_sortie\"> l&#8217;utilisation d&#8217;un GPIO en sortie pour contr\u00f4ler une LED<\/a>, et d&#8217;y ajouter le fait de lire un bouton poussoir connect\u00e9 sur un autre GPIO pour changer l&#8217;\u00e9tat de cette LED. Il est \u00e9galement possible d&#8217;acc\u00e9der \u00e0 <a class=\"wikilink1\" title=\"raspberry_pi:tutoriels\" href=\"http:\/\/nagashur.com\/wiki\/doku.php?id=raspberry_pi:tutoriels\">la liste des tutoriels sur le Raspberry pi<\/a> pour voir d&#8217;autres utilisations.<\/p>\n<p><!--more--><\/p>\n<p class=\"sectionedit2\">Ce tutoriel est la version &#8220;blog&#8221; <a href=\"http:\/\/nagashur.com\/wiki\/doku.php?id=raspberry_pi:gpio_entree\">du tutoriel que j&#8217;ai post\u00e9 sur le wiki sur ce sujet<\/a>, et remplace le pr\u00e9c\u00e9dent billet sur le sujet, que j&#8217;ai donc enti\u00e8rement r\u00e9\u00e9crit.<\/p>\n<h2 id=\"prerequis\" class=\"sectionedit2\">Lecture bouton Raspberry pi : Pr\u00e9requis<\/h2>\n<div class=\"level2\">\n<div id=\"attachment_1371\" style=\"width: 160px\" class=\"wp-caption alignleft\"><a href=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2013\/01\/bouton_rouge_4753_800px.jpg\"><img aria-describedby=\"caption-attachment-1371\" data-attachment-id=\"1371\" data-permalink=\"http:\/\/nagashur.com\/blog\/2013\/01\/02\/lire-la-valeur-dun-bouton-connecte-aux-gpio-du-raspberry-pi\/bouton_rouge_4753_800px\/\" data-orig-file=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2013\/01\/bouton_rouge_4753_800px.jpg\" data-orig-size=\"800,668\" 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;1440932308&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.01&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"bouton poussoir rouge\" data-image-description=\"\" data-medium-file=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2013\/01\/bouton_rouge_4753_800px-300x251.jpg\" data-large-file=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2013\/01\/bouton_rouge_4753_800px.jpg\" loading=\"lazy\" class=\"wp-image-1371 size-thumbnail\" src=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2013\/01\/bouton_rouge_4753_800px-150x150.jpg\" alt=\"Lecture bouton Raspberry pi\" width=\"150\" height=\"150\" \/><\/a><p id=\"caption-attachment-1371\" class=\"wp-caption-text\">bouton poussoir rouge<\/p><\/div>\n<p>Pour ce tutoriel, nous aurons besoin d&#8217;un Raspberry Pi (A, A+, B, B+) configur\u00e9, ainsi que d&#8217;une breadboard, une LED, une r\u00e9sistance de 68 a 300 Ohms pour la LED, d&#8217;un bouton poussoir, d&#8217;une r\u00e9sistance de 2KOhms \u00e0 10KOhms, et enfin de quelques c\u00e2bles pour breadboard \u201cjumper wire\u201d. Il est \u00e9galement conseill\u00e9 d&#8217;avoir lu le tutoriel sur <a class=\"wikilink1\" title=\"raspberry_pi:gpio_sortie\" href=\"http:\/\/nagashur.com\/wiki\/doku.php?id=raspberry_pi:gpio_sortie\">l&#8217;utilisation d&#8217;un GPIO en sortie pour contr\u00f4ler une LED<\/a>, puisque nous nous baserons dessus.<\/p>\n<\/div>\n<h2 id=\"montage_de_type_pull-upresistance_de_tirage\" class=\"sectionedit3\">Montage de type &#8220;pull-up&#8221; : r\u00e9sistance de tirage<\/h2>\n<div class=\"level2\">\n<p>Nous reprendrons donc l&#8217;installation du tutoriel mentionn\u00e9 dans les pr\u00e9requis. Nous ajouterons un c\u00e2ble connectant la broche en haut \u00e0 gauche des GPIO au rail positif de la <em>breadboard<\/em>. Cette broche fournit du <strong>3.3V<\/strong>, le niveau logique accept\u00e9 par les GPIO en entr\u00e9e. Il convient de faire attention \u00e0 <strong>ne pas utiliser le 5V \u00e0 la place<\/strong>, car dans ce cas, on pourrait rendre les GPIO connect\u00e9s d\u00e9finitivement inutilisables, voir le Raspberry pi tout entier.<\/p>\n<p>Le bouton poussoir sera ajout\u00e9 au milieu de la <em>breadboard<\/em>, \u00e0 cheval sur les deux rang\u00e9es de trous. la broche du haut sera connect\u00e9e \u00e0 la masse, tandis qu&#8217;une r\u00e9sistance d&#8217;une valeur de 1 \u00e0 10 kilo-Ohms connectera la seconde broche au rail d&#8217;alimentation 3.3V. Enfin, un c\u00e2ble viendra s&#8217;intercaler sur entre la r\u00e9sistance et la broche du bouton connect\u00e9e \u00e0 celle ci, et sera connect\u00e9 sur le <strong>GPIO 17<\/strong>, \u00e0 savoir le sixi\u00e8me en partant du haut sur la colonne de gauche. Nous obtenons le r\u00e9sultat suivant :<\/p>\n<div id=\"attachment_1375\" style=\"width: 910px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/tuto_control_gpio_led_bouton_pull_up_bb.png\"><img aria-describedby=\"caption-attachment-1375\" data-attachment-id=\"1375\" data-permalink=\"http:\/\/nagashur.com\/blog\/?attachment_id=1375\" data-orig-file=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/tuto_control_gpio_led_bouton_pull_up_bb.png\" data-orig-size=\"900,728\" 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=\"C\u00e2blage d&#8217;un bouton poussoir vers les GPIO du Raspberry pi en pull-up\" data-image-description=\"\" data-medium-file=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/tuto_control_gpio_led_bouton_pull_up_bb-300x243.png\" data-large-file=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/tuto_control_gpio_led_bouton_pull_up_bb.png\" loading=\"lazy\" class=\"wp-image-1375 size-full\" src=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/tuto_control_gpio_led_bouton_pull_up_bb.png\" alt=\"C\u00e2blage d'un bouton poussoir vers les GPIO du Raspberry pi en pull-up\" width=\"900\" height=\"728\" srcset=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/tuto_control_gpio_led_bouton_pull_up_bb.png 900w, http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/tuto_control_gpio_led_bouton_pull_up_bb-300x243.png 300w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/><\/a><p id=\"caption-attachment-1375\" class=\"wp-caption-text\">C\u00e2blage d&#8217;un bouton poussoir vers les GPIO du Raspberry pi en pull-up<\/p><\/div>\n<p>Vous pouvez \u00e9galement t\u00e9l\u00e9charger le <a class=\"media mediafile mf_pdf\" title=\"raspberry_pi:tuto_control_gpio_led_bouton_pull_up_bb.pdf (875.1 KB)\" href=\"http:\/\/nagashur.com\/wiki\/lib\/exe\/fetch.php?media=raspberry_pi:tuto_control_gpio_led_bouton_pull_up_bb.pdf\">sch\u00e9ma de c\u00e2blage d&#8217;un bouton poussoir avec une r\u00e9sistance de tirage pull-up en version PDF<\/a>.<\/p>\n<p>Puisque nous souhaitons lire la valeur d&#8217;un bouton poussoir, nous utilisons logiquement un GPIO suppl\u00e9mentaire. La nouvelle r\u00e9sistance ajout\u00e9e ici est une <a class=\"interwiki iw_wpfr\" title=\"http:\/\/fr.wikipedia.org\/wiki\/R\u00e9sistance_de_rappel\" href=\"http:\/\/fr.wikipedia.org\/wiki\/R%C3%A9sistance_de_rappel\">r\u00e9sistance de tirage<\/a>. Elle devra avoir une valeur comprise entre 1 et 10KOhms, ici il s&#8217;agit d&#8217;une 4.7KOhms.<\/p>\n<p>Son r\u00f4le est de fixer la valeur lue lorsque l&#8217;on appuie pas sur le bouton. Sans cela, nous aurions une valeur dite \u201cflottante\u201d, c&#8217;est \u00e0 dire variable de fa\u00e7on impr\u00e9visible. Dans ce cas, il s&#8217;agit d&#8217;une r\u00e9sistance de tirage, ou <em><strong>pull-up resistor<\/strong><\/em> en anglais, et elle tire la valeur vers le 3.3V, ce qui correspondra \u00e0 un 1 logique (signal haut).<\/p>\n<h2 id=\"montage_de_type_pull-downresistance_de_rappel\" class=\"sectionedit4\">Montage de type &#8220;pull-down&#8221; : r\u00e9sistance de rappel<\/h2>\n<p>Une autre solution serait de faire le contraire, c&#8217;est \u00e0 dire de faire en sorte que la valeur lue par d\u00e9faut, lorsque l&#8217;on n&#8217;appuie pas sur le bouton, soit nulle. Cette configuration est tr\u00e8s proche, et utilise une r\u00e9sistance de rappel dite <em><strong>pull down<\/strong><\/em>. Notre montage change peu, puisque cette fois ci, la premi\u00e8re broche du bouton poussoir est connect\u00e9e au rail 3.3V, tandis que la r\u00e9sistance sera connect\u00e9e \u00e0 la masse, comme on peut le voir sur ce sch\u00e9ma :<\/p>\n<div id=\"attachment_1377\" style=\"width: 910px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/tuto_control_gpio_led_bouton_pull_down_bb.png\"><img aria-describedby=\"caption-attachment-1377\" data-attachment-id=\"1377\" data-permalink=\"http:\/\/nagashur.com\/blog\/?attachment_id=1377\" data-orig-file=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/tuto_control_gpio_led_bouton_pull_down_bb.png\" data-orig-size=\"900,728\" 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=\"C\u00e2blage d&#8217;un bouton poussoir vers les GPIO du Raspberry pi en pull-down\" data-image-description=\"\" data-medium-file=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/tuto_control_gpio_led_bouton_pull_down_bb-300x243.png\" data-large-file=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/tuto_control_gpio_led_bouton_pull_down_bb.png\" loading=\"lazy\" class=\"wp-image-1377 size-full\" src=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/tuto_control_gpio_led_bouton_pull_down_bb.png\" alt=\"C\u00e2blage d'un bouton poussoir vers les GPIO du Raspberry pi en pull-down\" width=\"900\" height=\"728\" srcset=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/tuto_control_gpio_led_bouton_pull_down_bb.png 900w, http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/tuto_control_gpio_led_bouton_pull_down_bb-300x243.png 300w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/><\/a><p id=\"caption-attachment-1377\" class=\"wp-caption-text\">C\u00e2blage d&#8217;un bouton poussoir vers les GPIO du Raspberry pi en pull-down<\/p><\/div>\n<p>Vous pouvez \u00e9galement t\u00e9l\u00e9charger le <a class=\"media mediafile mf_pdf\" title=\"raspberry_pi:tuto_control_gpio_led_bouton_pull_down_bb.pdf (882 KB)\" href=\"http:\/\/nagashur.com\/wiki\/lib\/exe\/fetch.php?media=raspberry_pi:tuto_control_gpio_led_bouton_pull_down_bb.pdf\">sch\u00e9ma de c\u00e2blage d&#8217;un bouton poussoir avec une r\u00e9sistance de tirage pull-down en version PDF<\/a>.<\/p>\n<h2 id=\"code_minimal_en_c\" class=\"sectionedit5\">Code minimal en C<\/h2>\n<p>Le code en C sera relativement simple. Ici nous donnons un exemple bas\u00e9 sur une r\u00e9sistance de tirage (pull-up), mais il suffira d&#8217;inverser les valeurs logiques pour avoir le code pour une version rappel (pull-down).<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n#include &amp;lt;stdio.h&amp;gt;\r\n#include &amp;lt;wiringPi.h&amp;gt;\r\nint main(void)\r\n{\r\nint switchPin=0;\r\nif(wiringPiSetup()==-1)\r\n {return 0;}\r\n\/\/le port GPIO du bouton est configur\u00e9 en lecture\r\npinMode(switchPin,INPUT);\r\nint button=0;\r\nwhile(1)\r\n{\r\n \/\/on lit la valeur de la broche GPIO\r\n button=digitalRead(switchPin);\r\n if(button==0)\/\/Si un appui sur le bouton est d\u00e9tect\u00e9\r\n {\r\n \/\/on affiche un message\r\n printf(&quot;button pressed!\\n&quot;);\r\n \/\/cette boucle permet de gerer un appui continu\r\n while(button==0)\r\n {\r\n \/\/on relit la valeur \u00e0 chaque fois\r\n button=digitalRead(switchPin);\r\n delay(20);\/\/et on attend 20ms\r\n }\r\n }\r\n delay(20);\/\/on attend 20ms entre chaque lecture.\r\n}\r\n return 0;\r\n}\r\n<\/pre>\n<p>Vous pouvez \u00e9galement <a href=\"http:\/\/nagashur.com\/wiki\/doku.php?do=export_code&amp;id=raspberry_pi:gpio_entree&amp;codeblock=0\">t\u00e9l\u00e9charger le fichier source C du programme permettant de lire l&#8217;\u00e9tat du bouton en suivant ce lien<\/a>.<\/p>\n<p>On compile ensuite le code :<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\ngcc readButton.c -o readButton -lwiringPi\r\n<\/pre>\n<p>On peut alors ex\u00e9cuter le programme :<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo .\/readButton\r\n<\/pre>\n<p>L\u2019attente de 20 millisecondes (<strong><em>delay(20);<\/em><\/strong>) sert non seulement \u00e0 ne pas surcharger le CPU, mais \u00e9galement \u00e0 filtrer le rebond du bouton. Comme il s\u2019agit d\u2019un dispositif imparfait, sans cette attente, nous aurions une successions de changements d\u2019\u00e9tats (0-1-0-1-0-1 \u2026) lors des phases d\u2019appui et de rel\u00e2chement du bouton. Ce ph\u00e9nom\u00e8ne ne survient pas lorsque le bouton est maintenu enfonc\u00e9 ou lorsque l&#8217;on ne le touche pas, mais uniquement sur les transitions. La seconde boucle permet de ne consid\u00e9rer qu\u2019un seul appui tant que le bouton est maintenu enfonc\u00e9, sinon, nous aurions une succession d\u2019appuis, et un affichage toutes les 20ms tant que le bouton est maintenu enfonc\u00e9. Cela peut para\u00eetre superflu, mais sans cela, si vous appuyez fugitivement sur le bouton, mais tout de m\u00eame plus de 20ms, il y aurait au moins deux pressions de comptabilis\u00e9es.<\/p>\n<p>Cela s&#8217;appelle en anglais le <strong><em>debouncing<\/em><\/strong>. On peut \u00e9galement utiliser un condensateur pour att\u00e9nuer le rebond, et potentiellement ne pas avoir \u00e0 faire de <em><strong>debouncing<\/strong><\/em> logiciel.<\/p>\n<h2 id=\"code_utilisant_le_bouton_et_la_led_en_c\" class=\"sectionedit6\">Code utilisant le bouton et la LED en C<\/h2>\n<p>On peut maintenant r\u00e9utiliser la LED install\u00e9e pour cette fois ci changer l&#8217;\u00e9tat de celle ci selon les appuis. On obtient un code de ce genre :<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n#include &amp;lt;stdio.h&amp;gt;\r\n#include &amp;lt;wiringPi.h&amp;gt;\r\nint main(void)\r\n{\r\nint switchPin=0;\r\nint ledPin =7;\r\nif(wiringPiSetup()==-1)\r\n {return 0;}\r\n\r\n\/\/le port GPIO du bouton est configur\u00e9 en lecture\r\npinMode(switchPin,INPUT);\r\n\/\/le port GPIO de la LED est configur\u00e9 en ecriture\r\npinMode(ledPin,OUTPUT);\r\nint button=0;\r\nint ledState=0;\/\/\u00e9tat initial de la LED\r\ndigitalWrite(ledPin,ledState);\/\/on eteint la LED au d\u00e9part\r\nwhile(1)\r\n{\r\n \/\/on lit la valeur de la broche GPIO\r\n button=digitalRead(switchPin);\r\n if(button==0)\/\/Si un appui sur le bouton est d\u00e9tect\u00e9\r\n {\r\n \/\/on affiche un message\r\n printf(&quot;button pressed!\\n&quot;);\r\n if(ledState==0)\r\n {ledState=1;}\r\n else\r\n {ledState=0;}\r\n digitalWrite(ledPin,ledState);\/\/on applique le nouvel \u00e9tat de la LED\r\n \/\/cette boucle permet de gerer un appui continu\r\n while(button==0)\r\n {\r\n \/\/on relit la valeur \u00e0 chaque fois\r\n button=digitalRead(switchPin);\r\n delay(20);\/\/et on attend 20ms\r\n }\r\n }\r\n delay(20);\/\/on attend 20ms entre chaque lecture.\r\n}\r\nreturn 0;\r\n}\r\n\r\n<\/pre>\n<p>Vous pouvez \u00e9galement t\u00e9l\u00e9charger le <a href=\"http:\/\/nagashur.com\/wiki\/doku.php?do=export_code&amp;id=raspberry_pi:gpio_entree&amp;codeblock=3\">code C du programme permettant de lire le bouton pour changer l&#8217;\u00e9tat d&#8217;une LED en suivant ce lien<\/a>.<\/p>\n<\/div>\n<h2 id=\"code_minimal_en_python\" class=\"sectionedit7\">Code minimal en python<\/h2>\n<div class=\"level2\">\n<p>Voyons maintenant le code minimal en python :<\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\">\r\nimport time\r\nfrom RPi import GPIO\r\nGPIO.setmode(GPIO.BOARD)\r\nGPIO.setup(0, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)\r\nwhile True:\r\n inputval = GPIO.input(0)\r\n print inputval\r\n time.sleep(1)\r\n<\/pre>\n<p>Vous pouvez \u00e9galement t\u00e9l\u00e9charger le <a href=\"http:\/\/nagashur.com\/wiki\/doku.php?do=export_code&amp;id=raspberry_pi:gpio_entree&amp;codeblock=4\">code python minimal du programme permettant de lire le bouton en suivant ce lien<\/a>.<\/p>\n<p>On ex\u00e9cute le code par :<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">sudo python readButton.py<\/pre>\n<\/div>\n<div class=\"level2\">\n<h2 id=\"conclusions\" class=\"sectionedit8\">Conclusions<\/h2>\n<div class=\"level2\">\n<p>Il est donc possible d&#8217;utiliser un GPIO comme entr\u00e9e, pour lire des informations du monde ext\u00e9rieur. Ici, nous lisons des donn\u00e9es <a class=\"interwiki iw_wpfr\" title=\"http:\/\/fr.wikipedia.org\/wiki\/Num\u00e9rique\" href=\"http:\/\/fr.wikipedia.org\/wiki\/Num%C3%A9rique\">num\u00e9riques<\/a>. Il est toutefois possible d&#8217;<a class=\"wikilink1\" title=\"raspberry_pi:mcp3008_lecture_analogique\" href=\"http:\/\/nagashur.com\/blog\/2013\/01\/13\/lire-des-entrees-analogiques-sur-un-raspberry-avec-un-circuit-adc-le-mcp3008\/\">utiliser un convertisseur MCP3008 pour ajouter des entr\u00e9es analogiques au Raspberry pi (tutoriel sur ce site)\u00a0<\/a> et ainsi lire des donn\u00e9es <a class=\"interwiki iw_wpfr\" title=\"http:\/\/fr.wikipedia.org\/wiki\/Analogique\" href=\"http:\/\/fr.wikipedia.org\/wiki\/Analogique\">analogiques<\/a>.<\/p>\n<p>Il est primordial de ne pas envoyer de courant \u00e0 une tension sup\u00e9rieure \u00e0 3.3V aux GPIO sous peine de risquer d&#8217;endommager le\/les GPIO voir le Raspberry pi tout entier.<\/p>\n<p>On pourra se demander comment avons nous choisi la valeur de la r\u00e9sistance de tirage\/rappel. Il s&#8217;agit en fait de valeurs assez universelles dans ce types de montages. Si l&#8217;on ne sait pas quoi prendre, les 4.7 et 10K feront g\u00e9n\u00e9ralement l&#8217;affaire. Il est cependant possible d&#8217;aller plus loin en cherchant <a href=\"http:\/\/electronics.stackexchange.com\/questions\/23645\/how-do-i-calculate-the-required-value-for-a-pull-up-resistor\">les valeurs optimales de la r\u00e9sistance de tirage selon le circuit<\/a>.<\/p>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>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&#8217;objectif de ce tutoriel est de s&#8217;appuyer sur le tutoriel sur l&#8217;utilisation d&#8217;un GPIO en sortie pour contr\u00f4ler une [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":1368,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","jetpack_publicize_message":""},"categories":[10,140,168],"tags":[171,410,111,7,166,184,291,160,169,61,409,412,172,170,188,154,156,173,161],"jetpack_featured_media_url":"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2013\/01\/boutons_4750_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>Lire la valeur d&#039;un bouton connect\u00e9 aux GPIO du Raspberry Pi - Nagashur<\/title>\n<meta name=\"description\" content=\"Lecture bouton Raspberry pi : tutoriel de c\u00e2blage en pull-up\/pull down, explications g\u00e9n\u00e9rales et codes sources en C et en python.\" \/>\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\/2013\/01\/02\/lire-la-valeur-dun-bouton-connecte-aux-gpio-du-raspberry-pi\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Lire la valeur d&#039;un bouton connect\u00e9 aux GPIO du Raspberry Pi - Nagashur\" \/>\n<meta property=\"og:description\" content=\"Lecture bouton Raspberry pi : tutoriel de c\u00e2blage en pull-up\/pull down, explications g\u00e9n\u00e9rales et codes sources en C et en python.\" \/>\n<meta property=\"og:url\" content=\"http:\/\/nagashur.com\/blog\/2013\/01\/02\/lire-la-valeur-dun-bouton-connecte-aux-gpio-du-raspberry-pi\/\" \/>\n<meta property=\"og:site_name\" content=\"Nagashur\" \/>\n<meta property=\"article:published_time\" content=\"2013-01-02T04:04:26+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2015-09-03T16:37:25+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2013\/01\/boutons_4750_800px.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"351\" \/>\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\/2013\/01\/02\/lire-la-valeur-dun-bouton-connecte-aux-gpio-du-raspberry-pi\/#primaryimage\",\"inLanguage\":\"fr-FR\",\"url\":\"http:\/\/nagashur.com\/blog\/wp-content\/uploads\/2013\/01\/boutons_4750_800px.jpg\",\"width\":800,\"height\":351,\"caption\":\"boutons chrom\\u00e9s\"},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/nagashur.com\/blog\/2013\/01\/02\/lire-la-valeur-dun-bouton-connecte-aux-gpio-du-raspberry-pi\/#webpage\",\"url\":\"http:\/\/nagashur.com\/blog\/2013\/01\/02\/lire-la-valeur-dun-bouton-connecte-aux-gpio-du-raspberry-pi\/\",\"name\":\"Lire la valeur d'un bouton connect\\u00e9 aux GPIO du Raspberry Pi - Nagashur\",\"isPartOf\":{\"@id\":\"http:\/\/nagashur.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\/\/nagashur.com\/blog\/2013\/01\/02\/lire-la-valeur-dun-bouton-connecte-aux-gpio-du-raspberry-pi\/#primaryimage\"},\"datePublished\":\"2013-01-02T04:04:26+00:00\",\"dateModified\":\"2015-09-03T16:37:25+00:00\",\"author\":{\"@id\":\"http:\/\/nagashur.com\/blog\/#\/schema\/person\/11a329fa33df4e94444716624beb8186\"},\"description\":\"Lecture bouton Raspberry pi : tutoriel de c\\u00e2blage en pull-up\/pull down, explications g\\u00e9n\\u00e9rales et codes sources en C et en python.\",\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/nagashur.com\/blog\/2013\/01\/02\/lire-la-valeur-dun-bouton-connecte-aux-gpio-du-raspberry-pi\/\"]}]},{\"@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-8V","jetpack-related-posts":[{"id":543,"url":"http:\/\/nagashur.com\/blog\/2013\/01\/01\/controler-une-led-depuis-les-ports-gpio-du-raspberry-pi\/","url_meta":{"origin":553,"position":0},"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":921,"url":"http:\/\/nagashur.com\/blog\/2015\/04\/14\/tutoriels-raspberry-pi\/","url_meta":{"origin":553,"position":1},"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":653,"url":"http:\/\/nagashur.com\/blog\/2013\/03\/27\/ajouter-des-gpio-au-raspberry-pi-en-utilisant-une-puce-mcp23017-ou-23008\/","url_meta":{"origin":553,"position":2},"title":"Ajouter des GPIO au Raspberry Pi en utilisant une puce MCP23017 ou 23008","date":"27 mars 2013","format":false,"excerpt":"Si le nombre de GPIO disponibles sur le Raspberry Pi ne vous convient pas, pas d'inqui\u00e9tude, il est possible d'en rajouter. La puce\u00a0MCP23017 permet\u00a0d'ajouter 16 GPIO , et la puce\u00a0MCP23008 permet d'en rajouter 8. Dans les deux cas, ces puces se connectent au Raspberry Pi sur des GPIO \"sp\u00e9ciaux\",\u00a0d\u00e9di\u00e9s au\u2026","rel":"","context":"Dans &quot;composants&quot;","img":{"alt_text":"puce MCP23017, cr\u00e9dits photo Adafruit","src":"https:\/\/i1.wp.com\/nagashur.com\/blog\/wp-content\/uploads\/2013\/03\/MCP23017_adafruit.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":553,"position":3},"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":1401,"url":"http:\/\/nagashur.com\/blog\/2015\/08\/31\/ds3231-raspberry-pi-rtc-ajouter-une-horloge-temps-reel-i2c-alitest\/","url_meta":{"origin":553,"position":4},"title":"DS3231 Raspberry pi RTC : ajouter une horloge temps r\u00e9el I2C - Alitest","date":"31 ao\u00fbt 2015","format":false,"excerpt":"Le Raspberry pi ne dispose pas de module RTC (Real Time Clock, horloge en temps r\u00e9el), et ne peut donc pas garder une trace pr\u00e9cise du temps \u00e9coul\u00e9 sans avoir recours \u00e0 une synchronisation sur un serveur de temps (NTP). Cela n'est pas toujours possible, notamment pour des projets ou\u2026","rel":"","context":"Dans &quot;composants&quot;","img":{"alt_text":"DS3231 Raspberry pi RTC - pinout","src":"https:\/\/i0.wp.com\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/DS3231_bottom_4766.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":500,"url":"http:\/\/nagashur.com\/blog\/2013\/01\/05\/utilisation-dun-circuit-l293d-pour-commander-des-moteurs\/","url_meta":{"origin":553,"position":5},"title":"Utilisation d'un circuit L293D pour commander des moteurs","date":"5 janvier 2013","format":false,"excerpt":"Si l'on branche un moteur \u00e0 courant continu (DC Motor) \u00e0 une source de courant adapt\u00e9e, celui ci tournera. Si l'on veut inverser le sens de rotation, il suffit d'inverser le branchement. Cependant, inverser des branchements \"\u00e0 la main\" ne convient pas \u00e0 un robot. Nous verrons donc aujourd'hui comment\u00a0contr\u00f4ler\u00a0le\u2026","rel":"","context":"Dans &quot;\u00e9lectronique&quot;","img":{"alt_text":"L293D : contr\u00f4leur de moteurs","src":"https:\/\/i2.wp.com\/nagashur.com\/blog\/wp-content\/uploads\/2013\/01\/800px-L293D_Motor_Driver.jpg?resize=350%2C200","width":350,"height":200},"classes":[]}],"_links":{"self":[{"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/posts\/553"}],"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=553"}],"version-history":[{"count":0,"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/posts\/553\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/media\/1368"}],"wp:attachment":[{"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/media?parent=553"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/categories?post=553"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/tags?post=553"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}