Archives par étiquette : raspbian

Effaroucheur à oiseaux sur Raspberry Pi

La saison de la chasse à neuneus est de retour, voici venu le temps de tir dans les champs, la chasse à ces dangereux volatiles, les pigeons par exemple, une espèce sauvagement invasive qu’il ne faut surtout pas hésiter à détruite jusqu’au bout 😉

Si vous aussi les nuisances sonores de ces intellectuels à fusils vous brouillent l’écoute, voici une solution basée sur un simple Raspberry Pi en python 3 :

import pygame
import time
import random
import paho.mqtt.client as mqtt
from datetime import datetime

# Initialisation du mixer de pygame
pygame.mixer.init()

# Liste des fichiers audio
audio_files = ["faucon.mp3", "aigle.mp3", "buse.mp3"]

# Variables de contrôle
mqtt_broker = "iot.tonserveur.fr"
mqtt_port = 1883
mqtt_topic = "/raspibuse"
mqtt_username = "ton_login"
mqtt_password = "ton_mot_de_passe"

# État du script (activé/désactivé)
script_active = False

# Jouer le son de démarrage une seule fois
def jouer_son_demarrage():
    print("🎵 Lecture du son de démarrage : buse.mp3")
    pygame.mixer.music.load("buse.mp3")
    pygame.mixer.music.play()

# Fonction de lecture audio
def jouer_audio():
    global script_active

    while True:
        if script_active:
            fichier_audio = random.choice(audio_files)
            pygame.mixer.music.load(fichier_audio)
            print(f"Lecture de : {fichier_audio}")

            pygame.mixer.music.play()

            while pygame.mixer.music.get_busy():
                pygame.time.Clock().tick(10)

            print("Lecture terminée à :", datetime.now().strftime("%H:%M:%S"))

            # Pause aléatoire entre 20 et 120 secondes
            pause = random.randint(20, 120)
            print(f"Pause de {pause} secondes...\n")
            time.sleep(pause)
        else:
            time.sleep(1)

# Callback de connexion MQTT
def on_connect(client, userdata, flags, rc):
    if rc == 0:
        print("✅ Connexion MQTT réussie")
        client.subscribe(mqtt_topic)
    else:
        print(f"⚠ Échec de la connexion MQTT, code {rc}")

# Callback de réception d'un message MQTT
def on_message(client, userdata, msg):
    global script_active

    message = msg.payload.decode("utf-8").strip()
    print(f"📩 Message reçu: {message}")

    if message.upper() == "ON":
        script_active = True
        print("🔊 Activation du script")
    elif message.upper() == "OFF":
        script_active = False
        pygame.mixer.music.stop()
        print("🔇 Désactivation du script")

# Jouer le son de d  marrage
jouer_son_demarrage()

# Configuration du client MQTT
client = mqtt.Client()
client.username_pw_set(mqtt_username, mqtt_password)
client.on_connect = on_connect
client.on_message = on_message

# Connexion au broker MQTT
client.connect(mqtt_broker, mqtt_port, 60)
client.loop_start()

# Démarrage du script
jouer_audio()

Le script va lancer au choix 3 sons : faucon (pas ceux avec les fusils qui sont des vrais, ne confondez pas), buse, et aigle. Vous pouvez choisir une pause entre 20 et 120 secondes, aléatoire.

Venez ajouter sur la sortie audio du Pi un amplificateur audio à moins de 40 € sur Amazon :

et associez le à un haut-parleur étanche et directif, toujours sur Amazon, dans les 20 € :

Bonne nouvelle, vous allez pouvoir activer l’effaroucheur via un serveur MQTT, cf le script, en envoyant /raspibuse ON ou OFF selon vos besoins. Pratique pour l’activer à distance si besoin.

Je ne détaille volontairement pas l’installation des librairies Python et tous les détails, au besoin Google ou ChatGPT pourront vous aider sur les commandes à utiliser.

Box Android X96 sous Linux

màj le 17 Octobre 2022

Les p’tites box android X96 Mini sont parfaitement capables de fonctionner sous Linux, mais cela suppose quelques modifications avec les nouvelles versions disposant d’un hardware très légèrement modifié.

