Outils pour utilisateurs

Outils du site


issue175:micro-ci_micro-la

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
issue175:micro-ci_micro-la [2021/12/02 08:58] d52frissue175:micro-ci_micro-la [2021/12/03 18:27] (Version actuelle) andre_domenech
Ligne 1: Ligne 1:
 **It’s November and I can’t believe we’ve already gone through eight MicroThis MicroThat articles. We’ve all come a long way in our understanding of microcontrollers and MicroPython. Back in part 4 (FCM#170), we covered a number of small parts of a large project using the ESP32. Due to a number of things, the article that I wanted to present didn't work out, so I will move a project from my “stuff to do” list. With any luck, I will be able to present it next month.** **It’s November and I can’t believe we’ve already gone through eight MicroThis MicroThat articles. We’ve all come a long way in our understanding of microcontrollers and MicroPython. Back in part 4 (FCM#170), we covered a number of small parts of a large project using the ESP32. Due to a number of things, the article that I wanted to present didn't work out, so I will move a project from my “stuff to do” list. With any luck, I will be able to present it next month.**
  
-Nous sommes en novembre et je n'arrive pas à croire que nous ayons déjà passé huit articles de Micro-ci Micro-là. Nous avons tous parcouru un long chemin dans notre compréhension des microcontrôleurs et de MicroPython. Dans la partie 4 (FCM#170), nous avons couvert un certain nombre de petites parties d'un grand projet utilisant l'ESP32. En raison d'un certain nombre de choses, l'article que je voulais présenter n'a pas pu être réalisé ; je vais donc repositionner le projet dans ma liste des « choses à faire ». Avec un peu de chance, je pourrai le présenter le mois prochain.+Nous sommes en novembre et je n'arrive pas à croire que nous ayons déjà pu lire huit articles de Micro-ci Micro-là. Nous avons tous parcouru un long chemin dans notre compréhension des microcontrôleurs et de MicroPython. Dans la partie 4 (FCM #170), nous avons couvert un certain nombre de petites parties d'un grand projet utilisant l'ESP32. En raison d'un certain nombre de choses, l'article que je voulais présenter n'a pas pu être réalisé ; je vais donc repositionner le projet dans ma liste des « choses à faire ». Avec un peu de chance, je pourrai le présenter le mois prochain.
  
  
 **A while ago, I had an idea about creating a number of standalone temperature sensors for each room in our apartment. The problem (like most apartments) is that the central heating and air conditioning thermostat is placed in an area that really bears no resemblance to the actual needs of the various rooms in the apartment. One room (the living area, where I spend 80% of my waking time) is ice cold all the time – at least to me. Summer or winter, it doesn’t matter. It’s ALWAYS cold. The farthest bedroom is always hot. Since we have decided that we will be moving to a house sooner than later, it would be helpful to have these standalone modules in each room of the house so we can glance at the display and see what the room temperature is at any time. The devices are built with the ESP8266, a DHT22 temperature/humidity sensor and a 128x32 SSD1306 display. The overall cost of a single unit is about $6.00 USD, since I bought all the parts in bulk a number of months ago. Eventually, each unit can have a code upgrade to enable it to talk to a MQTT server running somewhere in the house and have all the temperatures to display on a monitor. Now that you know the idea behind the project, you will recognize that we have already dealt with various parts of this project before. So, let’s jump right into the project.** **A while ago, I had an idea about creating a number of standalone temperature sensors for each room in our apartment. The problem (like most apartments) is that the central heating and air conditioning thermostat is placed in an area that really bears no resemblance to the actual needs of the various rooms in the apartment. One room (the living area, where I spend 80% of my waking time) is ice cold all the time – at least to me. Summer or winter, it doesn’t matter. It’s ALWAYS cold. The farthest bedroom is always hot. Since we have decided that we will be moving to a house sooner than later, it would be helpful to have these standalone modules in each room of the house so we can glance at the display and see what the room temperature is at any time. The devices are built with the ESP8266, a DHT22 temperature/humidity sensor and a 128x32 SSD1306 display. The overall cost of a single unit is about $6.00 USD, since I bought all the parts in bulk a number of months ago. Eventually, each unit can have a code upgrade to enable it to talk to a MQTT server running somewhere in the house and have all the temperatures to display on a monitor. Now that you know the idea behind the project, you will recognize that we have already dealt with various parts of this project before. So, let’s jump right into the project.**
  
-*Il y a quelque temps, j'ai eu l'idée de créer un certain nombre de capteurs de température autonomes pour chaque pièce de notre appartement. Le problème (comme dans la plupart des appartements) est que le thermostat du chauffage central et de la climatisation est placé à un endroit qui ne correspond pas vraiment aux besoins réels des différentes pièces de l'appartement. Une pièce (le salon, où je passe 80% de mon temps éveillé) est glacée en permanence du moins pour moi. que ce soit en été ou en hiver, ça ne change rien ;il fait TOUJOURS froid. La chambre la plus éloignée est toujours chaude. Puisque nous avons décidé de déménager dans une maison tôt ou tard, il serait utile d'avoir ces modules autonomes dans chaque pièce de la maison afin de pouvoir jeter un coup d'œil à l'écran et voir la température de la pièce à tout moment. Les appareils sont construits avec l'ESP8266, un capteur de température/humidité DHT22 et un écran 128x32 SSD1306. Le coût total d'une seule unité est d'environ 6 dollars américains, puisque j'ai acheté toutes les pièces en gros il y a quelques mois. terme, chaque unité pourra avoir une mise à jour du code pour lui permettre de parler à un serveur MQTT fonctionnant quelque part dans la maison et avoir toutes les températures à afficher sur un moniteur. Maintenant que vous connaissez l'idée derrière le projet, vous reconnaîtrez que nous avons déjà traité diverses parties de ce projet auparavant. Donc, sautons directement dans le projet.+*Il y a quelque temps, j'ai eu l'idée de créer un certain nombre de capteurs de température autonomes pour chaque pièce de notre appartement. Le problème (comme dans la plupart des appartements) est que le thermostat du chauffage central et de la climatisation est placé à un endroit qui ne correspond pas vraiment aux besoins réels des différentes pièces de l'appartement. Une pièce (le salon, où je passe 80 % de mon temps éveillé) est glacée en permanencedu moins pour moi. Que ce soit en été ou en hiver, ça ne change rien ; il fait TOUJOURS froid. La chambre la plus éloignée est toujours chaude. Puisque nous avons décidé de déménager dans une maison tôt ou tard, il serait utile d'avoir ces modules autonomes dans chaque pièce de la maison afin de pouvoir jeter un coup d'œil à l'écran et voir la température de la pièce à tout moment. Les appareils sont construits avec l'ESP8266, un capteur de température/humidité DHT22 et un écran 128 x 32 SSD1306. Le coût total d'une seule unité est d'environ 6 dollars américains, puisque j'ai acheté toutes les pièces en gros il y a quelques mois. À terme, chaque unité pourra avoir une mise à jour du code pour lui permettre de parler à un serveur MQTT fonctionnant quelque part dans la maison et avoir toutes les températures à afficher sur un moniteur. Maintenant que vous connaissez l'idée derrière le projet, vous reconnaîtrez que nous avons déjà traité diverses parties de ce projet auparavant. Donc, sautons directement dans le projet.
  
  
Ligne 15: Ligne 15:
 The main file will be named boot.py, and therefore every time the device is booted or reset, the program will start. This is what we want since we won’t be using a computer with Thonny to control it once we get ready to deploy it. Once we plug it in, the program should start running.** The main file will be named boot.py, and therefore every time the device is booted or reset, the program will start. This is what we want since we won’t be using a computer with Thonny to control it once we get ready to deploy it. Once we plug it in, the program should start running.**
  
-Voici le schéma de la plaque d'essai du projet. Veuillez noter que j'ai utilisé un SSD1306 128x64 dans le diagramme, mais le code fonctionnera avec un écran plus petit. Assurez-vous simplement que vous obtenez le brochage, quelque soit l'OLED que vous utilisez dans votre projet, pour l'aligner correctement avec le câblage. Parfois, les broches sont différentes d'un fabricant à l'autre.+Voici le schéma de la plaque d'essai du projet. Veuillez noter que j'ai utilisé un SSD1306 128 x 64 dans le diagramme, mais le code fonctionnera avec un écran plus petit. Assurez-vous simplement que vous obtenez le brochage, quel que soit l'OLED que vous utilisez dans votre projet, pour l'aligner correctement avec le câblage. Parfois, les broches sont différentes d'un fabricant à l'autre.
  
 Maintenant, nous allons nous pencher sur le code. Maintenant, nous allons nous pencher sur le code.
  
-Le fichier principal sera nommé boot.py, et donc chaque fois que le dispositif est démarré ou réinitialisé, le programme démarrera. C'est ce que nous voulons puisque nous n'utiliserons pas d'ordinateur avec Thonny pour le contrôler une fois que nous serons prêts à le déployer. Une fois que nous l'avons branché, le programme devrait commencer à fonctionner.+Le fichier principal sera nommé boot.py, et donc chaque fois que le dispositif est démarré ou réinitialisé, le programme démarrera. C'est ce que nous voulons puisque nous n'utiliserons pas d'ordinateur avec Thonny pour le contrôler une fois que nous serons prêts à le déployer. Une fois que nous l'aurons branché, le programme devrait commencer à fonctionner.
  
  
Ligne 42: Ligne 42:
 Writer.set_textpos(ssd, 0, 0)** Writer.set_textpos(ssd, 0, 0)**
  
-Voici la section d'importation...+Voici la section d'importation :
  
 from machine import Pin from machine import Pin
Ligne 69: Ligne 69:
 Remarquez que j'ai commenté l'utilisation du fichier de la police 10. Je trouve que la police 6 est suffisamment claire pour être vue à 90 cm ou plus, ce qui devrait être suffisant. Utilisez le fichier de police qui vous semble le mieux adapté à votre application. Remarquez que j'ai commenté l'utilisation du fichier de la police 10. Je trouve que la police 6 est suffisamment claire pour être vue à 90 cm ou plus, ce qui devrait être suffisant. Utilisez le fichier de police qui vous semble le mieux adapté à votre application.
  
-Nous arrivons maintenant à la boucle principale du programme (en haut à droite). Nous démarrons une boucle « éternelle », utilisons un appel try|except (juste au cas où le capteur n'arrive pas à lire), et utilisons une instruction sleep(2) pour donner au DHT22 un délai de deux secondes avant de l'interroger. Il s'agit du délai minimum « sûr », car lae DHT22 est un peu plus lent que certains capteurs de température plus coûteux. Nous appelons ensuite la méthode measure pour obtenir les valeurs de température et d'humiditéet nous les plaçons dans des variables temporaires. Comme je l'ai souvent dit, mon vieux cerveau ne peut pas penser en températures Celsius. Je les convertis en Farenheit, puis j'envoie les valeurs (température et humidité) à l'écran OLED, et enfin j'appelle la méthode show de la bibliothèque SSD. Nous terminons par la partie « except » (excepté) du code pour essayer de nous rétablir proprement.+Nous arrivons maintenant à la boucle principale du programme (en haut à droite). Nous démarrons une boucle « éternelle », utilisons un appel try|except (juste au cas où le capteur n'arrive pas à lire), et utilisons une instruction sleep(2) pour donner au DHT22 un délai de deux secondes avant de l'interroger. Il s'agit du délai minimum « sûr », car le DHT22 est un peu plus lent que certains capteurs de température plus coûteux. Nous appelons ensuite la méthode measure pour obtenir les valeurs de température et d'humidité et nous les plaçons dans des variables temporaires. Comme je l'ai souvent dit, mon vieux cerveau ne peut pas penser en températures Celsius. Je les convertis en Farenheit, puis j'envoie les valeurs (température et humidité) à l'écran OLED, et enfin j'appelle la méthode show de la bibliothèque SSD. Nous terminons par la partie « except » (excepté) du code pour essayer de nous rétablir proprement.
  
  
Ligne 83: Ligne 83:
 # HEIGHT = const(32)** # HEIGHT = const(32)**
  
-C'est l'intégralité du code de boot.py. Maintenant nous allons jeter un coup d'oeil rapide au fichier ssd1306_setup.py. Vous devez vous rappeler qu'il fait partie de la bibliothèque writer que Peter Hinch a écrite. Nous avons utilisé cette bibliothèque dans le numéro 172 (article partie 6). Comme je le fais habituellement, je vais commencer par les sections d'importation et de configuration globale.+C'est l'intégralité du code de boot.py. Maintenant nous allons jeter un coup d'œil rapide au fichier ssd1306_setup.py. Vous devez vous rappeler qu'il fait partie de la bibliothèque writer que Peter Hinch a écrite. Nous avons utilisé cette bibliothèque dans le numéro 172 (article partie 6). Comme je le fais habituellement, je vais commencer par les sections d'importation et de configuration globale.
  
  
Ligne 97: Ligne 97:
 **You will want to make sure that the WIDTH and HEIGHT constants are the same for your display (see below). I commented out the last HEIGHT line, since I have both 128x64 and 128x32 SSD1306 displays around, and want to be able to swap quickly. Just so you know, if you are using a 128x64 SSD1306, you can still set the HEIGHT to 32. It shouldn’t matter having a larger display using a smaller HEIGHT value. It doesn’t work the other way around though. The original code was written for the Pyboard microcontroller, so I’ve removed that code from that shown below, but it still is in the repository file. Notice that I’ve commented out the original setup function definition and replaced the soft parameter set to False. This keeps us from using the software I2C library. I have done that, since we’re be forcing the I2C pins to SDA on pin 4 and SCL to pin 5. I’ve included the SPI code here, just to provide you a landmark for the code.** **You will want to make sure that the WIDTH and HEIGHT constants are the same for your display (see below). I commented out the last HEIGHT line, since I have both 128x64 and 128x32 SSD1306 displays around, and want to be able to swap quickly. Just so you know, if you are using a 128x64 SSD1306, you can still set the HEIGHT to 32. It shouldn’t matter having a larger display using a smaller HEIGHT value. It doesn’t work the other way around though. The original code was written for the Pyboard microcontroller, so I’ve removed that code from that shown below, but it still is in the repository file. Notice that I’ve commented out the original setup function definition and replaced the soft parameter set to False. This keeps us from using the software I2C library. I have done that, since we’re be forcing the I2C pins to SDA on pin 4 and SCL to pin 5. I’ve included the SPI code here, just to provide you a landmark for the code.**
  
-Vous devez vous assurer que les constantes WIDTH et HEIGHT sont les mêmes pour votre écran (voir ci-dessous). J'ai commenté la dernière ligne HEIGHT, car j'ai à la fois des écrans SSD1306 128x64 et 128x32, et je veux être capable de changer rapidement. Pour votre information, si vous utilisez un SSD1306 128x64, vous pouvez toujours régler HEIGHT sur 32. Le fait d'avoir un écran plus grand en utilisant une valeur HEIGHT plus petite ne devrait pas avoir d'importance. Mais cela ne fonctionne pas dans l'autre sens. Le code original a été écrit pour le microcontrôleur Pyboard, donc j'ai enlevé ce code de celui montré ci-dessous, mais il est toujours dans le fichier de dépôt. Remarquez que j'ai commenté la définition de la fonction setup originale et remplacé la valeur du paramètre soft par False. Cela nous empêche d'utiliser la bibliothèque I2C du logiciel. Je l'ai fait, puisque nous allons forcer les broches I2C à SDA sur la broche 4 et SCL sur la broche 5. J'ai inclus le code SPI ici, juste pour vous fournir un point de repère pour le code.+Vous devez vous assurer que les constantes WIDTH (largeur) et HEIGHT (hauteur) sont les mêmes pour votre écran (voir ci-dessous). J'ai commenté la dernière ligne HEIGHT, car j'ai à la fois des écrans SSD1306 128 x 64 et 128 x 32, et je veux être capable de les échanger rapidement. Pour votre information, si vous utilisez un SSD1306 128 x 64, vous pouvez toujours régler HEIGHT sur 32. Le fait d'avoir un écran plus grand en utilisant une valeur HEIGHT plus petite ne devrait pas avoir d'importance. Mais cela ne fonctionne pas dans l'autre sens. Le code original a été écrit pour le microcontrôleur Pyboard, donc j'ai enlevé ce code de celui montré ci-dessous, mais il est toujours dans le fichier du dépôt. Remarquez que j'ai commenté la définition de la fonction setup originale et remplacé la valeur du paramètre soft par False. Cela nous empêche d'utiliser la bibliothèque logiciel I2C. Je l'ai fait, puisque nous allons forcer les broches I2C à SDA sur la broche 4 et SCL sur la broche 5. J'ai inclus le code SPI ici, juste pour vous fournir un point de repère pour le code.
  
  
issue175/micro-ci_micro-la.1638431889.txt.gz · Dernière modification : 2021/12/02 08:58 de d52fr