Gérer la communication I2C entre un Raspberry Pi et un capteur grâce à Wiring Pi
Un tutoriel de Michel SEMAL
Le 2019-01-23 09:11:20, par michel.semal, Membre averti
Bonjour à tous,
Je viens de poster un petit tutoriel sur :
Ce tutoriel est créé afin de réaliser une communication avec le module SI7021 en utilisant la bibliothèque
wiringpi.
Le tutoriel propose une sortie en mode console avec les deux mesures , température et humidité, ainsi que le checksum de ces deux valeurs.
Pour les fondus de matériels, j'ai aussi traduis le code pour l'Arduino.
J'espère vous avoir avoir aidé.
N'hésitez pas à laisser un commentaire.
Michel Semal.
Le forum Raspberry Pi sur developpez.com
Je viens de poster un petit tutoriel sur :
Ce tutoriel est créé afin de réaliser une communication avec le module SI7021 en utilisant la bibliothèque
wiringpi.
Le tutoriel propose une sortie en mode console avec les deux mesures , température et humidité, ainsi que le checksum de ces deux valeurs.
Pour les fondus de matériels, j'ai aussi traduis le code pour l'Arduino.
J'espère vous avoir avoir aidé.
N'hésitez pas à laisser un commentaire.
Michel Semal.
-
f-lebResponsable Arduino et Systèmes EmbarquésSalut
J'ai repris ce Si7021 que je pilote avec une carte maître FPGA programmée en Verilog. J'ai pas mal galéré, mais j'obtiens enfin quelque chose...
Après avoir envoyé la commande de température en mode No Hold Master (commande 0xF3), je lance et relance la commande de lecture (Setup Read 0x40). Tant que la conversion n'est pas terminée, le capteur n'acquitte pas (NAK) :
(point vert = Start ou Start Repeating, point orange = Stop)
Environ 7ms plus tard (conforme à la doc qui annonce 7ms typique et 10,8ms maxi), la conversion est terminée et le capteur acquitte enfin (Setup Read 0x40 + ACK):
Il reste alors à lire les 3 octets retournés (successivement poids fort MSB, poids faible LSB, et Checksum)
0x6034, il fait 19,2°C
Je pourrai en dire davantage quand j'aurai fini la mise au point, je ne maîtrise pas tout encore et je ne suis pas au bout de mes peines
extrait du code (machine à états finis en Verilog)
Code verilog : 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39... s_I2C_ADRR : // Slave Address (0x40) + Read begin if (!i2c_busy) begin i2c_start = 0; i2c_write = 1; i2c_data_in = I2C_ADRSi7021_Read; r_I2C_State_Next = s_I2C_MEASURE_CHECK; end end s_I2C_MEASURE_CHECK : begin if (!i2c_busy) begin if (i2c_ack_write) begin // si NAK i2c_write = 0; i2c_start = 1; r_I2C_State_Next = s_I2C_ADRR; // si NAK, la conversion n'est pas terminée, on retourne à l'étape précédente end else begin // si AK r_I2C_State_Next = s_I2C_MEASURE; // si AK, fin de la conversion, il faut récupérer les données de température à l'étape suivante end end end s_I2C_MEASURE : // conversion terminée begin if (!i2c_busy) begin i2c_write = 0; i2c_read = 1; i2c_ack_read = 1; r_I2C_State_Next = s_I2C_READ_MSB; end end s_I2C_READ_MSB : begin ...
le 26/04/2021 à 22:53 -
f-lebResponsable Arduino et Systèmes EmbarquésMerci Michel pour cette contribution
C'est important la partie décodage des trames I2C à partir de la datasheet, le lecteur pourra ainsi s'adapter à tout capteur I2C, et il y en a beaucoup.
Wiring pi est installé par défaut sur Raspbian, mais toujours en C, le lecteur peut aussi utiliser la bibliothèque bcm2835(facile à installer) et causer à son capteur en I2C.
Et si on préfère en Python avec RPi.GPIOhttps://deusyss.developpez.com/tutor...ythonEtLeGpio/ le 25/01/2019 à 21:50 -
AuteurExpert éminent séniorHello,
as-tu prévu un tutoriel ? J'aimerais bien connaître les cartes et logiciels que tu as utilisés. Les copies d'écran proviennent d'où ?le 27/04/2021 à 18:21 -
f-lebResponsable Arduino et Systèmes EmbarquésSalut,
Pour un tutoriel, il faudra attendre un peu. Il y a trop de trucs que je ne maîtrise pas bien, ça reste assez bancal pour l'instant(je n'arrive pas à faire des relevés à suivre, je suis obligé de débrancher/rebrancher la carte à chaque mesure de température , je n'arrive pas à calculer la température en °C pour l'afficher, etc. encore du boulot)
Pour la carte FPGA utilisée voir ici, pour les copies d'écran, voir làle 27/04/2021 à 21:08