Commencez par charger l’image ISO sur https://github.com/ophub/amlogic-s9xxx-armbian/releases  en ne prenant qu’un nom contenant S905W surtout, le nom de votre CPU.

Flashez l’image sur une carte micro-SD de 16 Go, je ne vous indiquerai pas la marche à suivre, Google ne manque pas de tutos. J’utilise ici le Raspberry Pi Imager, simplissime sous Ubuntu.

Insérez la carte sur votre ordinateur, j’utiliserai ici toujours Linux pour pouvoir modifier sans soucis les fichiers d’une carte formatée en ext4 : vous obtenez BOOT et ROOTFS.

Allez dans BOOT/dtb/amlogic/, puis copiez le fichier meson-gxl-s905w-tx3-mini.dtb sur votre ordinateur, répertoire de votre choix.

En mode terminal, sur votre ordinateur, dirigez vous dans le répertoire où se trouve le fichier dtb puis installez :

sudo apt-get install device-tree-compiler

puis décompilons notre fichier dtb :

dtc -I dtb -O dts meson-gxl-s905w-tx3-mini.dtb -o tmp.dts

Editons le fichier tmp.dts avec nano par exemple, et allons dans la section mmc@74000. Vous y trouverez une ligne max-frequency qu’il faudra modifier avec ce qui suit :

max-frequency = < 0x2faf080>;

Cette modification change la fréquence de la mémoire emmc présente sur les nouvelles versions X96, tout simplement. Sauvegardez le fichier tmp.dts et nous allons désormais le re-compiler, avec le nom meson-gxl-s905w-p281 d’origine :

dtc -I dts -O dtb -o meson-gxl-s905w-tx3-mini.dtb tmp.dts

Simple non ? Vous pouvez effacer tmp.dts de votre ordinateur désormais.

Copiez maintenant votre meson-gxl-s905w-tx3-mini.dtb sur la carte micro-SD, toujours dans BOOT/dtb/amlogic/.

Nous allons maintenant indiquer au système de démarrer sur la bonne configuration en allant éditer dans BOOT/extlinux/ le fichier extlinux.conf. Voici le contenu que vous devez avoir :

LABEL Armbian
LINUX /zImage
INITRD /uInitrd

# rk-3399
#FDT /dtb/rockchip/rk3399-rock-pi-4.dtb
#FDT /dtb/rockchip/rk3399-nanopc-t4.dtb
#FDT /dtb/rockchip/rk3399-roc-pc-mezzanine.dtb
#APPEND root=LABEL=ROOTFS rootflags=data=writeback rw console=uart8250,mmio32,0xff1a0000 console=tty0 no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0

# rk-3328
#FDT /dtb/rockchip/rk3328-roc-pc.dtb
#FDT /dtb/rockchip/rk3328-box-trn9.dtb
#FDT /dtb/rockchip/rk3328-box.dtb
#APPEND root=LABEL=ROOTFS rootflags=data=writeback rw console=uart8250,mmio32,0xff130000 console=tty0 no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0

# aw h6
#FDT /dtb/allwinner/sun50i-h6-tanix-tx6.dtb
#APPEND root=LABEL=ROOTFS rootflags=data=writeback rw console=ttyS0,115200 console=tty0 no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 video=HDMI-A-1:e
#APPEND root=LABEL=ROOTFS rootflags=data=writeback rw console=ttyS0,115200 console=tty0 no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 mem=2048M video=HDMI-A-1:e

# aml s9xxx
#FDT /dtb/amlogic/meson-gxbb-p200.dtb
FDT /dtb/amlogic/meson-gxl-s905w-tx3-mini.dtb
#FDT /dtb/amlogic/meson-gxm-q200.dtb
#FDT /dtb/amlogic/meson-g12a-x96-max.dtb
#FDT /dtb/amlogic/meson-g12b-odroid-n2.dtb
APPEND root=LABEL=ROOTFS rootflags=data=writeback rw console=ttyAML0,115200n8 console=tty0 no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0

Insérez maintenant la carte sur votre X96 Mini. Avant de mettre sous tension, insérez un cure-dent dans la prise AV : il y a au fond un tout petit bouton, fragile, qu’il vous faut presser, et en maintenant cette pression, insérez la fiche d’alimentation.
L’écran va s’activer, puis relachez le bouton : vous démarrez alors sur la carte micro-SD pour le moment et pourrez vous connecter en ssh :

