{"id":1371,"date":"2022-12-11T08:24:55","date_gmt":"2022-12-11T07:24:55","guid":{"rendered":"http:\/\/lesmrdtrucs.mataf35400.fr\/?page_id=1371"},"modified":"2023-07-08T18:57:14","modified_gmt":"2023-07-08T17:57:14","slug":"la-mrdwebradio","status":"publish","type":"page","link":"https:\/\/lesmrdtrucs.mataf35400.fr\/index.php\/la-mrdwebradio\/","title":{"rendered":"La MrdWebRadio\u200b"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1371\" class=\"elementor elementor-1371\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-212e51bf elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"212e51bf\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-5fbf38bd\" data-id=\"5fbf38bd\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-1a7fb9d0 elementor-widget elementor-widget-text-editor\" data-id=\"1a7fb9d0\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h3>MAJ:<\/h3>\n<ul>\n<li>La derni\u00e8re mise \u00e0 jour date du 08 juillet 2023.<\/li>\n<li>Elle utilise la distribution Debian Bullseye (d&rsquo;avril 2023).<br><\/li>\n<li>Elle met en \u0153uvre un afficheur e-paper WaveShare.<\/li>\n<\/ul>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-0af9742 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"0af9742\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-d409b17\" data-id=\"d409b17\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-f05a1da elementor-widget elementor-widget-text-editor\" data-id=\"f05a1da\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h3>Resources:<\/h3><ul><li><a href=\"https:\/\/ouiaremakers.com\/posts\/tutoriel-diy-veritable-radio-reveil-raspberry-avec-radio-internet-et-ecran-lcd\" target=\"_blank\" rel=\"noopener\">https:\/\/ouiaremakers.com\/posts\/tutoriel-diy-veritable-radio-reveil-raspberry-avec-radio-internet-et-ecran-lcd<\/a><\/li><li><a href=\"https:\/\/deusyss.developpez.com\/tutoriels\/RaspberryPi\/PythonEtLeGpio\/\" target=\"_blank\" rel=\"noopener\">https:\/\/deusyss.developpez.com\/tutoriels\/RaspberryPi\/PythonEtLeGpio\/<\/a><\/li><li><a href=\"https:\/\/www.waveshare.com\/wiki\/2.13inch_e-Paper_HAT\" target=\"_blank\" rel=\"noopener\">https:\/\/www.waveshare.com\/wiki\/2.13inch_e-Paper_HAT<\/a><\/li><\/ul><p>Il s\u2019agit d\u2019un projet pour Raspberry Pi visant \u00e0 cr\u00e9er une radio Internet destin\u00e9e \u00e0 un niveau de comp\u00e9tence interm\u00e9diaire. Une certaine familiarit\u00e9 avec l&rsquo;utilisation de Linux sera b\u00e9n\u00e9fique.<br \/>Raspberry Pi ex\u00e9cute le \u00ab\u00a0Music Player Daemon\u00a0\u00bb MPD pour recevoir et d\u00e9coder le flux de radio Internet.<br \/>ALSA fonctionnant sur le Raspberry Pi fournit le son via la prise Jack Socket ou la sortie HDMI.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-7ca619da elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7ca619da\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2671784e\" data-id=\"2671784e\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-565863c elementor-widget elementor-widget-text-editor\" data-id=\"565863c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h3>Objectifs:<\/h3><ul><li>Apprendre \u00e0 utiliser le mpd \/ mpc sur le Raspberry Pi<\/li><li>Faire une radio Internet cool<\/li><\/ul><h3>Pr\u00e9requis:<\/h3><ul><li>Raspberry Pi2<\/li><li>\u00c9cran SSD1306 128&#215;32 SPI OLED display de chez Adafruit (ou \u00e9quivalent)<\/li><li>Cl\u00e9 WiFi si le Raspberry n&rsquo;est pas \u00e9quip\u00e9 du WiFi<\/li><\/ul>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-607cc2e elementor-widget elementor-widget-text-editor\" data-id=\"607cc2e\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h3>Les programmes utilis\u00e9s sur le PC pour agir sur le Pi:<\/h3><ul><li style=\"list-style-type: none;\"><ul><li>Pour se connecter en mode console au Pi:<ul><li>Bitvise (pour se connecter &amp; transf\u00e9rer des fichiers entre le PC &amp; le Pi) Utilisateur: pi\u00a0\u00a0 Mdp: raspberry<\/li><\/ul><\/li><li>TightVnc (sur le PC) en option pour prendre la main sur le Pi. Mdp: MrdVnc<\/li><\/ul><\/li><\/ul>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4cc53e9 elementor-widget elementor-widget-text-editor\" data-id=\"4cc53e9\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h3>Etape 1: Cr\u00e9ation de la carte SD avec Raspberry Pi Imager<\/h3><div>Sans oublier les options (la roue dent\u00e9e)<\/div>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b0811fe elementor-widget elementor-widget-image\" data-id=\"b0811fe\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"682\" height=\"452\" src=\"https:\/\/lesmrdtrucs.mataf35400.fr\/wp-content\/uploads\/2023\/07\/Image1.png\" class=\"elementor-animation-grow attachment-full size-full wp-image-2054\" alt=\"\" srcset=\"https:\/\/lesmrdtrucs.mataf35400.fr\/wp-content\/uploads\/2023\/07\/Image1.png 682w, https:\/\/lesmrdtrucs.mataf35400.fr\/wp-content\/uploads\/2023\/07\/Image1-300x199.png 300w\" sizes=\"(max-width: 682px) 100vw, 682px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e981150 elementor-widget elementor-widget-image\" data-id=\"e981150\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"484\" height=\"698\" src=\"https:\/\/lesmrdtrucs.mataf35400.fr\/wp-content\/uploads\/2023\/07\/Image1-1.png\" class=\"elementor-animation-grow attachment-large size-large wp-image-2056\" alt=\"\" srcset=\"https:\/\/lesmrdtrucs.mataf35400.fr\/wp-content\/uploads\/2023\/07\/Image1-1.png 484w, https:\/\/lesmrdtrucs.mataf35400.fr\/wp-content\/uploads\/2023\/07\/Image1-1-208x300.png 208w\" sizes=\"(max-width: 484px) 100vw, 484px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2e177d4 elementor-widget elementor-widget-text-editor\" data-id=\"2e177d4\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Cette nouvelle fa\u00e7on de charger la carte SD permet d&rsquo;activer directement le SSH, VNC et le WiFi.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-181d2ec elementor-widget elementor-widget-text-editor\" data-id=\"181d2ec\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h3>\u00c9tape 2: Mise \u00e0 jour du Pi et de son heure<\/h3><p><b>Nota<\/b>: Toutes les instructions suivantes (celles commen\u00e7ant par $) sont \u00e0 saisir dans Bitvise. Elles sont \u00ab\u00a0collables\u00a0\u00bb (sans le $) par le presse-papier. Dans Bitvise, le coller se fait par le clic droit de la souris.<\/p><p><span style=\"color: #0000ff;\"><em>$ sudo apt-get update<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>$ sudo dpkg-reconfigure tzdata<\/em><\/span><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9f70dc6 elementor-widget elementor-widget-text-editor\" data-id=\"9f70dc6\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h3>\u00c9tape 3: Validation du SPI et du I2C sur le Pi<\/h3><p><span style=\"color: #0000ff;\"><em>$ sudo raspi-config<\/em><\/span><\/p><p>Cela lance l&rsquo;interface de configuration du Raspberry Pi.<\/p><ul><li>S\u00e9lectionner \u00ab Interface Options \u00bb puis valider<\/li><li>Sur le nouvel \u00e9cran, s\u00e9lectionnez \u00ab SPI \u00bb puis valider<\/li><li>R\u00e9pondre \u00ab Yes \u00bb \u00e0 toutes les questions qui suivent.<\/li><li>Faire de m\u00eame pour I2C.<\/li><\/ul><p>Il faut v\u00e9rifier que le SPI n&rsquo;est pas interdit:<br \/><span style=\"color: #0000ff;\"><em>$ sudo nano \/etc\/modprobe.d\/raspi-blacklist.conf<br \/><\/em><\/span>Si le fichier est vide, pas de probl\u00e8me. Sinon, ajouter un # devant la ligne blacklist spi-bcm2708 pour l&rsquo;inhiber.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a1af78f elementor-widget elementor-widget-text-editor\" data-id=\"a1af78f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h3>Validation de VNC sur le Pi<\/h3><div>Cette option est int\u00e9ressante si la version de l&rsquo;OS choisie comporte le bureau (desktop).<\/div><p><span style=\"color: #0000ff;\"><em>$ sudo raspi-config<\/em><\/span><\/p><p>Cela lance l&rsquo;interface de configuration du Raspberry Pi.<\/p><ul><li>S\u00e9lectionner \u00ab Interface Options \u00bb puis valider<\/li><li>Sur le nouvel \u00e9cran, s\u00e9lectionnez \u00ab VNC\u00bb puis valider<\/li><li>R\u00e9pondre \u00ab Yes \u00bb \u00e0 toutes les questions qui suivent.<\/li><\/ul>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-232b66f elementor-widget elementor-widget-text-editor\" data-id=\"232b66f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h3>\u00c9tape 4: Installation des packages<\/h3><p><em><span style=\"color: #0000ff;\">$ sudo apt-get install git<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">$ <\/span><\/em><em><span style=\"color: #0000ff;\">git clone https:\/\/github.com\/wiringpi\/wiringPi<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">$ cd wiringPi<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">$ .\/build<\/span><\/em><br \/><em><span style=\"color: #0000ff;\">$ cd ..<\/span><\/em><\/p><p><em><span style=\"color: #0000ff;\">$ pip install wiringpi2<\/span><\/em><\/p><p><em><span style=\"color: #0000ff;\">$ git clone https:\/\/github.com\/doceme\/py-spidev.git<\/span><\/em><em><span style=\"color: #0000ff;\"><br \/>$ cd py-spidev<br \/><\/span><\/em><\/p><p><em><span style=\"color: #0000ff;\">$ python setup.py build<\/span><\/em><br \/><span style=\"color: #333333;\"><span style=\"color: #0000ff;\"><em>$ sudo python setup.py install<\/em><\/span><\/span><br \/><em><span style=\"color: #0000ff;\">$ cd ..<\/span><\/em><\/p><p><em><span style=\"color: #0000ff;\">$ sudo apt-get install mpc mpd<\/span><\/em><\/p><p><em><span style=\"color: #0000ff;\">$ sudo -H pip3 install pyalsaaudio<\/span><\/em><em><span style=\"color: #0000ff;\"><br \/><\/span><\/em><\/p><p><em><span style=\"color: #0000ff;\">$ wget http:\/\/www.airspayce.com\/mikem\/bcm2835\/bcm2835-1.71.tar.gz<br \/>$ tar zxvf bcm2835-1.71.tar.gz<br \/>$ cd bcm2835-1.71\/<br \/>$ sudo .\/configure &amp;&amp; sudo make &amp;&amp; sudo make check &amp;&amp; sudo make install<\/span><\/em><\/p><p><em><span style=\"color: #0000ff;\">$ sudo apt-get install python3-pip<br \/>$ sudo apt-get install python3-pil<br \/>$ sudo apt-get install python3-numpy<br \/>$ sudo pip3 install RPi.GPIO<br \/>$ sudo pip3 install spidev<br \/><\/span><\/em><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-13bd156 elementor-widget elementor-widget-text-editor\" data-id=\"13bd156\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h3>Etape 5: Le programme Python.<\/h3><p>Celui qui suit, c&rsquo;est le Mrd prog qui est dans la Kty&rsquo;s Web Radio.<br \/>Il se situera dans le r\u00e9pertoire <span style=\"color: #0000ff;\"><em>\/home\/pi\/MrdWebRadio<\/em><\/span>.<\/p><p>Il faut donc d&rsquo;abord le cr\u00e9er et s&rsquo;y placer<br \/><span style=\"color: #0000ff;\"><em>$ md \/home\/pi\/MrdWebRadio<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>$ cd \/home\/pi\/MrdWebRadio<\/em><\/span><\/p><p>En utilisant nano ou votre \u00e9diteur favori, entrez le code Python suivant:<\/p><p><em><span style=\"color: #339966;\">#!\/usr\/bin\/python<\/span><\/em><br \/><em><span style=\"color: #339966;\"># -*- coding: utf-8 -*-<\/span><\/em><\/p><p><span style=\"color: #0000ff;\"><em>import sys<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>import os<\/em><\/span><\/p><p><span style=\"color: #0000ff;\"><em>AppDir = os.path.dirname(os.path.realpath(__file__))<\/em><\/span><br \/><span style=\"color: #339966;\"><em>#print (\u00ab\u00a0R\u00e9pertoire de l&rsquo;application: \u00a0\u00bb + AppDir)<\/em><\/span><\/p><p><span style=\"color: #0000ff;\"><em>picdir = os.path.join(AppDir, &lsquo;pic&rsquo;)<\/em><\/span><br \/><span style=\"color: #339966;\"><em>#print (picdir)<\/em><\/span><\/p><p><span style=\"color: #0000ff;\"><em>libdir = os.path.join(AppDir, &lsquo;lib&rsquo;)<\/em><\/span><br \/><span style=\"color: #339966;\"><em>#print (libdir)<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>if os.path.exists(libdir):<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0\u00a0 sys.path.append(libdir)<\/em><\/span><\/p><p><span style=\"color: #0000ff;\"><em>import time<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>from time import sleep, strftime <\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>from subprocess import call<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>import subprocess<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>import alsaaudio, sys, os<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>import RPi.GPIO as GPIO<\/em><\/span><\/p><p><span style=\"color: #0000ff;\"><em>import logging\u00a0\u00a0 \u00a0<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>import math<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>import traceback<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>from waveshare_OLED import OLED_0in96<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>#from waveshare_OLED import OLED_1in3<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>from PIL import Image,ImageDraw,ImageFont<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>logging.basicConfig(level=logging.DEBUG)<\/em><\/span><\/p><p><span style=\"color: #0000ff;\"><em>wifi=0<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>statusRadio=0<\/em><\/span><\/p><p><span style=\"color: #339966;\"><em># &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;Pour afficher la date en Francais<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>dic_jour={&lsquo;Mon&rsquo;:&rsquo;Lundi&rsquo;,&rsquo;Tue&rsquo;:&rsquo;Mardi&rsquo;,&rsquo;Wed&rsquo;:&rsquo;Mercredi&rsquo;,&rsquo;Thu&rsquo;:&rsquo;Jeudi&rsquo;,&rsquo;Fri&rsquo;:&rsquo;Vendredi&rsquo;,&rsquo;Sat&rsquo;:&rsquo;Samedi&rsquo;,&rsquo;Sun&rsquo;:&rsquo;Dimanche&rsquo;}<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>dic_mois={&lsquo;Jan&rsquo;:&rsquo;Janvier&rsquo;,&rsquo;Feb&rsquo;:&rsquo;Fevrier&rsquo;,&rsquo;Mar&rsquo;:&rsquo;Mars&rsquo;,&rsquo;Apr&rsquo;:&rsquo;Avril&rsquo;,&rsquo;May&rsquo;:&rsquo;Mai&rsquo;,&rsquo;Jun&rsquo;:&rsquo;Juin&rsquo;,&rsquo;Jul&rsquo;:&rsquo;Juillet&rsquo;,&rsquo;Aug&rsquo;:&rsquo;Aout&rsquo;,&rsquo;Sep&rsquo;:&rsquo;Septembre&rsquo;,&rsquo;Oct&rsquo;:&rsquo;Octobre&rsquo;,&rsquo;Nov&rsquo;:&rsquo;Novembre&rsquo;,&rsquo;Dec&rsquo;:&rsquo;Decembre&rsquo;}<\/em><\/span><\/p><p><span style=\"color: #339966;\"><em># &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;GPIO utilis\u00e9 pour les poids du rotacteur<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>A1 = 4<span style=\"color: #339966;\"> #7<\/span>\u00a0<\/em><\/span>\u00a0\u00a0 <span style=\"color: #339966;\"><em>#GPIO4<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>A2 = 17<\/em><\/span><em><span style=\"color: #339966;\"> #11<\/span><\/em>\u00a0\u00a0\u00a0 <span style=\"color: #339966;\"><em>#GPIO17<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>A3 = 27<\/em><\/span> <em><span style=\"color: #339966;\">#13<\/span><\/em>\u00a0\u00a0\u00a0 <span style=\"color: #339966;\"><em>#GPIO27<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>A4 = 22<\/em><\/span> <span style=\"color: #339966;\"><em>#15<\/em><\/span>\u00a0\u00a0\u00a0 <span style=\"color: #339966;\"><em>#GPIO22<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>GPIO.setmode(GPIO.BCM)<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>GPIO.setup(A1, GPIO.IN)<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>GPIO.setup(A2, GPIO.IN)<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>GPIO.setup(A3, GPIO.IN)<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>GPIO.setup(A4, GPIO.IN)<\/em><\/span><\/p><p><span style=\"color: #339966;\"><em>#try:<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>disp = OLED_0in96.OLED_0in96()<\/em><\/span><br \/><span style=\"color: #339966;\"><em>#disp = OLED_1in3.OLED_1in3()<\/em><\/span><\/p><p><span style=\"color: #0000ff;\"><em>logging.info(\u00ab\u00a0\\r 0.96inch OLED \u00ab\u00a0)<\/em><\/span><br \/><span style=\"color: #339966;\"><em># Initialize library.<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>disp.Init()<\/em><\/span><br \/><span style=\"color: #339966;\"><em># Clear display.<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>logging.info(\u00ab\u00a0clear display\u00a0\u00bb)<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>disp.clear()<\/em><\/span><\/p><p><span style=\"color: #339966;\"><em># &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;Chargement des stations dans MPC (WebRadio Player)<\/em><\/span><br \/><span style=\"color: #339966;\"><em># Elles sont dans le fichier \u00ab\u00a0MesFlux.cfg\u00a0\u00bb<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>MesFlux = open(AppDir + \u00ab\u00a0\/MesFlux.cfg\u00a0\u00bb, \u00ab\u00a0r\u00a0\u00bb)<\/em><\/span> <span style=\"color: #339966;\"><em># ouverture du fichier en lecture<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>MonContenu = MesFlux.read()\u00a0<\/em><\/span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"color: #339966;\"><em># Lecture du fichier complet<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>MesLignes = MonContenu.split(\u00ab\u00a0\\n\u00a0\u00bb)<\/em><\/span> <span style=\"color: #339966;\"><em># separation en lignes (une par station)<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>LibelleStations=[]\u00a0\u00a0<\/em><\/span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"color: #339966;\"><em># Creation d&rsquo;une liste vide de nom de stations<\/em><\/span><\/p><p><span style=\"color: #0000ff;\"><em>os.system(\u00ab\u00a0mpc stop\u00a0\u00bb) <\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>os.system(\u00ab\u00a0mpc clear\u00a0\u00bb) <\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>os.system(\u00ab\u00a0mpc volume 100\u00a0\u00bb)<\/em><\/span><\/p><p><span style=\"color: #0000ff;\"><em>for i in MesLignes:<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0\u00a0 MesElements = i.split(\u00ab\u00a0\\t\u00a0\u00bb)\u00a0<\/em><\/span>\u00a0\u00a0 <span style=\"color: #339966;\"><em># S\u00e9paration des lignes en champs (separes par des tab)<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0\u00a0 LibelleStations.append (MesElements[1])<\/em><\/span> <span style=\"color: #339966;\"><em># Ajout des noms des stations dans la liste<\/em><\/span><br \/>\u00a0\u00a0<span style=\"color: #0000ff;\"><em>\u00a0 os.system(\u00ab\u00a0mpc add \u00ab\u00a0+\u00a0 MesElements[2])\u00a0<\/em><\/span><span style=\"color: #339966;\"><em> # Chargement des radios dans MPC<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0\u00a0 print (\u00ab\u00a0mpc add \u00ab\u00a0+\u00a0 MesElements[2])<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>MemStation=0<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>MaStation=0<\/em><\/span><\/p><p><span style=\"color: #0000ff;\"><em>def getRotacteurPosition():<\/em><\/span> <span style=\"color: #339966;\"><em># Recuperation de la position du rotacteur (Codage binaire vers les entrees Bit0 &#8212; Bit3)\u00a0 \u00a0<\/em><\/span><br \/>\u00a0\u00a0 \u00a0<span style=\"color: #0000ff;\"><em>CodageStations=0<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0if GPIO.input(A1):<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 CodageStations=2**0<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0if GPIO.input(A2):<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 CodageStations=CodageStations+2**1<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0if GPIO.input(A3):<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 CodageStations=CodageStations+2**2<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0if GPIO.input(A4):<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 CodageStations=CodageStations+2**3<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0if CodageStations==0:<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 CodageStations=7<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0if CodageStations&gt;10:<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 CodageStations=7<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0return CodageStations<\/em><\/span><\/p><p><span style=\"color: #0000ff;\"><em>def clock():<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0\u00a0 image1 = Image.new(&lsquo;1&rsquo;, (disp.width, disp.height), \u00ab\u00a0WHITE\u00a0\u00bb)<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0\u00a0 draw = ImageDraw.Draw(image1)<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0\u00a0 font1 = ImageFont.truetype(os.path.join(picdir, &lsquo;Font.ttc&rsquo;), 24)<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0\u00a0 font2 = ImageFont.truetype(os.path.join(picdir, &lsquo;Font.ttc&rsquo;), 25)<\/em><\/span><br \/>\u00a0\u00a0\u00a0 <span style=\"color: #339966;\"><em>#logging.info (\u00ab\u00a0***draw text\u00a0\u00bb)<\/em><\/span><\/p><p>\u00a0\u00a0\u00a0<span style=\"color: #0000ff;\"><em> StrStation = \u00ab\u00a0St.\u00a0\u00bb + \u00ab\u00a0%02d\u00a0\u00bb % MaStation<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0\u00a0 StrStation = \u00ab\u00a0%02d\u00a0\u00bb % MaStation<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0\u00a0 draw.text((0,0),time.strftime(\u00ab\u00a0%H:%M:%S\u00a0\u00bb, time.localtime())+\u00a0\u00bb\u00a0 \u00ab\u00a0+StrStation, font = font1, fill = 0)<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0\u00a0 draw.text((0,35),str(LibelleStations[MaStation-1]), font = font2, fill = 0)<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0\u00a0 image11 = image1.rotate(0) <\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0\u00a0 disp.ShowImage(disp.getbuffer(image11))<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>while 1:<\/em> <\/span><span style=\"color: #339966;\"><em>#Boucle infinie<\/em><\/span><br \/>\u00a0\u00a0 <span style=\"color: #0000ff;\"><em>\u00a0MaStation=getRotacteurPosition()<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0if MemStation != MaStation:<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 clock()<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 sleep(.05)<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 MaStation=getRotacteurPosition()<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 print (\u00ab\u00a0CodageStations = \u00a0\u00bb + str(MaStation))<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 os.system(\u00ab\u00a0mpc play \u00a0\u00bb + str(MaStation))<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0clock()<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0MemStation = MaStation<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>\u00a0\u00a0 \u00a0sleep(.8)<\/em><\/span><\/p><p>Une fois saisi, enregistrez-le (Ctrl+o) en tant que radio.py, et sortez de nano (Ctrl+x).<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bd12da3 elementor-widget elementor-widget-text-editor\" data-id=\"bd12da3\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><span style=\"color: #333333;\">Ce Mrd prog utilise un autre fichier (MesFlux.cfg) comme playlist. Il faut donc le cr\u00e9er aussi (toujours avec nano, par exemple, et t<\/span>oujours dans le r\u00e9pertoire <span style=\"color: #0000ff;\"><em>\/home\/pi\/MrdWebRadio<\/em><\/span>,<span style=\"color: #333333;\">):<\/span><br \/><span style=\"color: #0000ff;\"><em>1 Cherie FM http:\/\/cdn.nrjaudio.fm\/audio1\/fr\/30201\/mp3_128.mp3?origine=fluxradios<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>2 Nostalgie http:\/\/cdn.nrjaudio.fm\/audio1\/fr\/30601\/mp3_128.mp3?origine=fluxradios<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>3 France Bleue http:\/\/direct.francebleu.fr\/live\/fbhautenormandie-midfi.mp3<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>4 Fip http:\/\/direct.fipradio.fr\/live\/fip-midfi.mp3<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>5 Skyrock http:\/\/icecast.skyrock.net\/s\/natio_mp3_128k<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>6 Radio Classique http:\/\/radioclassique.ice.infomaniak.ch\/radioclassique-high.mp3<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>7 Lyric FM http:\/\/av.rasset.ie\/av\/live\/radio\/lyric.m3u<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>8 Rtl 2 http:\/\/streaming.radio.rtl2.fr\/rtl2-1-44-128<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>9 Mfm http:\/\/mfm.ice.infomaniak.ch\/mfm-128.mp3<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>10 Radio Caroline http:\/\/sc6.radiocaroline.net:8040<br \/><\/em><\/span><span style=\"color: #333333;\">Une fois saisi, enregistrez-le (Ctrl+o) en tant que MesFlux.cfg<\/span>, et sortez de nano (Ctrl+x).<\/p><p><span style=\"color: #333333;\">Lancez le prog radio.py:<\/span><br \/><span style=\"color: #0000ff;\"><em>$ python radio.py<\/em><\/span><\/p><p><span style=\"color: #333333;\">Vous devriez maintenant pouvoir changer de station \u00e0 partir du rotacteur et voir la station s\u00e9lectionn\u00e9e sur l&rsquo;\u00e9cran LCD.<\/span><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-4f20a063 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"4f20a063\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-28123790\" data-id=\"28123790\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-47ca5a2e elementor-widget elementor-widget-text-editor\" data-id=\"47ca5a2e\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h3><span style=\"color: #00ff00;\">\u00c9tape 7: D\u00e9marrez le programme Python d\u00e8s le boot du Pi<\/span><\/h3><p><span style=\"color: #0000ff;\"><span style=\"color: #333333;\">Trouv\u00e9 sur le site:<b> <\/b><\/span><a style=\"color: #0000ff;\" href=\"https:\/\/www.raspberrypi-france.fr\/lancer-un-script-python-au-demarrage-du-raspberry-pi\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.raspberrypi-france.fr\/lancer-un-script-python-au-demarrage-du-raspberry-pi\/<\/a><em><br \/><\/em><\/span><\/p><ul><li>Cr\u00e9er un script shell \u00e0 ex\u00e9cuter<\/li><\/ul><p style=\"padding-left: 40px;\"><span style=\"color: #0000ff;\"><em>$ cd \/home\/pi<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>$ nano lancement.sh<br \/><\/em><\/span>Dans le fichier cr\u00e9\u00e9, \u00e9crire les commandes pour ex\u00e9cuter votre script Python :<br \/><span style=\"color: #0000ff;\"><em>$ cd \/home\/pi\/MrdWebRadio<\/em><\/span><br \/><span style=\"color: #0000ff;\"><em>$ python3 radio.py &amp;<br \/><\/em><\/span>Une fois saisi, enregistrez-le (Ctrl+o) en tant que MesFlux.cfg, et sortez de nano (Ctrl+x).<\/p><ul><li>Rendre le fichier ex\u00e9cutable<\/li><\/ul><p style=\"padding-left: 40px;\">Avant de pouvoir utiliser ce fichier shell, il faut le rendre ex\u00e9cutable :<br \/><span style=\"color: #0000ff;\"><em>$ chmod 755 lancement.sh<br \/><\/em><\/span>Testez votre fichier et v\u00e9rifiez que votre script python se lance avec la commande :<br \/><span style=\"color: #0000ff;\"><em>$ sh lancement.sh<br \/><\/em><\/span>Si tout fonctionne, vous pouvez passer \u00e0 l\u2019\u00e9tape suivante.<\/p><ul><li>Cr\u00e9er un fichier de logs<\/li><\/ul><p style=\"padding-left: 40px;\">Dans votre r\u00e9pertoire utilisateur, cr\u00e9ez un dossier \u201clogs\u201d qui contiendra les diff\u00e9rents fichiers logs de vos programmes. Ils serviront \u00e0 avoir une trace \u00e9crite en cas d\u2019erreur de votre programme.<br \/><span style=\"color: #0000ff;\"><em>$ mkdir \/home\/pi\/logs<\/em><\/span><\/p><ul><li>Ajouter dans le crontab<\/li><\/ul><p style=\"padding-left: 40px;\">Crontab est un processus qui permet d\u2019ex\u00e9cuter des scripts en t\u00e2che de fond. Il va ex\u00e9cuter des scripts et commandes \u00e0 des heures pr\u00e9cises ou lors d\u2019\u00e9v\u00e8nements pr\u00e9cis.<br \/>Pour ajouter une nouvelle commande dans crontab :<br \/><span style=\"color: #0000ff;\"><em>$ sudo crontab -e<br \/><\/em><\/span>En bas du fichier, ajoutez la ligne :<br \/><span style=\"color: #0000ff;\"><em>@reboot sh \/home\/pi\/lancement.sh &gt; \/home\/pi\/logs\/log.txt 2&gt;&amp;1<br \/><\/em><\/span>Cette ligne va permettre d\u2019effectuer la commande \u201csh \/home\/pi\/lancement.sh\u201d lors du d\u00e9marrage du Raspberry Pi, et enregistrera les messages d\u2019erreur et logs dans le fichier \u201c\/home\/pi\/logs\/log.txt\u201d.<br \/>Sauvegardez avec le raccourci Control + X.<\/p><ul><li>V\u00e9rifiez que tout fonctionne<\/li><\/ul><p style=\"padding-left: 40px;\">Red\u00e9marrez votre Raspberry Pi<br \/><span style=\"color: #0000ff;\"><em>$ reboot<br \/><\/em><\/span>Si votre programme ne s\u2019est pas lanc\u00e9 ou qu\u2019il y a un probl\u00e8me, regardez alors dans le fichier de logs les erreurs qui sont survenues.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-1f187bec elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"1f187bec\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2a50cee8\" data-id=\"2a50cee8\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-403b67b4 elementor-widget elementor-widget-heading\" data-id=\"403b67b4\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Le sch\u00e9ma de la s\u00e9lection des stations:<\/h3>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-19d006bd elementor-widget elementor-widget-image\" data-id=\"19d006bd\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"710\" height=\"380\" src=\"https:\/\/lesmrdtrucs.mataf35400.fr\/wp-content\/uploads\/2022\/12\/Image15.png\" class=\"elementor-animation-grow attachment-full size-full wp-image-1381\" alt=\"\" srcset=\"https:\/\/lesmrdtrucs.mataf35400.fr\/wp-content\/uploads\/2022\/12\/Image15.png 710w, https:\/\/lesmrdtrucs.mataf35400.fr\/wp-content\/uploads\/2022\/12\/Image15-300x161.png 300w\" sizes=\"(max-width: 710px) 100vw, 710px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-8b7346e elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"8b7346e\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-b5c3956\" data-id=\"b5c3956\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a2bdf8e elementor-widget elementor-widget-heading\" data-id=\"a2bdf8e\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">La distribution des GPIO:<\/h3>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b51dadb elementor-widget elementor-widget-image\" data-id=\"b51dadb\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"683\" height=\"437\" src=\"https:\/\/lesmrdtrucs.mataf35400.fr\/wp-content\/uploads\/2023\/07\/Image1-2.png\" class=\"elementor-animation-grow attachment-full size-full wp-image-2077\" alt=\"\" srcset=\"https:\/\/lesmrdtrucs.mataf35400.fr\/wp-content\/uploads\/2023\/07\/Image1-2.png 683w, https:\/\/lesmrdtrucs.mataf35400.fr\/wp-content\/uploads\/2023\/07\/Image1-2-300x192.png 300w\" sizes=\"(max-width: 683px) 100vw, 683px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>MAJ: La derni\u00e8re mise \u00e0 jour date du 08 juillet 2023. Elle utilise la distribution Debian Bullseye (d&rsquo;avril 2023). Elle met en \u0153uvre un afficheur e-paper WaveShare. Resources: https:\/\/ouiaremakers.com\/posts\/tutoriel-diy-veritable-radio-reveil-raspberry-avec-radio-internet-et-ecran-lcd https:\/\/deusyss.developpez.com\/tutoriels\/RaspberryPi\/PythonEtLeGpio\/ https:\/\/www.waveshare.com\/wiki\/2.13inch_e-Paper_HAT Il s\u2019agit d\u2019un projet pour Raspberry Pi visant \u00e0 cr\u00e9er une radio Internet destin\u00e9e \u00e0 un niveau de comp\u00e9tence interm\u00e9diaire. Une certaine familiarit\u00e9 avec [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"ocean_post_layout":"","ocean_both_sidebars_style":"","ocean_both_sidebars_content_width":0,"ocean_both_sidebars_sidebars_width":0,"ocean_sidebar":"0","ocean_second_sidebar":"0","ocean_disable_margins":"enable","ocean_add_body_class":"","ocean_shortcode_before_top_bar":"","ocean_shortcode_after_top_bar":"","ocean_shortcode_before_header":"","ocean_shortcode_after_header":"","ocean_has_shortcode":"","ocean_shortcode_after_title":"","ocean_shortcode_before_footer_widgets":"","ocean_shortcode_after_footer_widgets":"","ocean_shortcode_before_footer_bottom":"","ocean_shortcode_after_footer_bottom":"","ocean_display_top_bar":"default","ocean_display_header":"default","ocean_header_style":"","ocean_center_header_left_menu":"0","ocean_custom_header_template":"0","ocean_custom_logo":0,"ocean_custom_retina_logo":0,"ocean_custom_logo_max_width":0,"ocean_custom_logo_tablet_max_width":0,"ocean_custom_logo_mobile_max_width":0,"ocean_custom_logo_max_height":0,"ocean_custom_logo_tablet_max_height":0,"ocean_custom_logo_mobile_max_height":0,"ocean_header_custom_menu":"0","ocean_menu_typo_font_family":"0","ocean_menu_typo_font_subset":"","ocean_menu_typo_font_size":0,"ocean_menu_typo_font_size_tablet":0,"ocean_menu_typo_font_size_mobile":0,"ocean_menu_typo_font_size_unit":"px","ocean_menu_typo_font_weight":"","ocean_menu_typo_font_weight_tablet":"","ocean_menu_typo_font_weight_mobile":"","ocean_menu_typo_transform":"","ocean_menu_typo_transform_tablet":"","ocean_menu_typo_transform_mobile":"","ocean_menu_typo_line_height":0,"ocean_menu_typo_line_height_tablet":0,"ocean_menu_typo_line_height_mobile":0,"ocean_menu_typo_line_height_unit":"","ocean_menu_typo_spacing":0,"ocean_menu_typo_spacing_tablet":0,"ocean_menu_typo_spacing_mobile":0,"ocean_menu_typo_spacing_unit":"","ocean_menu_link_color":"","ocean_menu_link_color_hover":"","ocean_menu_link_color_active":"","ocean_menu_link_background":"","ocean_menu_link_hover_background":"","ocean_menu_link_active_background":"","ocean_menu_social_links_bg":"","ocean_menu_social_hover_links_bg":"","ocean_menu_social_links_color":"","ocean_menu_social_hover_links_color":"","ocean_disable_title":"default","ocean_disable_heading":"default","ocean_post_title":"","ocean_post_subheading":"","ocean_post_title_style":"","ocean_post_title_background_color":"","ocean_post_title_background":0,"ocean_post_title_bg_image_position":"","ocean_post_title_bg_image_attachment":"","ocean_post_title_bg_image_repeat":"","ocean_post_title_bg_image_size":"","ocean_post_title_height":0,"ocean_post_title_bg_overlay":0.5,"ocean_post_title_bg_overlay_color":"","ocean_disable_breadcrumbs":"default","ocean_breadcrumbs_color":"","ocean_breadcrumbs_separator_color":"","ocean_breadcrumbs_links_color":"","ocean_breadcrumbs_links_hover_color":"","ocean_display_footer_widgets":"default","ocean_display_footer_bottom":"default","ocean_custom_footer_template":"0","footnotes":""},"class_list":["post-1371","page","type-page","status-publish","hentry","entry"],"_links":{"self":[{"href":"https:\/\/lesmrdtrucs.mataf35400.fr\/index.php\/wp-json\/wp\/v2\/pages\/1371","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lesmrdtrucs.mataf35400.fr\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/lesmrdtrucs.mataf35400.fr\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/lesmrdtrucs.mataf35400.fr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lesmrdtrucs.mataf35400.fr\/index.php\/wp-json\/wp\/v2\/comments?post=1371"}],"version-history":[{"count":52,"href":"https:\/\/lesmrdtrucs.mataf35400.fr\/index.php\/wp-json\/wp\/v2\/pages\/1371\/revisions"}],"predecessor-version":[{"id":2102,"href":"https:\/\/lesmrdtrucs.mataf35400.fr\/index.php\/wp-json\/wp\/v2\/pages\/1371\/revisions\/2102"}],"wp:attachment":[{"href":"https:\/\/lesmrdtrucs.mataf35400.fr\/index.php\/wp-json\/wp\/v2\/media?parent=1371"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}