====== ODROID N2 ======
{{tag>Odroid}}
{{tag>système}}
C'est un vrai petit PC, il intègre 'Petitboot' sorte de BIOS comme sur un PC. Elle va nous servir comme serveur agri-culturel dans une des serres, à la fois pour la création sonore utilisant les capteurs présents et à l'aide, la surveillance des cultures.
* la page de '[[https://wiki.odroid.com/odroid-c4/getting_started/os_installation_guide#tab__odroid-n2|get started ]] donne l'adresse de [[ https://de.eu.odroid.in/ubuntu_20.04lts/n2/ubuntu-20.04-4.9-minimal-odroid-n2-20220228.img.xz| l'image minimale ubuntu pour N2]]
* https://wiki.odroid.com/odroid-n2/odroid-n2
* [[ressources:odroid_c4|ODROID C4]] à été un bon terrain d'expérimentation.
On commence à travers la liaison série
* nmtui pour définir la connexion WiFi que j'utilise
* apt update; apt upgrade (quand le unattended-upgrade à fini)... ça c'est fait... je me rassure il ne change pas de noyau 4.9 ...
apt update; apt upgrade -y
dpkg-reconfigure tzdata
dpkg-reconfigure locales
apt install odroid-wiringpi odroid-wiringpi-python vim git
journalctl --vacuum-size=1M
echo "SystemMaxUse=5M" >> /etc/systemd/journald.conf
{{:ressources:n2_pinmap.png?200|}}
==== Ajout bouton on/off ====
Connexion du bouton sur 9/11
ajouter dans /media/boot/boot.ini dans la section Boot Args juste apres la ligne bootargs en surcharge
### in case of GPIOX.3 (Pin 11) of 2x20 pins connector
setenv gpiopower "479"
setenv bootargs ${bootargs} gpiopower=${gpiopower}
En profiter pour regarder si il y a overlays="spi0 i2c0 i2c1 uart0"
===== Ajout interface graphique =====
==== autologin ====
apt remove lightdm # si besoin?
apt install nodm
modifier /etc/default nodm pour loger l'utilisateur odroid et pas root
# nodm configuration
# Set NODM_ENABLED to something different than 'false' to enable nodm
NODM_ENABLED=true
# User to autologin for
NODM_USER=odroid
# First vt to try when looking for free VTs
NODM_FIRST_VT='7'
# X session
NODM_XSESSION=/usr/bin/startfluxbox
# Options for nodm itself
NODM_OPTIONS=
# Options for the X server.
# Format: [/usr/bin/] [:]
# The Xserver executable and the display name can be omitted, but should
# be placed in front, if nodm's defaults shall be overridden.
NODM_X_OPTIONS='-nolisten tcp'
# If an X session will run for less than this time in seconds, nodm will wait an
# increasing bit of time before restarting the session.
NODM_MIN_SESSION_TIME=60
# Timeout (in seconds) to wait for X to be ready to accept connections. If X is
# not ready before this timeout, it is killed and restarted.
NODM_X_TIMEOUT=300
..j'ai cherché longtemps le truc de remplacer Xsession par startfluxbox ... pour avoir une compatibilité maximale et surtout le lancement automatique par le fichier .fluxbox/startup !
==== bureau fluxbox ====
Un bureau fluxbox minimaliste consommant moins de 300Mo (mieux que les 800 de mate ou 600 de xfce),\\
sous root pour minimiser les temps de latence (attention aux connexion...)
apt install xserver-xorg-core xserver-xorg-input-libinput xinit dbus-x11 xfonts-base x11-xserver-utils x11-utils libgl1-mesa-dri mesa-utils mesa-utils-extra
apt install vim fluxbox xterm xfonts-base x11-xserver-utils
apt install pcmanfm xpad avahi-daemon rox-filer # options
mkdir -p /root/.fluxbox
echo "startfluxbox" > /root/.xsession
**startfluxbox**
echo "
# fluxbox startup-script:
# ~/.fluxbox/startup
# Lines starting with a '#' are ignored.
# doit finir par exec fluxbox
#fbsetbg -l
fbsetroot -solid black
xterm -T 'Top' -e /usr/bin/top &
##lancement installation sonore
/root/.fluxbox/rapidestart.sh &
#
wmnd &
wmmisc &
#
/root/.fluxbox/x11vnc.sh 2>&1 > /tmp/x11vnc.log &
exec fluxbox -log ~/.fluxbox/fluxbox.log
" > /root/.fluxbox/startup
chmod 755 /root/.fluxbox/startup
**menu fluxbox** ./fluxbox/menu
[begin] (Fluxbox)
[exec] (Bash) { /usr/bin/xterm -T "Bash" -e /bin/bash --login} <>
[exec] (alsamixergui) {alsamixergui -c1} <>
[exec] (start.sh) {~/start.sh} <>
[exec] (stop.sh) {~/stop.sh} <>
[exec] (enregistre volumes) {alsactl store 1 -f ~/volumes_param.txt} <>
[exec] (restore volumes) {alsactl restore 1 -f ~/volumes_param.txt} <>
[exec] (ROX) {rox-filer} <>
[exec] (Xkill) {xkill} <>
[exec] (Xrefresh) {xrefresh} <>
[submenu] (Monitoring) {}
[exec] (Pstree) { xterm -T "Pstree" -e /usr/bin/pstree.x11}
[exec] (Top) { xterm -T "Top" -e /usr/bin/top} <>
[exec] (Top) { xterm -T "HTOP" -e /usr/bin/htop} <>
[exec] (Xconsole) {xconsole -file /dev/xconsole} <>
[exec] (Xload) {xload} <>
[end]
[submenu] (Styles) {}
[stylesdir] (/usr/share/fluxbox/styles)
[stylesdir] (~/.fluxbox/styles)
[end]
[config] (Configuration)
[workspaces] (Workspaces)
[reconfig] (Reconfigure)
[restart] (Restart)
[exec] (Power Off) {sudo /sbin/shutdown -h now}
[exec] (Reboot) {sudo /sbin/shutdown -r now}
[exit] (Exit)
[end]
===== VNC =====
apt install x11vnc avahi-daemon
x11vnc -storepasswd votre_mot_de_passe ~/.vnc_passwd
echo "
sleep 3
/usr/bin/x11vnc -rfbauth /root/.vnc_passwd -geometry 1024x780 \
-reopen -bg -avahi -forever -display :0
exit 0
" >/root/.fluxbox/x11vnc.sh
===== Premier capteur weather board =====
de https://wiki.odroid.com/odroid-n2/application_note/software/weather_board avec pour nous une sortie OSC\\
Connexion sur 1-3V 2->SDA 3->SDC 9->GND
– Sensors : BME280, Si1132
apt install i2c-tools libi2c-dev python3-smbus phyton3-liblo
cd /usr/src
git clone https://github.com/hardkernel/WEATHER-BOARD.git
cp -a ./WEATHER-BOARD/python_weather/* /usr/local/bin/
chmod 755 /usr/local/bin/BME280.py /usr/local/bin/SI1132.py /usr/local/bin/weather_board.py
{{ :ressources:weather_board_osc.py.tgz |}}
ajout d'un code python pour la transmission MQTT des données, en utilisant juste un popen
import os
cputemp = float(os.popen('cat /sys/class/thermal/thermal_zone3/temp').read()) /
1000
broker_address = "192.168.1.13"
broker_port = 1883
topicbase = "bubulle"
client_id = "bubulle"
username = 'blabla'
password = 'blabla'
client = mqtt.Client(client_id)
client.username_pw_set(username, password)
client.connect(broker_address, broker_port,60)
topic = topicbase + "/cputemp"
client.publish(topic, (float)(bme280.read_temperature()))
time.sleep(1)
#!/usr/bin/python3
import os
import time
from paho.mqtt import client as mqtt_client
cputemp = float(os.popen('cat /sys/class/thermal/thermal_zone0/temp').read()) /
1000
broker_address = "192.168.1.13"
broker_port = 1883
topicbase = "prox"
client_id = "prox"
username = 'blabla'
password = 'blabla'
client = mqtt_client.Client(client_id)
client.username_pw_set(username, password)
client.connect(broker_address, broker_port,60)
topic = topicbase + "/cputemp"
client.publish(topic, (float)(cputemp))
time.sleep(1)
===== Machine sonore =====
Serveur son : Jack2 \\
GUI : Qjackctl\\
Outils de programmation : Puredata
Script de lancement start.sh présent dans le répertoire et lancé par le startup de fluxbox
regarder du coté des applications jack ...
* https://jackaudio.org/applications/
* https://linuxmao.org
* -> https://aj-snapshot.sourceforge.io/
apt install qjackctl jack-tools aj-snapshot zita-njbridge alsamixergui
==== installation Puredata vanilla ====
pour optimiser au maximum, nous laisserons les patch en no-gui donc la partie graph ne sera utile que pour la mise au point\\
Liste des paquets Puredata utilisables portés sur cette base Ubuntu arm64
puredata puredata-core puredata-dev puredata-doc puredata-extra \
puredata-gui puredata-gui-l10n puredata-import puredata-utils multimedia-puredata \
pd-ableton-link pd-ambix pd-arraysize pd-autopreset pd-bassemu pd-beatpipe pd-boids \
pd-bsaylor pd-chaos pd-cmos pd-comport pd-creb pd-csound pd-cxc pd-cyclone \
pd-deken pd-deken-apt pd-earplug pd-ekext pd-ext13 pd-extendedview pd-fftease \
pd-flext-dev pd-flext-doc pd-flite pd-freeverb pd-ggee pd-gil pd-hcs pd-hexloader \
pd-hid pd-iem pd-iemambi pd-iemguts pd-iemlib pd-iemmatrix pd-iemnet pd-iemutils \
pd-jmmmp pd-jsusfx pd-kollabs pd-lib-builder pd-libdir pd-list-abs pd-log \
pd-lyonpotpourri pd-mapping pd-markex pd-maxlib pd-mediasettings pd-mjlib \
pd-moonlib pd-motex pd-mrpeach pd-mrpeach-net pd-nusmuk pd-osc pd-pan \
pd-pddp pd-pdogg pd-pdp pd-pdstring pd-pduino pd-plugin pd-pmpd pd-pool \
pd-puremapping pd-purepd pd-purest-json pd-readanysf pd-rtclib pd-sigpack \
pd-slip pd-smlib pd-syslog pd-tclpd pd-testtools pd-unauthorized pd-upp \
pd-vbap pd-wiimote pd-windowing pd-xbee pd-xsample pd-zexy pdal
==== Installation de pdnext ====
pd-vanilla a un gros défaut, c'est de ne pas être multi-thread ! du coup ne cherchant un peu j'ai trouvé https://github.com/sebshader/pdnext :-)\\
Cela résout le problème et permet de ne pas utiliser pd-l2ork avec nw et ses besoins en ressource plus importante voir son inexistence en ARMv8 ...
du coup
cd /usr/src
git clone https://github.com/sebshader/pdnext.git
cd pdnext
./autogen.sh
./configure --disable-jack-framework --enable-jack --disable-portaudio --prefix=/usr
make -j4
make install
Ensuite il faut peut etre recompiler certain paquet pd genre zexy
apt source pd-zexy
cd pd-zexy_labonne_version
./configure --prefix=/usr
make
make install
==== Scripts sonores ====
**Arret**
#!/bin/bash
# stop.sh , kill jack et pd
# limite les doubles cliques
if [ -f /tmp/stop.run ]; then exit 0 ; fi
#
for i in `ps -e|grep pd|awk '{print $1}'`; do kill -9 $i; done
for i in `ps -e|grep jack|awk '{print $1}'`; do kill -9 $i; done
for i in `ps -e|grep qjackctl|awk '{print $1}'`; do kill -9 $i; done
#
date > /tmp/stop.run
#
# limite les doubles cliques
sleep 5
rm /tmp/stop.run
exit 0
**Lancement**
**.fluxbox/rapidestart.sh**
#!/bin/bash
# rapidestart.sh lancement qjackctl puredata
#
# lancement capteur OSC
python3 /usr/local/bin/weather_board_OSC.py /dev/i2c-0 2>&1 > /dev/null &
# jackd
alsactl restore 1 -f ~/volumes_param.txt
qjackctl &
date > /tmp/start
cd /root/Pd
pd -jack /root/Pd/serre-labo.pd &
exit 0
**start.sh**
#!/bin/bash
# start.sh lancement qjackctl puredata
# limite les doubles cliques
if [ -f /tmp/start.run ]; then exit 0 ; fi
#
for i in `ps -e|grep pd|awk '{print $1}'`; do kill -9 $i; done
for i in `ps -e|grep jack|awk '{print $1}'`; do kill -9 $i; done
for i in `ps -e|grep qjackctl|awk '{print $1}'`; do kill -9 $i; done
#restore volume enregistré par alsactl store 1
alsactl restore 1 -f ~/volumes_param.txt
qjackctl &
date > /tmp/start.run
sleep 4
pd -jack &
#
# limite les doubles cliques
sleep 10
rm /tmp/start.run
exit 0