ssh root@adresseIP

Le mot de passe par défaut est 1234, simple non ? L’adresse IP sera celle attribuée au X96, je vous laisse chercher sur votre réseau, votre box.
Créez alors un nouvel utilisateur « root », j’ai mis de mon coté le login « pi », tellement utilisé ici sur les Raspberry Pi.
Une fois le nouvel utilisateur créé, passez en root et lancez l’installation sur l’emmc :

sudo su
armbian-install

Sélectionnez le choix 104 :

104 s905w X96-Mini-&-TX3-Mini meson-gxl-s905w-tx3-mini.dtb

puis le format disque ext4.

L’installation va alors débuter, elle va utiliser le fichier dtb que nous avions modifié au préalable.

A la fin de la procédure, vous pourrez couper l’alimentation, retirer la carte SD et laisser votre X96 désormais démarrer sur sa mémoire flash ! Gain de temps, fiabilité en prime, à vous Armbian sur une machine à 19 €  😉

Raspberry Pi caméra + timelapse : retour sur l’expérience

Depuis 2015, 3 ans donc, nous avons mis en place un système de timelapse sur Raspberry Pi modèle A, oui oui, la toute première version, avec une grosse carte SD, le truc dépassé depuis, largement dépassé avec des platines WiFi, Bluetooth !

Depuis, le système tourne, tourne et tourne, positionné en extérieur, capturant au fil du temps météo, pression, et une image toutes les minutes, comme cela réalisée ce matin :

Parfois on enregistre, parfois on ne fait rien, car sur 3 années, imaginez le volume à traiter !

Pourquoi vous re-parler de ce montage ? Eh bien parce qu’il résiste incroyablement bien au agressions du temps, parce qu’il est stable, performant, son capteur de température « maison » résiste lui aussi, et que dire de cette vieille platine modèle A qui n’a aucune, mais alors aucune défaillance ?

Souvenez-vous, voici la bestiole :

Ah oui, par contre l’élastique lui… il a du mal avec la chaleur, il craque mais on le remplace, c’est le seul talon d’achille du montage en fait.

Oui, on adore jouer avec le Raspberry Pi, ça vous l’avez compris depuis longtemps. On travaille même sur une évolution en Raspberry Pi Zero W, plus petit, plus compact, peut-être avec d’autres modèles de caméras, bref les projets ne manquent pas.

Raspberry Pi, solide ? OUI, OUI, et OUI, sans hésiter, c’est LA solution durable pour vos bricolages, un peu à l’instar d’un Arduino ! Et pour rester au courant des actualités sur la p’tite Framboise, rien ne vaut Framboise314.fr si vous ne connaissiez pas déjà.

Raspberry Camera : Raspicam V2

Chose promise, chose due, voici quelques photos du montage en cours de notre RaspiCam version 2, un système de capture photos tournant sur Raspberry Pi 3. Le premier exemplaire tourne depuis pas mal d’années sur Raspberry Pi 1 et fonctionne toujours. Il était donc temps de faire évoluer un peu la bête.

Les photos donc :

Ici, vous apercevez l’embase PoE étanche, permettant de passer à travers le boîtier de la fausse caméra. Ce boîtier a été commandé sur le roi du travail sous pression et des salaires faibles, j’ai nommé Amazon, pour un peu moins de 20 €. Sur le haut de l’image, on aperçoit le bout métallique de la sonde de température, une sonde qui sort via un trou présent d’origine sur le boîtier.

Ici, vous avez un aperçu de la sortie RJ45 étanche : on y insèrera un CAT5 blindé, on ferme, on presse, et hop, tout est étanche ! Un PoE sera inséré dans le boîtier pour venir alimenter la framboise.

Une vue d’ensemble, à noter les fils d’alimentation du Raspberry Pi 3 pour gagner de la place : pas ou peu possible de venir se brancher en USB sur le côté, la place sera très limitée une fois tous les modules en place, et c’est peu dire… Vous apercevez également le branchement de la sonde de température à même le Raspberry Pi, histoire que rien ne puisse jamais bouger ni se débrancher.
Il s’agit d’une sonde 1Wire dont vous trouverez par exemple une description vraiment bien faite sur l’excellent blog Framboise 314Je ne trouve qu’un petit inconvénient à cette sonde : son inertie en version étanche, le temps sans doute que le métal entourant le capteur à proprement parler ne transmette la chaleur. Mais comme nous ne demandons pas une précision digne d’une mission spatiale, à la rigueur c’est un inconvénient minime.

