Outils pour utilisateurs

Outils du site


issue178:micro-ci_micro-la

It’s hard to believe that it’s been a year since I started this series of articles. It only seems right to go back to the beginning with the Raspberry Pi Pico and do something new with it, since we’ve spent so many months on the ESP series microcontrollers. This time, we will work with the RPi Pico and use a si7021 Temperature and Humidity sensor along with a ssd1306 OLED display. The wiring is basically the same as any RPi Pico with the ssd1306, but we’ll extend I2C to work with the si7021. I got my si7021 from Adafruit for less than $10 USD. https://www.adafruit.com/product/3251 You can find a driver for the si7021 that I modified to work successfully on the RPi Pico at https://github.com/gregwa1953/SI7021-MicroPython-RPi-Pico. You’ll need to copy this driver to the RPi Pico. You’ll also need to have the ssd1306 driver that we have used multiple times on the Pico as well.

Il est difficile de croire que cela fait un an depuis que j'ai commencé cette série d'articles. Il me semble juste de revenir au début avec le Raspberry Pi Pico et de faire quelque chose de nouveau avec lui, puisque nous avons passé tant de mois sur les microcontrôleurs de la série ESP.

Cette fois-ci, nous allons travailler avec le RPi Pico et utiliser un capteur de température et d'humidité si7021 ainsi qu'un écran OLED ssd1306. Le câblage est essentiellement le même que celui de n'importe quelle RPi Pico avec le ssd1306, mais nous allons étendre l'I2C pour travailler avec le si7021. J'ai acheté mon si7021 chez Adafruit pour moins de $10 USD. https://www.adafruit.com/product/3251

Vous pouvez trouver un pilote pour le si7021, que j'ai modifié pour qu'il fonctionne avec succès sur la RPi Pico, à https://github.com/gregwa1953/SI7021-MicroPython-RPi-Pico. Vous devrez copier ce pilote sur le RPi Pico. Vous aurez également besoin du pilote du ssd1306 que nous avons utilisé plusieurs fois sur le Pico.

Here is the wiring diagram: I always run the i2cscan.py utility to verify my wiring and that all my I2C devices are working properly. When you run it, you should see a response of: 0x3c 0x40 Of course, the 0x3c is the display and the 0x40 is the Temp/Humidity sensor. Now, on to the code. I took the si7021 test file that I created for the driver and modified it to support the addition of the OLED display. Here (top right) is the import section. Once we have all the hardware stuff set up, we can do a small test to verify the OLED is working. We’ll sleep for 5 seconds to let the user see it. If you want, you can leave this block out altogether: oled.fill(0) oled.show() oled.text(“Raspberry Pi”,5,5) oled.text(“Pico”,5,15) # Finally update the oled display so the text is displayed oled.show() time.sleep(5)

Voici le schéma de câblage :

Je lance toujours l'utilitaire i2cscan.py pour vérifier mon câblage et que tous mes périphériques I2C fonctionnent correctement. Lorsque vous l'exécutez, vous devez voir la réponse suivante :

0x3c 0x40

Bien sûr, le 0x3c est l'écran et le 0x40 est le capteur de température/humidité.

Maintenant, passons au code. J'ai pris le fichier de test si7021 que j'ai créé pour le pilote et je l'ai modifié pour supporter l'ajout de l'écran OLED. Voici (en haut à droite) la section d'importation.

Une fois que nous avons configuré tout le matériel, nous pouvons faire un petit test pour vérifier que l'OLED fonctionne. Nous allons dormir pendant 5 secondes pour pour que l'utilisateur le voie. Si vous voulez, vous pouvez laisser ce bloc de côté :

oled.fill(0) oled.show() oled.text(“Raspberry Pi”,5,5) oled.text(“Pico”,5,15) # Enfin, mettez à jour l'écran oled pour que le texte soit affiché oled.show() time.sleep(5)

Now we need to start querying the si7021. The si7021 seems to be a bit odd: to get the proper temperature readings, you have to query the humidity first. It’s part of the chip firmware. We also use this time to get the dew point (not really needed, but why not?), the serial number, and revision. I’ve never gotten the revision to show correctly, but that’s ok, because the chip runs just fine. humidity = si7021.humidity() temperature = si7021.temperature() print('Temperature: {0}C'.format(temperature)) print('Temperature: {0}F'.format(temperature*9/5+32)) humidity = si7021.humidity() print('Humidity: {0}'.format(humidity)) dew_point = si7021.dew_point() print('Dew Point: {0}'.format(dew_point)) serial = si7021.serialnumber print(serial) revision = si7021.revision print(revision)

