Table des matières

Les esgourdes

C'est un petit système autonome qui enregistre les sons ambiants pendant plusieurs semaines sur sa mémoire.

Et donc à quoi ça sert?

Matériel

Vivement conseiller pour l'installation :

Les piles:

Connexions

mini arduino pro

relai

G6BK-1114P-US: 1-pole Double-winding Latching Model

1  2      3      4         S:Set coil
+  +      +      +         R Reset coil
S  R       --/___
+  + 
6  5(+) 

http://omronfs.omron.com/en_US/ecb/products/pdf/en-g6b.pdf

Logiciels

Installation d'une debian à partir d'armbian

Après etre rentré sur la machine , pass 1234 de base sur l'armbian, faire un utilisateur pi

Partie horloge

elle est connectée sur le bus i2c-0

cat <<EOF >> /etc/rc.local
# mise en route de l'horloge 
su root -c "echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-0/new_device"
sleep 3
#ecriture de l'heure
#hwclock -w -f /dev/rtc1
# mise a l heure du systeme
su root -c "hwclock -s -f /dev/rtc1" 
#lecture de l'heure
su root -c "hwclock -r -f /dev/rtc1 >> /var/log/mise_en_route.log"
EOF

Paramétrages système

Mise à l'heure:

Partie dnsmasq.conf

hostapd étant déjà installé , on passe dnsmasq en version portail captif

cat <<EOF > /etc/dnsmasq.conf
interface=wlan0                          # Use interface wlan0
listen-address=192.168.4.51              # Explicitly specify the address to listen on
address=/#/192.168.4.51                  # portail captif
except-interface=eth0                    # ne rien faire sur eth0
server=192.168.4.51                      # Forward DNS requests local
resolv-file=/etc/resolv.conf.portail
dhcp-range=192.168.4.100,192.168.4.150,12h # Assign IP addresses with 12 hour lease time
EOF

Partie serveur de fichier

On utilise nginx comme petit serveur d'une page qui listera les fichiers son présents. il suffit d'une modif fichier /etc/nginx/sites-enabled/default , on ajoute “autoindex on;”

apt install nginx
sed -i -e "s/404\;/404\;\n\t\tautoindex on\;/" /etc/nginx/sites-enabled/default 

Partie programmation de l'alimentation

une ESP8266 commande un relai bistable, l'ESP est commandée par l'entrée serie 9600bauds:

code: …

Partie enregistrement audio

  1. Régler le son avec alsamixer , penser a fermer l'entree et bien ouvrir MIC1 en capture 'N' ',' 'M'
  2. routine de prise de son avec détection de niveau ,filtre
  3. …/… c'est en cours

Pistes ecasound

Pistes plutot python:

Pistes plutot puredata

Ce sont des super pistes mais nous nous contenterons de faire des enregistrements de tout ce qui fait suffisamment de bruit, le filtrage se faisant après à l'oreille.

Test RaspberyPi Zero + AudioInjector Zero

conso 8mA sans Wifi 17mA avec , +2mA en phase d'enregistrement

/boot/config.txt : hdmi_force_hotplug=1

systemctl disable triggerhappy.service
systemctl disable dbus.service
systemctl disable systemd-udevd-control.socket
systemctl disable systemd-udevd-kernel.socket
dphys-swapfile uninstall
systemctl disable dphys-swapfile.service
systemctl disable dhcpcd.service => necessitera dhcpcd -g pour retrouver la carte wifi si presente

faire coller dans le rc.local , une fois que la carte son est opérationnelle

systemctl stop udev.service

info par la https://cdn-learn.adafruit.com/downloads/pdf/usb-audio-cards-with-a-raspberry-pi.pdf

echo "
/usr/bin/tvservice -o
#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 &
">>/etc/rc.local

fichier : /usr/local/bin/boucle_enregistre

#!/bin/bash
mkdir -p /home/pi/enregistrements
cd /home/pi/enregistrements
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/enregistrements/'`date "+%Y%m%d_%H%M%S"`'.wav'
export PS1='${debian_chroot:+($debian_chroot)}\u@record:\w\$'
if [ -f $NOMFIC ] ; then
        NOMFIC=${NOMFIC%.*}X.wav
