Ceci est une ancienne révision du document !
En cours ce début de février 2020
Comme une gourde à sons , les esgourdes se remplissent de sons. Ce sont des oreilles déportées.
Suite au projet Esgourde V1 j'ai continué les expérimentations, ESP32, NANOPI DUO, Olimex LIME, Raspeberry Pi Zero W…
La difficulté est de trouver un système d'alimentation et donc un consommation minimale pour avoir une durée maxi d'enregistrement; laisser l'esgourde 1 mois …
Pistes trouvée depuis:
Il semble y avoir 3 pistes aujourd'hui:
Suite à quelques expériences de consultation par WiFi des fichiers sons enregistrés, la solution envisagée est que l'esgourde transmette d'elle-même ses fichiers à une machine de collectage. Cela plutot que de faire le collectage une par une en ouvrant le Wifi par une télécommande. Car on évite ainsi la sonsommation de la télécommande
La machine de collectage peut etre autre chose qu'un RSP zero , comme une RSPA+ qui consomme peut et a un connecteur USB plus solide et sur lequelle ou connecte une clée WiFi correcte qui va elle causer sur plusieurs centaine de mètres.
Je reprends ici mes essais sur RSP0
Je viens de découvrir les carte Witty Pi qui pour une vingtaine d'euro font le taf Mais au cas ou j'expérimente aussi ma méthode plus simple et moins gourmande .
Bref , ma version n’utilise qu'une horloge couplée à un transistor pnp 2N2907 en inverseur pour un MOSFET (petite platine IRE520)
Sur cette base DS3231 qui a une double alarme que j'utilise avec un système de relai/tempo
En gros ,
# ajout std dans le /etc/rc.local echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device hwclock -s
en fait ne pas faire cet ajout pour avoir la maitrise de l'horloge
Suppression fake-hwclock du boot
sudo update-rc.d fake-hwclock disable sudo update-rc.d ntp disable
cat /proc/driver/rtc donne les info comme
rtc_time : 13:19:14 rtc_date : 2020-02-10 alrm_time : 00:00:00 alrm_date : 1970-01-01 alarm_IRQ : no alrm_pending : no update IRQ enabled : no periodic IRQ enabled : no periodic IRQ frequency : 1 max user IRQ frequency : 64 24hr
De https://github.com/bablokb/pi-wake-on-rtc
j'ai modifié
def set_alarm(self,alarm,state): """ Set the given alarm-flag A1IE or A2IE in the control-register to the desired state (0 or 1) """ control = self._read(self._CONTROL_REGISTER) control = _set_bit(control,alarm-1,state) control = int("00000101", 2) # modif pour amener l'alarme a fonctionner ( SQW on ) self._write(self._CONTROL_REGISTER,control) def dump_value(self,value): ...
Une platine MOSFET ( signal de IRE520 ) est connectée sur l’émetteur(3) d'un PNP 2N2907 qui joue le rôle d'inverseur de la sortie nonINT/SQW de l'horloge, consommation de la base 2,1mA
le déclenchement par l'horloge peut etre couplé par une diode et condensateur en parallèle qui diffère l'extinction de la RSP de presque une minute en maintenant le signal haut. Cela évite la perte de données voir de microSD.
Il y a aussi un retour d'allumage de las RSP0 par sa sortie GPIO12 (presente sur la ReSpeaker-2-Mics-Pi-HAT) connectée aussi sur l'entrée signale du MOSFET pour prendre la main sur l'alimentation et donc désarmer l'horloge. Cela permet de la reprogrammer sans couper l'alimentation. Le shutdown de la RSP descend 12 à 0 et le MOSFET coupe alors l'alimentation, en attendant un nouveau déclenchement par l'horloge ds3231.
dispo https://www.element14.com/community/community/raspberry-pi/raspberry-pi-accessories/wolfson_pi 21€
plus rescente qui (Cirrus ayant acheté la société Wolfson…)
mais deja plus dispo
ok en 2019/2020 , carte top , un peu chère. (45€ ou 60€)
toujours 16bits mais plus simple à intégrer ?, toujours basse conso
Après récupération d'un rasbian, http://wiki.seeedstudio.com/ReSpeaker_2_Mics_Pi_HAT/, les scriptes donnés fonctionnent bien (retour sur le kernel 4.19.75+)
/etc/rc.local
#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. # Print the IP address _IP=$(hostname -I) || true if [ "$_IP" ]; then printf "My IP address is %s\n" "$_IP" fi sleep 5 # lance esgoude echo esgourde >> /tmp/alarm.log su root -c /usr/local/bin/esgourde.sh & exit 0
/usr/local/bin/esgourde.sh
#!/bin/bash # /usr/local/bin/esgourde.sh # script d'enregistrement automatique # # les sources de ALARM DUREE TEMPS ... if [ -f /boot/esgourde.cfg ] then source /boot/esgourde.cfg else ALARM1=05:00:00 DUREE=15 TEMPS=600 PASSBAS=10 PASSHAUT=15000 fi # module RCT DS3231 echo ds3231 0x68 > /sys/class/i2c-adapter/i2c-1/new_device hwclock -s # ou hwclock --hctosys hard clock vers systeme # changer heure #hwclock --set --date "dd mmm yyyy HH:MM" #hwclock -w # ou hwclock --systohc systeme vers hard clock # liberer rtc du systeme echo 0x68 > /sys/class/i2c-adapter/i2c-1/delete_device # GPIO12 comme temoin de fonctionnement echo "12" > /sys/class/gpio/export echo "out" > /sys/class/gpio/gpio12/direction echo "1" > /sys/class/gpio/gpio12/value # init RTC heure de remise en route=demain meme heure # set registre control 0x0E 0x05 (00000101) if [ -z $ALARM ]; then echo "pas de config.cfg " >> /tmp/alarm.log exit fi # demain = date -d tomorrow +"%d/%m/%Y" DTDEMAIN=`date -d tomorrow +"%m/%d/%y"` ALARM1="${DTDEMAIN} ${ALARM}" #i2cset -y 1 0x68 0x0E 0x05 rtcctl init sleep 1 rtcctl on alarm1 sleep 1 rtcctl set alarm1 $ALARM1 sleep 1 echo 0x68 > /sys/class/i2c-adapter/i2c-1/delete_device sleep 1 echo rtcctl set alarm1 "$ALARM1" >> /tmp/alarm.log # lancement de la boucle d enregistrement #su root -c alsactl -f alsactl_conf.ok restore # faire store avant su pi -c /usr/local/bin/boucle_enregistre 2>&1 > /tmp/boucle.log & # programme l arret echo su root -c shutdown +$DUREE >> /tmp/alarm.log su root -c shutdown +$DUREE exit 0
/usr/local/bin/boucle_enregistre
#!/bin/bash # les sources de ALARM DUREE TEMPS ... if [ -f /boot/esgourde.cfg ] then source /boot/esgourde.cfg else ALARM1=05:00:00 DUREE=15 TEMPS=600 PASSBAS=10 PASSHAUT=15000 fi mkdir -p /home/pi/SONS cd /home/pi/SONS while true do #arecord -d 5 -fcd esgourde_`date "+%F_%T"`.wav # ecasound -t:duree en secondes # ecsound -f bit,channel,rate # -efh et -efl filtre passe haut et passe bas, fonction du micro # -t duree d'un fichier NOMFIC='/home/pi/SONS/'`date "+%Y%m%d_%H%M%S"`'.ogg' export PS1='${debian_chroot:+($debian_chroot)}\u@record:\w\$' if [ -f $NOMFIC ] ; then NOMFIC=${NOMFIC%.*}X.ogg fi ecasound -t:$TEMPS -f:16,2,44100 -efh:$PASSBAS -efl:$PASSHAUT -i alsahw,1,0 -o $NOMFIC #ecasound -t:6000 -f:16,2,44100 -efh:100 -efl:15000 -i alsahw,1,0 -o $NOMFIC sleep 10 done
conso 200mA sans le WiFi 340mA avec.
apt install gstreamer1.0-alsa gstreamer1.0-tools gstreamer1.0-plugins-good flac samba samba-common
Création d'une partition vfat sur la microSD pour le stockage SONS et modification /etc/fstab pour le montage
/dev/mmcblk0p3 /home/pi/SONS vfat defaults,noatime,user,umask=0000 0 2
Modifications /etc/security/limits.conf
echo " @audio - rtprio 99 @audio - nice -10 @audio - memlock unlimited " >> /etc/security/limits.conf
Installation pour la carte Witty
cd /usr/local/bin/ wget http://www.uugear.com/repo/WittyPi2/installWittyPi.sh sudo sh installWittyPi.sh
C'est wittyPi.sh qui permet de régler les alarmes.
4. Schedule next shutdown [?? 07:00:00] 5. Schedule next startup [?? 05:00:00]
rc.local
/usr/bin/tvservice -o su pi -c /usr/local/bin/esgourde_witty.sh 2>&1 >> /tmp/esgourde.log & sudo nice -n5 /usr/local/bin/esgourde_trans.sh 2>&1 » /tmp/esgourde_trans.log &
/boot/esgourde.cfg
#!/bin/bash #Configuration des enregistrements # /usr/local/bin/wittyPi.sh pour la conf des alarmes RTC # NOM nom de la machine NOM=esgourde1 # BOUCLE entre 2 prises en seconde BOUCLE=900 # TEMPS d 'enregistrement pour un fichier TEMPS=90000 # TEMPSTOT temps pour shutdown en minute # doit etre avant extinction par wittyPi.sh TEMPSTOT=115 # TAILLE des fichiers enregistrement en octet 1M=100000000 TAILLE=100000000 # nom des fichiers sans extention .flac NOMFIC='/home/pi/SONS/$NOM_'`date "+%F_"` # la commande lancee est # gst-launch-1.0 alsasrc device=hw:1 ! audioconvert $AUDIO_CONVERT ! flacenc ! filesink location="${NOMFICTOT}.flac" & # ESCARCELLE machine de collectage #ESCARCELLE=toto@192.168.2.10:/var/www/html/SONS/ ESCARCELLE="sftp://toto:passblabla@192.168.2.10" DESTINATION="/var/www/html/SONS" PASS="&passblabla" PORT=6123
/usr/local/bin/esgourde_witty.sh
#!/bin/bash #set -x # esgourde...sh enregistre du son a des heures programmees # /boot/esgourde.cfg pour les sources de ALARM TAILLE ... # BOUCLE en seconde # TEMPS en milliseconde # TEMPSTOT en minute # il faut que BOUCLE > temps d enregistrement pour la TAILLE # remettre a jour la date date --set 2020-MM-JJ puis date --set HH:MM # ensuite repasser par wittyPi.sh # if [ -f /boot/esgourde.cfg ] then source /boot/esgourde.cfg else NOM=esgourde1 NOMFIC='/home/pi/SONS/'`date "+%F_"` TAILLE=100000000 TEMPS=90000 AUDIO_CONVERT= BOUCLE=900 TEMPSTOT=115 fi sudo shutdown +$TEMPSTOT mkdir -p -m 1777 /home/pi/SONS mkdir -p -m 1777 /home/pi/SONS/TRANS mkdir -p -m 1777 /home/pi/SONS/ARCHIVES cd /home/pi/SONS while true do killall gst-launch-1.0 NOMFICTOT=${NOMFIC}`date "+%H-%M"` gst-launch-1.0 alsasrc device=hw:0 ! audioconvert $AUDIO_CONVERT ! flacenc ! filesink location="${NOMFICTOT}.flac" & sleep $BOUCLE killall gst-launch-1.0 mv "${NOMFICTOT}.flac" ./TRANS/ done exit 0
esgourde_trans.sh
#!/bin/bash cd /home/pi/SONS/TRANS if [ -f /boot/esgourde.cfg ] then source /boot/esgourde.cfg else #ESCARCELLE=toto@192.168.2.10:/var/www/html/SONS/ ESCARCELLE="sftp://toto:passblabla@192.168.2.10" DESTINATION="/var/www/html/SONS" PASS="passblabla" PORT=22 fi #sudo ifconfig wlan0 up #sleep 10 # en attente de fichier disponible while true do ls *.flac 2> /dev/null RET=$? if [ $RET -eq 0 ] then for i in `ls -1 *.flac` do #sshpass -p $PASS rsync -az --rsh='ssh -p $PORT' *.flac $ESCARCELLE lftp $ESCARCELLE -e "\ kill all; \ put -c -O $DESTINATION $i; \ bye" 2>&1 > /dev/null RET=$? if [ $RET -eq 0 ] then mv $i ../ARCHIVES/ fi done fi sleep 60 done exit 0
option ajout a la fin de /etc/samba/smb.conf
[share] Comment = Pi shared SONS folder Path = /home/pi/SONS Browseable = yes Writeable = Yes only guest = no Public = yes Guest ok = yes
Autre
Il y a possiblité de faire
for i in `ls -1 *.flac` do sox $1 -n spectrogram -o $1.png done
pour avoir les spectrogrammes des fichiers
Restafaire
options: