====== 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|}}