====== Esgourdes ====== 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 [[:projets:esgourde|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 ... * Avoir une grosse et solide source d'énergie, pas de fragile panneaux solaire, ni de batterie lithium pour fonctionner par tous les temps de -20° à +70° * Ne pas consommer trop genre < 150mA /5V * Bonne qualité du son, une paire d'electret * un accès aux données finales à distance serait bien pour ne pas polluer l'endroit de nos passages * pouvoir etre en place au moins 1 mois * avoir une horloge de temps (RTC) * avoir des plages d'enregistrement programmables, voir des systèmes de déclenchement par capteur * pouvoir avoir un tri minimal des fichiers sans interet * permettre le suivi sur une bonne distance (1km) Pistes trouvée depuis: * https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0130297 * https://www.instructables.com/id/ARUPi-A-Low-Cost-Automated-Recording-Unit-for-Soun/ * https://www.tandfonline.com/doi/full/10.1080/09524622.2018.1463293 * SOLO sur RSP https://solo-system.github.io/documentation/index.html Il semble y avoir 3 pistes aujourd'hui: - ESP32 comme [[https://www.olimex.com/Products/IoT/ESP32/ESP32-ADF/open-source-hardware|ESP32-ADF]] avec la nécessité d'un développement plus ardu mais une consommation très basse - iMX233-OLinuXino-MAXI [[https://www.olimex.com/Products/OLinuXino/iMX233/iMX233-OLinuXino-MAXI/open-source-hardware|iMX233-OLinuXino]] qui possède une entrée audio et n'a pas l'air de consommer trop. Un peu datée ? - https://www.nxp.com/docs/en/reference-manual/IMX23RM.pdf - https://www.olimex.com/wiki/IMX233 - RaspberryPi Zero W , facile d'accès , mais nécessitant l'ajout d'entrées audio 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 ==== Ver une machines à plein d'esgourde Esgourde et Escarcelle ==== - Esgourde RSP0-W sur des plages horaires définies - enregistre les sons - transmet les fichiers à la machine de collecte SSID ESGOURDE - récupère sa programmation de la machine de collecte - boucle la dessus - Esgourde de collecte sur des plages horaires définies - est ouverte au collectage - transmet les scripts et autres parametres aux esgourdes - met à disposition une clée USB du collectage 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** ===== Horloge ===== 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 . * https://www.gotronic.fr/art-carte-alim-et-rtc-witty-pi-mini-29438.htm * https://www.gotronic.fr/art-carte-alim-et-rtc-witty-pi-3-30273.htm * de http://www.uugear.com/product/wittypi-mini/ * http://www.uugear.com/doc/WittyPiMini_UserManual.pdf * https://pypi.org/project/wittyPy/ * http://docs.elpunkt.eu/wittyPy/ 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 * sur ebay a souder sans pb sur le bus i2c * https://www.seeedstudio.com/High-Accuracy-Pi-RTC-DS3231-p-3214.html * https://uk.farnell.com/piface/shim-rtc/real-time-clock-shim-for-raspberry/dp/2434226 * https://datasheets.maximintegrated.com/en/ds/DS3231.pdf En gros , - connexion sur le bus 1 de l'horloge - sortie de l’interruption (SQW/nonINT) attention c'est nonINT :si alarme le signal passe en OFF! # 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 * rtcctl init au depart * rtcctl show alarm1 * rtcctl on alarm1 * rtcctl set alarm1 10.02.2020 18:03:01 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): ... ===== Relai/Alimentation ===== 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 {{:projets:ds3231_2n2907_invertion_mosfet.jpg? 200|}}{{ ::mosfet.jpg?200|}} 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. ===== Cartes audios ===== ==== Wolfson Audio Card for Raspberry Pi ==== * https://www.element14.com/community/docs/DOC-55903?ICID=Pi-Accessories-wolfson-audio-space#anchor3 * https://www.element14.com/community/docs/DOC-65691/l/user-manual-for-wolfson-audio-card * https://www.element14.com/community/docs/DOC-65664?ICID=Pi-AccessoriesAccessories-wolfson-audio-space * https://www.element14.com/community/docs/DOC-65687/l/data-sheet-for-wm7220?ICID=Pi-Accessories-wolfson-audio-space * les micro MEM [[https://www.element14.com/community/servlet/JiveServlet/downloadBody/65687-102-1-288319/WM7220.pdf|Data Sheet for WM7220]] dispo https://www.element14.com/community/community/raspberry-pi/raspberry-pi-accessories/wolfson_pi 21€ ==== Cirrus Logic Audio Card ==== plus rescente qui (Cirrus ayant acheté la société Wolfson...) * https://www.element14.com/community/docs/DOC-71261?ICID=CirrusLogicAudio-topMain-techspecs mais deja plus dispo ==== Audioinjector ==== * http://www.audioinjector.net/rpi-zero WM8731 1 entree stereo Line + 1 electret * https://shop.audioinjector.net/detail/Sound_Cards/Original+Pi+Sound+Card 2 entrees 2 sortie, plus grosse mais entrées stéréo plus simple à mettre en place (22) ==== ReSpeaker-2-Mics-Pi-HAT ==== * https://www.seeedstudio.com/ReSpeaker-2-Mics-Pi-HAT.html 10€ WM8960 2 micros MEM * http://wiki.seeedstudio.com/ReSpeaker_2_Mics_Pi_HAT/ ==== Hifiberry ==== ok en 2019/2020 , carte top , un peu chère. (45€ ou 60€) * https://www.hifiberry.com/shop/boards/hifiberry-dac-adc/ * https://www.hifiberry.com/shop/boards/hifiberry-dac-adc-pro/ ==== Waveshare wm8960-audio-hat ==== * https://www.waveshare.com/wm8960-audio-hat.htm 2 micros MEM * https://www.waveshare.com/wiki/WM8960_Audio_HAT * https://datasheet.lcsc.com/szlcsc/1912111437_SANICO-AOS3729A-T42-NXC_C338759.pdf MEM présents ==== Base SGTL5000 ==== toujours 16bits mais plus simple à intégrer ?, toujours basse conso * https://fe-pi.com/products/fe-pi-audio-v1 16$ 2 entrées en RCA ! * https://fe-pi.com/products/fe-pi-audio-z-v2 pour 2 entrées et **2 sorties** line en jack ;-) * https://fe-pi.com/p/support-and-setup * http://www.hobbytronics.co.uk/teensy-audio-adapter?keyword=audio * https://www.pjrc.com/store/teensy3_audio.html ==== iqaudio ==== * http://iqaudio.co.uk/hats/100-pi-codec.html ===== Expérience RSP ZERO W / ReSpeaker / ecasound ===== 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 ===== Expérience RSP ZERO W / ReSpeaker / wittyPi / Gstreamer ===== conso 200mA sans le WiFi 340mA avec. * Suppression du wifi , option si on veut garder la main sur les futurs transferts samba * ouverture de la connexion série pour suivre le boot (pin 6,8,10) * en fin, une fois tout paramétré:passage du système de fichier en lecture seul (raspi-config) 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** * organiser la connexion WiFi, * ouverture/fermeture à la demande par une telecommande (genre porte garage ou sonnette) * mise en place d'une hotspot hostapd * partage des fichiers par Samba sur ce WiFi * tester connexion LoRa supplémentaire (acces 1km) * pilotage à distance (ouverture/fermeture WiFi) * bilan des captations a partir de sonogramme (.png) * organisation d'une flotte d'esgourdes pilotées par un central ===== Expérience RSP ZERO W / RTC DIY / Gstreamer ===== Cette fois avec la carte son 2 entrées line [[ https://fe-pi.com/products/fe-pi-audio-z-v2 | Fe-Pi ]] en attente de réception ===== Choix matériel ===== - Raspberry Pi zero W - sans les connecteurs https://www.kubii.fr/cartes-raspberry-pi/1851-raspberry-pi-zero-w-kubii-3272496006997.html (11) {{ :projets:raspberry-pi-zero-w-kubii.jpg?200|}} - Carte d'horloge - [[ https://www.gotronic.fr/art-carte-alim-et-rtc-witty-pi-3-30273.htm| WittyPi V3 ]] (23){{ :projets:ar-carte-alim-et-rtc-witty-pi-3-30273.jpg?200|}} - [[ https://www.robotshop.com/eu/fr/witty-pi-3-horloge-en-temps-reel-gestion-alimentation-pour-raspberry-pi.html | ou la ]] - Carte sons [[ https://shop.audioinjector.net/detail/Sound_Cards/Zero+Form+Factor+Sound+Card| AudioInjector]] (13) ou fe-pi-audio-z-v2 - Régulateur alimentation 5V acceptant de grande variation (hw-106 booster ou step-down) (2) - Pile à dépolarisation air type cloture pour les animaux (15) - paire de micro électret comme [[https://micbooster.com/12-primo-microphone-capsules|EM-172]] - platine micro électret {{ :projets:platine-electret.jpg?200|}} - alimentation directement sur la batterie pour un + non parasité - dessouder leurs électrets et les remplacer par les EM-172s options: * plusieurs connecteurs longs {{:projets:conneteur_long.jpg?200|}}