Linux sunxi armbian w1

De The Linux Craftsman
Aller à la navigation Aller à la recherche

!!WIP!!

Introduction

Nous allons utiliser le protocole OneWire sur une platine Sunxi (ARM AllWinner) OrangePi Zero. Le composant choisi est le thermomètre DS18B20 de la firme Dallas qui utilise ce protocole.

Le DS18B20

Le DS18B20 peut être trouvé au format TO-92 ou déjà monté sur une platine.

DS18B20.jpg
DS18B20 mounted.jpg
Format TO-92 Sur une platine avec la résistance de pull-up

L'avantage du protocole OneWire est de n'utiliser qu'un fil pour la communication (avec la masse) et que sur ce fil peuvent être connectées plusieurs sondes de la marque Dallas (jusqu'à 127 exactement).

Un autre avantage est que ce composant possède un registre qui permet de modifier la précision de la valeur renvoyée.

Mode Résolution Temps de conversion
9 bits 0.5°C 93.75 ms
10 bits 0.25°C 187.5 ms
11 bits 0.125°C 375 ms
12 bits 0.0625°C 750 ms

Montage

Il faut maintenant connecter le DS18B20 électriquement et raccorder sa broche data à la broche voulue. Dans cette exemple nous allons utiliser la broche PA10:

Pa10 opi zero.png

Activation du protocole OneWire

Il faut spécifier au système d'exploitation la broche sur laquelle on souhaite activer le protocole OneWire. Cela se fait en ajoutant les lignes suivantes dans le fichier /boot/armbianEnv.txt:

param_w1_pin=PA10
param_w1_pin_int_pullup=1

Cela permet de spécifier la broche PA10 comme étant celle utilisée et activer la résistance de pullup. Il faudra ensuite modifier la directive overlays pour y charger le protocole OneWire. Pour cela ajouter simplement w1-gpio à la directive overlays :

# Exemple d'ajout en plus des overlays USB
overlays=usbhost2 usbhost3 w1-gpio

Il ne reste plus qu'à redémarrer le système pour appliquer les modifications.

Lecture de la température

Tous les fichiers relatifs au bus onewire se trouvent dans le répertoire /sys/bus/w1/:

# ll /sys/bus/w1/
total 0
drwxr-xr-x 2 root root    0 Oct  3 09:01 devices
drwxr-xr-x 4 root root    0 Oct  3 09:01 drivers
-rw-r--r-- 1 root root 4096 Oct  3 09:01 drivers_autoprobe
--w------- 1 root root 4096 Oct  3 09:01 drivers_probe
--w------- 1 root root 4096 Oct  3 09:01 uevent

Dans le répertoire devices on peut retrouver notre thermomètre ainsi que le maître ou contrôleur de bus:

# ll /sys/bus/w1/devices/
total 0
lrwxrwxrwx 1 root root 0 Oct  3 09:02 28-001415b7d3ff -> ../../../devices/w1_bus_master1/28-001415b7d3ff
lrwxrwxrwx 1 root root 0 Oct  3 09:01 w1_bus_master1 -> ../../../devices/w1_bus_master1

Pour lire la température il suffit d'afficher le contenue du fichier w1_slave:

# cat /sys/bus/w1/devices/28-001415b7d3ff/w1_slave
50 01 55 00 5f ff 5f 10 87 : crc=87 YES
50 01 55 00 5f ff 5f 10 87 t=21000

La température est de 21.000 degrés Celsius !