Il nous reste maintenant à venir assembler tout ce petit monde dans le boîtier de la fausse caméra. Là, j’avoue ne pas encore avoir tout prévu, mais il y a fort à parier que nous allons faire largement appel à la Superglue ou à une solution type Colle 21 pour venir positionner des petits pieds caoutchouc sous différents modules et les positionner sur le boîtier.

A suivre donc, la prochaine étape consistera à venir positionner la caméra puis programmer tout ce petit monde. Il y a également fort à parier qu’une sonde de température plus complexe soit ajoutée, un BMP805 relié cette fois-ci en I2C : elle nous permettra de lire la température dans le boîtier, mais surtout d’obtenir la pression du lieu d’installation, toujours sympa pour mesurer une tendance. En effet, pression > 1013 => beau temps qui vient. Pression < 1013 => sortez les cirés ! C’est ridiculement simple je sais, mais ici, sur le Raspberry Pi 1, cela fonctionne à merveille depuis le début.

 

Raspberry Pi + H801 : défilement aléatoire en Python

Un petit script en python pour votre Raspberry Pi, suite au premier billet sur le H801 :

# -*- coding: utf-8 -*-
import time
import os
import random
while True:
  color = "%06x" % random.randint(0, 0xFFFFFF)
  somme = "sendip -p ipv4 -p udp -us 30978 -ud 30977 -d 0xfbeb" + color + "00005c59d6000 -v 192.168.1.127 > /dev/null"
  os.system(somme)
  time.sleep(0.3)

Sauvegardez le sous le nom led.py et exécutez le avec python3 led.py : vos leds font alors s’allumer de façon totalement aléatoire.

Pensez à modifier l’IP 192.168.1.127 par l’ip de VOTRE module et réglez la pause en modifiant time.sleep(xxx) par xxx secondes, selon vos goûts.

Raspberry Pi + H801 : contrôlez vos LEDs RGB

Le petit H801 proposé sur nombre de boutiques asiatiques est un contrôleur de LEDs RGB (Red, Green Blue) qui va soit générer son propre réseau WiFi, soit venir se connecter au WiFi de votre box.

espleds

Pour très peu d’Euros, vous allez ainsi pouvoir briller en société, venir contrôler un ruban à LEDs au moyen de votre smartphone. Intégrant un ESP8266, l’appareil est en outre reprogrammable à volonté, les exemples ne manquent pas sur internet.

Reste maintenant à venir intégrer ce bijou de technologie chinoise à votre domotique, à pouvoir le contrôler de façon un peu plus simple qu’avec l’application de base d’un smartphone Android. En fouillant un peu sur la toile mondiale, je suis tombé sur ce billet qui dégrossit le fonctionnement de la bestiole, mais hélas cela n’a pas fonctionné ici : les codes d’identification de mon module semblaient différents de ceux initialement utilisés.

Ni une, ni deux, direction Wireshark pour venir analyser les trames UDP diffusées par l’application sur ma tablette Android (192.168.1.181 sur mon réseau local) :

wireshark osx

et plus précisément la trame udp émise du port 30978 vers le port 30977 :

wireshark trame

Bon sang, mais c’est bien sur, la trame doit impérativement débuter par fbeb, suivi par 6 codes hexa correspondant à la couleur.

Sur notre Raspberry Pi, installons sendip et tentons d’éteindre les LEDs :

sendip -p ipv4 -p udp -us 30978 -ud 30977 -d 0xfbeb00000000005c59d6000 -v 192.168.1.127

Ici, 192.168.1.127 est l’IP utilisée par notre H801 sur le réseau local WiFi, vous l’adapterez à votre installation propre bien entendu. Pas besoin d’IP source, la seule réception de la bonne trame UDP suffit visiblement à contenter notre H801.

Partant du principe qu’il faut remplacer les 6 codes hexa, voici comme obtenir une LED totalement blanche :

sendip -p ipv4 -p udp -us 30978 -ud 30977 -d 0xfbebffffff00005c59d6000 -v 192.168.1.127

ou rouge :

sendip -p ipv4 -p udp -us 30978 -ud 30977 -d 0xfbebFF000000005c59d6000 -v 192.168.1.127

ou verte :

sendip -p ipv4 -p udp -us 30978 -ud 30977 -d 0xfbeb7AFF0400005c59d6000 -v 192.168.1.127

La recette pour définir la couleur est simple. Partez de ce principe :

sendip -p ipv4 -p udp -us 30978 -ud 30977 -d 0xfbebXXXXXX00005c59d6000 -v 192.168.1.127

ou les XXXXXX (6 fois X) représentent le code couleur hexadécimal que vous allez trouver sur ce site

rgb

Exemple de couleur verte, codée 7AFF04

A vous de jouer désormais, vous allez pouvoir vous amuser sur votre Raspi préféré 😉

Raspberry Pi : Debian Jessie sous OS/X

Avez-vous chargé le tout dernier Debian Jessie adapté à votre Raspberry Pi ? Si vous êtes sous OS/X, vous avez sans doute obtenu un fichier étrange en décompressant le ZIP, tout sauf le fichier .IMG espéré.

La solution ? Passez par le terminal d’OS/X, rendez-vous dans le répertoire où se trouve votre zip et lancez cette commande :

ditto -x -k 2015-09-24-raspbian-jessie.zip .

N’oubliez pas le . (POINT) à la fin surtout 😉

Et hop, miracle sublime, voici venir le .img nécessaire au flashage de votre carte SD-micro. J’utilise quant à moi ApplePi-Baker, un utilitaire très sympa et très pratique pour flasher des fichiers images sur une carte :

applepibaker

RaspiDomo compatible Chacon

Notre solution domotique, RaspiDomo, basée sur Raspberry Pi B+, est désormais utilisable avec les modules Chacon / MyFox.

Vous allez ainsi pouvoir venir intégrer un module à l’intérieur d’un interrupteur (ce modèle) et activer l’interrupteur à distance. Cela ne change rien au fonctionnement du dit interrupteur : il reçoit simplement une possibilité d’être activé à distance, oh miracle domotique ultime.

chacon-micromodule

Micro-module interrupteur Chacon

Sur notre photo d’illustration, nous voyons les deux fils à relier à l’interrupteur d’origine (prévoyez un modèle assez plat du côté connectique), et le bornier à vis deux positions pour venir récupérer le fil électrique d’origine. C’est simple à installer, débranchez, rebranchez, et hop, en ligne ! Ah oui, n’oubliez pas de couper le courant AVANT

L’aspect le plus délicat est l’association du module avec votre centrale domotique. En effet, Chacon utilise un protocole un peu particulier, ce n’est pas une simple trame 433 MHz comme nous avons pu l’étudier dans de précédents billets, mais une trame un peu plus complexe.

Mais qu’à cela ne tienne, notre module, une fois installé, est vide de tout code, prêt à « écouter » la première transmission venue, à nous de choisir le bon code. Pressez le bouton d’apprentissage sur le module et envoyez votre trame :

send 0 12325261 1 on

et voici le code 12325261 et l’identifiant 1 attribués à notre module. Pour éteindre, c’est désormais simplissime :

send 0 12325261 1 off 

Cette modification a été inspirée par ce billet, avec quelques ajouts et modifications.

Raspberry Pi : désactiver l’inutile

Lorsque, comme moi, vous n’utilisez votre Raspberry Pi que via une connexion SSH, vous n’avez pas besoin de laisser tourner certains processus, dont par exemple le serveur X11 (le truc graphique, vous savez…), pas besoin non plus que la sortie vidéo soit activée, etc.

raspberry debian
Raspbian

Commençons par couper l’environnement graphique, au moyen d’une seule commande :

sudo update-rc.d lightdm disable

Au prochaine reboot, adieu X11, un processus de moins.

Coupons maintenant la sortie TV :

nano /etc/rc.local

et ajoutez une ligne seule : tvservice -o

rebootez avec une commande reboot et hop, un peu de place dégagée sur la petite framboise.