fi
ecasound -t:3600 -f:16,1,44100 -efh:100 -efl:15000 -i alsahw,0,0  -o $NOMFIC 

sleep 10
done
chmod 755 /usr/local/bin/boucle_enregistre

/etc/fstab ajout :

/dev/mmcblk0p3 /home/pi/enregistrements vfat defaults,noatime,user,umask=0000 0 1
none /dev/shm tmpfs defaults 0 0
mkdir -p /home/pi/enregistrements
chmod 777 /home/pi/enregistrements

une liaison usb plutot que wifi/réseau …: https://learn.adafruit.com/turning-your-raspberry-pi-zero-into-a-usb-gadget/ethernet-gadget

Blinder le système: https://hallard.me/raspberry-pi-read-only/ genre

dphys-swapfile uninstall
dphys-swapfile swapoff

apt remove --purge logrotate dphys-swapfile anacron wolfram-engine triggerhappy
echo " fastboot noswap ro">>/boot/cmdline.txt
apt-get install busybox-syslogd; dpkg --purge rsyslog
rm -rf /var/lib/dhcp/ /var/lib/dhcpcd5 /var/run /var/spool /var/lock /etc/resolv.conf
ln -s /tmp /var/lib/dhcp
ln -s /tmp /var/lib/dhcpcd5
ln -s /tmp /var/run
ln -s /tmp /var/spool
ln -s /tmp /var/lock
touch /tmp/dhcpcd.resolv.conf; ln -s /tmp/dhcpcd.resolv.conf /etc/resolv.conf
sed -i /etc/systemd/system/dhcpcd5 -e "s/PIDFile=/run/dhcpcd.pid/PIDFile=/var/run/dhcpcd.pid"
rm /var/lib/systemd/random-seed
ln -s /tmp/random-seed /var/lib/systemd/random-seed
sed -i /lib/systemd/system/systemd-random-seed.service -e "21iExecStartPre=\/bin\/echo \"\" \>\/tmp\/random-seed\n"
sed -i /etc/cron.hourly/fake-hwclock -e "7i  mount -o remount,rw \/" -e "8i  mount -o remount,ro \/"

retour et fin

Comme il y a pour moi plusieurs esgourdes , leur ip seront 192.168.4.51 192.168.4.52 etc…

echo "esgourde-1">/etc/hostname && hostname esgourde-1
echo "
127.0.0.1   localhost www.esgourde-1.local esgourde-1.local esgourde-1
192.168.4.51 www.esgourde-1.local esgourde-1.local esgourde-1
" > /etc/hosts

echo "nameserver 192.168.4.51
nameserver 127.0.0.1" > /etc/resolv.conf.portail

cat <<EOF > /etc/network/interfaces
source /etc/network/interfaces.d/*

allow-hotplug eth0
iface eth0 inet dhcp

auto lo
iface lo inet loopback

allow-hotplug wlan0
iface wlan0 inet static
address 192.168.4.51
netmask 255.255.255.0
network 192.168.4.0
broadcast 192.168.4.255
EOF
systemctl stop  network-manager
systemctl disable  network-manager

Autre approche

Dans ce cas on considère la carte ARM comme juste un enregistreur 'passif' qu'on pilote par l'ESP/Arduino par un fichier de commandes de type shell. C'est l'ESP/Arduino qui allume et éteind l'ARM et lui envoit des commandes genre 'date -s …;' , 'cd /home/pi/entregistrement;' , 'ecasound ….;'

Cela permettrait aussi de piloter par shell a travers l'ESP/WiFi une carte ARM ou autre dépourvu d'horloge ou de certain capteur mais sachant interpréterdu bash ou du shell.

pistes :

Et après

Peut etre quand utilisant un logiciel de reconnaissance de mot tres vague, avec une base de cris d'oiseaux on pourrait avoir une forme de déclencheur qui filtrerait un peu ce qu'on enregistre