まこと の ブログ

MaKoTo no burogu — Journal de bord…

Aller au contenu | Aller au menu | Aller à la recherche

Mot-clé - Raspbian

Fil des billets - Fil des commentaires

lundi, 30 décembre 2019

Une carte son pour le RaspberryPi Zero

  • Le modèle RaspberryPi Zero est une machine qui ne dispose pas d'une carte son intégrée.

Donc pas de fiche Jack ni d'amplificateur, impossible donc théoriquement d'écouter du son, si ce n'est par la sortie HDMI.

Et pourtant il a été prévu de permettre cette fonction, en activant la PWM des GPIO12 (pin 32) et GPIO13 (pin 33).
Il me semble qu'on peut plus ou moins choisir d'autres GPIO que celles-ci… Je vous laisse vérifier.

  • En éditant directement le fichier /boot/config.txt, activer le mode PMW Audio pour les GPIO concernés :
dtoverlay=pwm-2chan,pin=12,func=4,pin2=13,func2=4

Si on branche donc un Jack pour y connecter un casque sur par exemple GPIO13 + Masse pour le son Droit et GPIO12 + Masse pour le son Gauche, on peut alors écouter le morceau de musique qu'on aura choisi.

  • Ensuite il faudra filtrer ce signal un poil trop brute de numérique, afin de le lisser et le rendre plus analogique.
  • Reste à amplifier le signal, et dans ce cas les solutions ne manquent pas… Je propose ici un amplificateur stéréo à base de LM386 (le même utilisé sur mon WebRadioReveilWiFi

RpiZeroSoundCard.png

  • Liste des composants:
Nom                         Type et valeur          Boîtier

R1, R2                      Résistances 270Ω        SMD 1206
R6, R7, R8, R18             Résistances 150Ω        SMD 1206

C1, C2, C9, C15             Condensateurs 33nF      SMD 1206
C12, C18                    Condensateurs 100nF     SMD 1206
C3, C4, C8, C11, C14, C17   Condensateurs 10µF 16V  SMD 4x5,4 mm
C6, C13                     Condensateur 1µF 50V    SMD 4x5,4 mm
C10, C16                    Condensateur 470µF 16V  SMD 8x10,5 mm

RV1, RV2, RV3, RV4          Potentiomètre 10kΩ      TC33X-103G

U2, U3                      Ampli LM386             SMD  SSOP 8

Ressources :
http://www.tinkernut.com/2017/04/adding-audio-output-raspberry-pi-zero-tinkernut-workbench/
https://learn.adafruit.com/adding-basic-audio-ouput-to-raspberry-pi-zero/pi-zero-pwm-audio
https://learn.adafruit.com/adafruit-max98357-i2s-class-d-mono-amp/raspberry-pi-usage

dimanche, 23 septembre 2018

Bouton on/off Raspberry Pi, Version µContrôleur

  • Circuit et code modifié le 1er Décembre 2019, pour compatibilité avec le RPi Zero.

Comme je l'évoquais, je ne compte pas utiliser la version précédente du montage « power on/off » pour mon « Pi Hat », car le relais prendrait trop de place, j'ai donc travaillé sur cette nouvelle version à base d'un microcontrôleur Attiny85.

  • Voici donc le schéma de ce nouveau montage :

RpiOnOffAttiny85_V2.png

  • Et il faut s'assurer que le port série (TXD0, RXD0) soit bien actif, soit via « sudo raspi-config » ou en passant à 1 la ligne « enable_uart » du fichier « /boot/config.txt ».

  • Fonctionnement :

- Pour mettre en route le RPi, effectuer une pression sur SW1, la sortie PB0 de l'ATtiny85 est alors mise à l'état haut pour permettre, via le transistor 2N2222 qui envoie un état bas au transistor MOSFET, de faire passer le 5V au RPi.
Ici, comme pour le montage précédent, le signal TXD0 est exploité pour connaître l'état du RPi au moment où le bouton est pressé (état bas, car RPi éteint) .
- Pour éteindre le RPi, presser normalement le bouton SW1, ce qui enverra le signal à la sortie PB1 de passer brièvement à l'état haut, pour déclencher un arrêt propre de GNU/Linux via le GPIO21 du RPi, grâce au script Python3 ci-dessous.
Le pont diviseur que forment R11 et R12 permet de ne n'envoyer que 3,2V au GPIO, car rappelez-vous bien que le RPi fonctionne en 3,3V !!
- Une fois arrêté de cette manière, le signal TXD0 passe donc à l'état bas, l'état du GPIO ayant été mémorisé, un délai est octroyé pour couper l'énergie et donc 3 secondes après la dernière activité de la led verte du RPi, la sortie PB0 passe à l'état bas, le transistor MOSFET ne laisse plus passer le 5V au RPi.
- Presser le bouton SW1 plus de 3 secondes et le courant sera coupé brutalement, utile en cas de plantage du RPi
- Ce montage gère le reboot. Par contre si on utilise un sudo poweroff sur le RPi, le courant ne sera pas coupé automatiquement comme avec le relay du montage précédent. Il faudra alors presser SW1 plus de 3 secondes.

Lire la suite...

mardi, 21 août 2018

Plaquette Rpi RPIO

  • J'utilisais jusqu’à présent la petite plaquette aide mémoire bien pratique « Raspin’s » du camarade idleman et depuis le passage au Rpi2 puis 3 puis Zero, l'équivalent pour le modèle 40 pins me manque beaucoup.

Alors j'ai vu qu'il en existait deux ou trois modèles, et même des trucs en dur type plaquette epoxy comme chez adafruit, mais je ne les trouvais pas à mon goût, soit il manquait des indications, soit c’était pas très clair, soit le look ne me plaisait pas…

  • Devinez quoi… Bah j'en ai fait une, avec quelques indications supplémentaires récoltées sur le site de la fondation, voilà :

Rpi_GPIO_Makoto1.png
Pour la concevoir, j'ai utilisé un tableur, (Libre Office Calc) puis suis passé sur Gimp pour quelques retouches.

  • Fichiers sources en pièces jointes à ce billet, dont une page A4 pour imprimer 8 plaquettes d'un coup.

Je conseille soit d'imprimer sur du papier épais, soit d'y coller une seconde feuille après impression.
Je ne suis pas infaillible, et vous n'êtes pas dispensé de vérifier qu'une coquille ne soit présente dans ce document, auquel cas vous pourriez bien pleurer en cas d'avarie sur votre Rpi…

20180821_193015.jpg
Précision, la distance entre le centre de la pin 1 et 39 (sur la page A4, entre les traits roses) doit faire 48,2 mm.

samedi, 18 août 2018

Un bouton power on/off pour le Raspberry Pi

Je suis en train de travailler à l’élaboration d'une carte de type « Pi Hat », équivalent du « Schield » pour Arduino, à savoir une carte qu'on enfiche par dessus le Raspberry.
Cette carte destinée au Rpi Zero, comportera une sortie Audio avec son amplificateur, deux connecteurs FCP pour connecter un écran LCD de type SPI - ILI9341, un connecteur pour déporter des GPIO sur une nappe de fil, et enfin un connecteur d'alimentation 5V avec un système de bouton On/Off sécurisé.
Tout ceci dans le but d’intégrer un montage dans une maquette…

Après beaucoup de temps perdu à tenter de comprendre ce dessin, en vue de bien sûr tester le concept, j'ai dû me résoudre à le redessiner complètement, en respectant les normes de représentation. Le voici : ( ouf ! )
RpiOnOffRelay.png

  • Fonctionnement :

- Pour mettre en route le Rpi, effectuer une pression longue sur le bouton SW1, afin de laisser le temps au signal TXD0 de passer à l'état haut et de faire coller le relais qui maintiens alors le Rpi alimenté en énergie.
- Pour éteindre le Rpi, le bouton SW1 étant connecté sur une sortie GPIO, il suffit de le presser normalement pour déclencher un arrêt propre de GNU/Linux grace au script Python3 ci-dessous.
- Une fois arrêté, le signal TXD0 passe donc à l'état bas et le relais se décolle alors, coupant l'énergie du Rpi.
- Le bouton SW2 sert à couper brutalement le courant, en cas de plantage du Rpi
- Ce montage ne gère pas le reboot. Effectuer un redémarrage éteindra donc le Raspberry, car durant le redémarrage TXD0 passe à l'état bas…
Édit : Passer C2 à 220µF et le relais attendra 5 secondes avant de couper , ça devrait permettre un reboot sans coupure.

  • Prérequis :
sudo apt-get install python3 RPi.GPIO
  • Écrire le script :
nano /home/pi/SoftOffButton.py

Avec dedans :

import RPi.GPIO as GPIO
import time
import os
import signal

print ("Soft Off Button")

GPIO.setmode(GPIO.BCM)
GPIO.setup(21, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)

def button_pressed(channel):
    print ("Boutton Off pressé")
    os.system("sudo shutdown now")

GPIO.add_event_detect(21, GPIO.RISING, callback=button_pressed, bouncetime=300)

signal.pause()

Pour démarrer automatiquement le programme python dés le démarrage du Raspberry, il faut créer un service :

sudo nano /etc/systemd/system/SoftOffButton.service

Avec dedans :

[Unit]
Description=Démarre le script SoftOffButton
[Service]
ExecStart=/usr/bin/python3 /home/pi/SoftOffButton.py
[Install]
WantedBy=multi-user.target

Installer le service au démarrage :

sudo systemctl --system daemon-reload
sudo systemctl enable SoftOffButton.service

Pour manipuler le service :

sudo systemctl status SoftOffButton.service
sudo systemctl start SoftOffButton.service

20180818_141218.jpg

  • Ce montage fonctionne très bien, et vu le temps passé dessus j'ai voulu le partager à ceux qui pourraient en avoir besoin.

Je ne compte pas l'utiliser pour mon « Pi Hat », car le relais prendrait trop de place, et j'envisage une solution plus souple et élégante à base de microcontrôleur.

  • Édition du 1 Décembre 2019 :

Je m'en suis rendu compte avec un RPi pi Zero, le port série (TXD0, RXD0) n'était pas actif par défaut, rendant alors le montage inopérant.
J'ai donc dû l'activer via « sudo raspi-config » ou en passant à 1 la ligne « enable_uart » du fichier « /boot/config.txt ».

- page 3 de 6 -