Maintenant, nous devons commencer à interroger le si7021. Le si7021 semble être un peu bizarre : pour obtenir des lectures de température correctes, vous devez d'abord interroger l'humidité. Cela fait partie du firmware de la puce. Nous utilisons également ce temps pour obtenir le point de rosée (pas vraiment nécessaire, mais pourquoi pas ?), le numéro de série et la révision. Je n'ai jamais réussi à afficher correctement la révision, mais ce n'est pas grave, car la puce fonctionne très bien.

humidity = si7021.humidity() temperature = si7021.temperature() print('Temperature: {0}C'.format(temperature)) print('Temperature: {0}F'.format(temperature*9/5+32)) humidity = si7021.humidity() print('Humidity: {0}'.format(humidity)) dew_point = si7021.dew_point() print('Dew Point: {0}'.format(dew_point)) serial = si7021.serialnumber print(serial) revision = si7021.revision print(revision)

This is what should be displayed in the IDE REPL: Temperature: 25.17976C Temperature: 77.32357F Humidity: 41.80579 Dew Point: 11.29874 bytearray(b'\x0c\xfe\x854\x15\xff\xff\xff') b' ' Now we can finally get down to the business of reading and displaying the Temp/Humidity on the display (top right). As you can see, we go into a “forever loop” and clear the display (oled.fill(0), oled.show()). Then we pull the temperature, humidity and dew point. As I’ve stated many times, I can’t think in metric anything, so I convert the temperature to Fahrenheit so I can understand it.

Voici ce qui devrait être affiché dans l'IDE REPL :

Temperature : 25.17976C Temperature : 77.32357F Humidity : 41.80579 Dew Point : 11.29874 bytearray(b'\x0c\xfe\x854\x15\xff\xff\xff') b' '

Nous pouvons enfin passer à la lecture et à l'affichage de la température et de l'humidité sur l'écran (en haut à droite).

Comme vous pouvez le voir, nous entrons dans une « boucle infinie » et effaçons l'affichage (oled.fill(0), oled.show()). Ensuite, nous affichons la température, l'humidité et le point de rosée. Comme je l'ai déjà dit à plusieurs reprises, je ne peux pas penser en système métrique, donc je convertis la température en Fahrenheit pour pouvoir la comprendre.

I print to the REPL, then create two strings to send to the OLED, one for temperature that starts a column 5, row 5, and one for the humidity that shows at column 5, row 15. Again, we call the oled.show() method to push the data to the display, and sleep for 5 seconds. Feel free to change the sleep time up or down. That’s it. An easy project for a good and solid Temp/Humidity sensor. My si7021 from Adafruit is the one that comes with the STEMMA/QT female connectors on each end. I got a 150mm STEMMA/QT to Male Pin cable for less than $1.00 which allows me to quickly plug into the breadboard. I’ve put the code, drivers and the wiring diagram on my repository at https://github.com/gregwa1953/FCM-178_MicroThisMicroThat. Until next time, as always; stay safe, healthy, positive and creative!

J'imprime dans le REPL, puis je crée deux chaînes à envoyer à l'OLED, une pour la température qui commence à la colonne 5, ligne 5, et une pour l'humidité qui s'affiche à la colonne 5, ligne 15. Encore une fois, nous appelons la méthode oled.show() pour pousser les données à l'écran, et nous dormons pendant 5 secondes. N'hésitez pas à modifier le temps de sommeil à la hausse ou à la baisse.

C'est tout. Un projet facile pour un bon et solide capteur de température/humidité.

Mon si7021 d'Adafruit est celui qui est livré avec les connecteurs STEMMA/QT femelles à chaque extrémité. J'ai obtenu un câble STEMMA/QT de 150mm à broche mâle pour moins de 1,00 $ qui me permet de le brancher rapidement sur la plaque d'essai.

J'ai mis le code, les pilotes et le schéma de câblage sur mon dépôt à https://github.com/gregwa1953/FCM-178_MicroThisMicroThat.

Jusqu'à la prochaine fois, comme toujours, restez en sécurité, en bonne santé, positif et créatif !

issue178/micro-ci_micro-la.txt · Dernière modification : 2022/03/02 11:23 de auntiee