====== ODROID-XU4 ====== ===== pistes ===== doc en wiki : https://wiki.odroid.com/start Utilisée dans une installation de Dominique Leroy Puredata {{ ::pd-l2ork-2.8.1-20190303-rev.cfef9261-armv7l.deb |}} purr compilé sur odroid XU4 autre * https://magazine.odroid.com/wp-content/uploads/odroid-xu4-user-manual.pdf * https://obihoernchen.net/1235/odroid-xu4-with-openmediavault/ ===== Install gpio ===== * https://wiki.odroid.com/common/application_note/gpio/wiringpi * https://wiki.odroid.com/odroid-xu4/hardware/expansion_connectors#con_11_-_2x6_pins ==== Partie C ==== git clone https://github.com/hardkernel/wiringPi.git cd wiringPi apt install libtool shtool pkgconf ./autogen.sh ./configure make make install gpio readall -a pour vérifier gpio readall -a +------+-----+----------+------+---+----+--- Model ODROID-XU3/4 ---+----+---+------+----------+-----+------+ | GPIO | wPi | Name | Mode | V | DS | PU/PD | Physical | PU/PD | DS | V | Mode | Name | wPi | GPIO | +------+-----+----------+------+---+----+-------+----++----+-------+----+---+------+----------+-----+------+ | | | 3.3V | | | | | 1 || 2 | | | | | 5V | | | | 209 | 8 | I2C1.SDA | ALT1 | 1 | 0 | P/U | 3 || 4 | | | | | 5V | | | | 210 | 9 | I2C1.SCL | ALT1 | 1 | 0 | P/U | 5 || 6 | | | | | GND(0V) | | | | 18 | 7 | GPIO. 18 | IN | 0 | 0 | P/D | 7 || 8 | DSBLD | 0 | 1 | ALT1 | UART0.TX | 15 | 172 | | | | GND(0V) | | | | | 9 || 10 | DSBLD | 0 | 0 | ALT1 | UART0.RX | 16 | 171 | | 174 | 0 | GPIO.174 | ALT7 | 1 | 0 | P/U | 11 || 12 | DSBLD | 0 | 0 | ALT1 | GPIO.173 | 1 | 173 | | 21 | 2 | GPIO. 21 | IN | 0 | 0 | P/D | 13 || 14 | | | | | GND(0V) | | | | 22 | 3 | GPIO. 22 | IN | 0 | 0 | P/D | 15 || 16 | P/D | 0 | 0 | IN | GPIO. 19 | 4 | 19 | | | | 3.3V | | | | | 17 || 18 | P/D | 0 | 0 | IN | GPIO. 23 | 5 | 23 | | 192 | 12 | MOSI | ALT1 | 1 | 0 | P/U | 19 || 20 | | | | | GND(0V) | | | | 191 | 13 | MISO | ALT1 | 1 | 0 | P/U | 21 || 22 | P/U | 1 | 1 | IN | GPIO. 24 | 6 | 24 | | 189 | 14 | SCLK | ALT1 | 0 | 0 | P/U | 23 || 24 | P/D | 0 | 1 | OUT | CE0 | 10 | 190 | | | | GND(0V) | | | | | 25 || 26 | P/D | 0 | 1 | OUT | GPIO. 25 | 11 | 25 | | 187 | 30 | I2C5.SDA | ALT2 | 1 | 0 | P/U | 27 || 28 | P/U | 0 | 1 | ALT2 | I2C5.SCL | 31 | 188 | | 28 | 21 | GPIO. 28 | IN | 0 | 0 | P/D | 29 || 30 | | | | | GND(0V) | | | | 30 | 22 | GPIO. 30 | IN | 0 | 0 | P/D | 31 || 32 | P/D | 0 | 0 | IN | GPIO. 29 | 26 | 29 | | 31 | 23 | GPIO. 31 | IN | 0 | 0 | P/D | 33 || 34 | | | | | GND(0V) | | | | | 24 | POWER ON | | | | | 35 || 36 | P/D | 0 | 0 | IN | GPIO. 33 | 27 | 33 | | | 25 | AIN.0 | | | | | 37 || 38 | | | | | 1V8 | 28 | | | | | GND(0V) | | | | | 39 || 40 | | | | | AIN.3 | 29 | | +------+-----+----------+------+---+----+-------+----++----+-------+----+---+------+----------+-----+------+ | GPIO | wPi | Name | Mode | V | DS | PU/PD | Physical | PU/PD | DS | V | Mode | Name | wPi | GPIO | +------+-----+----------+------+---+----+--- Model ODROID-XU3/4 ---+----+---+------+----------+-----+------+ ==== Partie python ==== apt install python python3 python-pip python3-pip pip install weel pip install odroid-wiringpi dans /usr/local/lib/python2.7/dist-packages/odroid_wiringpi.py on trouve la liste des fonctions #!/usr/bin/env python # bouton sur 29,31,33 pull-down _>wPi 21,22,23 # contact vers 12/PWON 20,22 BOUTON 29/1.8V import odroid_wiringpi as wpi import time wpi.wiringPiSetup() wpi.pinMode(0, 1) while True: bt1 = wpi.digitalRead(21) bt2 = wpi.digitalRead(22) bt3 = wpi.digitalRead(23) btsw = wpi.digitalRead(1) if bt1: print("bouton 1") if bt2: print("bouton 2") if bt3: print("bouton 3") time.sleep(1) ===== programmation horaire ===== évidement il faut la petite batterie.\\ shutdown -P permet de rallumer avec le bouton power sinon shutdown opère un power-off et le bouton est innopérant ?? de https://wiki.odroid.com/odroid-xu4/application_note/rtc_wakeup hwclock -w # pour écrire l'heure hwclock -r && date # pour verifier # rallumer 1 min apres echo 0 | sudo tee /sys/class/rtc/rtc0/wakealarm echo `date '+%s' -d '+ 1 minutes'` | sudo tee /sys/class/rtc/rtc0/wakealarm # Check if "alarm_IRQ" appears to "yes". cat /proc/driver/rtc rtc_time : 02:45:30 rtc_date : 2017-09-05 alrm_time : 02:46:28 alrm_date : 2017-09-05 alarm_IRQ : yes alrm_pending : no update IRQ enabled : no periodic IRQ enabled : no periodic IRQ frequency : 1 max user IRQ frequency : 64 24hr : yes #test poweroff # se rallume 1 minute apres === programme horaire bash === <{{ ::proghoraire.tgz |}} #!/bin/bash ALLUM_MATIN='08:00' ETEIND_MATIN='09:00' ALLUM_SOIR='16:00' ETEIND_SOIR='22:00' DATE_ALLUM_MATIN=`date '+%s' -d $ALLUM_MATIN` DATE_ALLUM_SOIR=`date '+%s' -d $ALLUM_SOIR` DATE_ETEIND_MATIN=`date '+%s' -d $ETEIND_MATIN` DATE_ETEIND_SOIR=`date '+%s' -d $ETEIND_SOIR` DATEHEURE=`date '+%s'` echo "vérification heure" hwclock -w # pour écrire l'heure hwclock -r && date # pour verifier # test si on est dans la tranche avant matin if [ $DATEHEURE -lt $DATE_ALLUM_MATIN ] then echo "on est dans la tranche avant matin demarrage $ALLUM_MATIN arret $ETEIND_MATIN" shutdown -P $ETEIND_MATIN echo 0 | sudo tee /sys/class/rtc/rtc0/wakealarm echo `date '+%s' -d "$ALLUM_MATIN"` | sudo tee /sys/class/rtc/rtc0/wakealarm # test si on est dans la tranche du matin elif [ $DATEHEURE -gt $DATE_ALLUM_MATIN ] && [ $DATEHEURE -lt $DATE_ETEIND_MATIN ] then echo "on est dans la tranche matin arret $ETEIND_MATIN demarrage $ALLUM_SOIR" shutdown -P $ETEIND_MATIN echo 0 | sudo tee /sys/class/rtc/rtc0/wakealarm echo `date '+%s' -d "$ALLUM_SOIR"` | sudo tee /sys/class/rtc/rtc0/wakealarm # test si on est entre les 2 elif [ $DATEHEURE -gt $DATE_ETEIND_MATIN ] && [ $DATEHEURE -lt $DATE_ALLUM_SOIR ] then echo "on est entre les 2 soir arret $ETEIND_SOIR demarrage $ALLUM_SOIR" shutdown -P $ETEIND_SOIR echo 0 | sudo tee /sys/class/rtc/rtc0/wakealarm echo `date '+%s' -d "$ALLUM_SOIR"` | sudo tee /sys/class/rtc/rtc0/wakealarm # test si on est dans la tranche du soir elif [ $DATEHEURE -gt $DATE_ALLUM_SOIR ] && [ $DATEHEURE -lt $DATE_ETEIND_SOIR ] then echo "on est dans la tranche soir arret $ETEIND_SOIR demarrage $ALLUM_MATIN" shutdown -P $ETEIND_SOIR echo 0 | sudo tee /sys/class/rtc/rtc0/wakealarm echo `date '+%s' -d "tomorrow $ALLUM_MATIN"` | sudo tee /sys/class/rtc/rtc0/wakealarm else # sinon fonctionne 2 heures echo "hors tranche horaire marche 2 heures" shutdown -P 2:00 fi ===== mise a jour automatique ===== #!/bin/bash # mise a jour automatique SITE_SOURCE='http://quelquepart/maj.tgz' SCRIPTE='http://surlereseau/script_maj.sh' cd /home/pi rm -rf /home/pi/maj.tgz wget $SITE_SOURCE RET=$? if [ $RET -eq 0 ] then SUM=`md5sum -b maj.tgz | awk '{ print $1 }'` if [ "$SUM" != "`cat maj.tgz_sum`" ] then echo -n $SUM > maj.tgz_sum cd Desktop sudo tar xvf ../maj.tgz sudo chown pi:pi -R * fi fi cd /home/pi rm -rf /home/pi/script_maj.sh wget $SCRIPTE RET=$? if [ $RET -eq 0 ] && [ -e script_maj.sh ] then SUM=`md5sum script_maj.sh | awk '{ print $1 }'` if [ "$SUM" = "`cat script_maj.sh_sum`" ] then exit 0 else echo -n $SUM > script_maj.sh_sum cd Desktop sudo bash ../script_maj.sh sudo chown pi:pi -R * fi fi pour l'aureon dans /etc/modprobe.d/aureon.conf options snd-usb-audio nrpacks=1