Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
issue200:micro-ci_micro-la [2024/01/01 08:44] – d52fr | issue200:micro-ci_micro-la [2024/01/04 15:28] (Version actuelle) – d52fr |
---|
C'est du temps RÉEL | C'est du temps RÉEL |
| |
Je vous salue à nouveau, chers amis. Joyeux mois de décembre et une meilleure année 2024 à vous ! | Je vous salue à nouveau, chers amis. Joyeux mois de décembre et une meilleure année 2024 ! |
| |
Ce mois-ci, nous allons nous intéresser aux horloges temps réel sur nos microcontrôleurs et plus particulièrement sur le RPi Pico/Pico-W. Alors que les cartes RPi Pico n'ont normalement pas de RTC (Real Time Controller - Contrôleur temps réel) intégré, de nombreuses cartes Pico tierces plus récentes en ont déjà un à bord. Même si vous utilisez une ESP-32 ou une ESP-8266, le processus général est à peu près le même pour toutes ces cartes, surtout si vous utilisez MicroPython. | Ce mois-ci, nous allons nous intéresser aux horloges en temps réel sur nos microcontrôleurs et plus particulièrement sur le RPi Pico/Pico-W. Alors que les cartes RPi Pico n'ont normalement pas de RTC (Real Time Controller - Contrôleur temps réel) intégré, de nombreuses cartes Pico tierces plus récentes en ont déjà un à bord. Même si vous utilisez une ESP-32 ou une ESP-8266, le processus général est à peu près le même pour toutes ces cartes, surtout si vous utilisez MicroPython. |
| |
Toutes les cartes ont une certaine capacité à garder l'heure, même si elles ne savent pas quelle heure il est lorsque vous les mettez sous tension. Vous pouvez toujours régler la date et l'heure (grossièrement) en code au début de votre programme et si votre microcontrôleur est compatible BlueTooth ou WiFi, vous devriez être en mesure de vous connecter à un serveur, de saisir l'heure et de faire ce qui est nécessaire. | Toutes les cartes ont une certaine capacité à garder l'heure, même si elles ne savent pas quelle heure il est lorsque vous les mettez sous tension. Vous pouvez toujours régler la date et l'heure (grossièrement) en code au début de votre programme et si votre microcontrôleur est compatible BlueTooth ou WiFi, vous devriez être en mesure de vous connecter à un serveur, de saisir l'heure et de faire ce qui est nécessaire. |
This is what mine looks like and as you can see, the left side has spots for 5 pins and the right side has spots for 7 pins. You can choose either side and for this project only use the Gnd, VCC, SDA and SCL pins. Since it’s I2C, it will work on almost any Microcontroller, Arduino or Raspberry Pi board so your investment won’t be wasted.** | This is what mine looks like and as you can see, the left side has spots for 5 pins and the right side has spots for 7 pins. You can choose either side and for this project only use the Gnd, VCC, SDA and SCL pins. Since it’s I2C, it will work on almost any Microcontroller, Arduino or Raspberry Pi board so your investment won’t be wasted.** |
| |
*Pour aujourd'hui, nous allons sauter cette discussion et passer à l'utilisation d'une puce Real Time Controller. Il existe de nombreuses versions, mais celle que je vais utiliser est le module RTC I2C DS1307. A la date de rédaction de cet article, j'ai pu en trouver à partir de 0,88 USD à l'unité. Bien sûr, l'expédition d'un seul module coûterait une TONNE, alors cherchez localement et vous en trouverez probablement un pour moins de $15.00 USD, peut-être avec l'expédition incluse. | Pour aujourd'hui, nous allons sauter cette discussion et passer à l'utilisation d'une puce Real Time Controller. Il en existe de nombreuses versions, mais celle que je vais utiliser est le module RTC I2C DS1307. A la date de rédaction de cet article, j'ai pu en trouver à partir de 0,88 USD l'unité. Bien sûr, l'expédition d'un seul module coûterait une TONNE, alors cherchez localement et vous en trouverez probablement un pour moins de $15.00 USD, peut-être avec le port inclus. |
| |
Voici à quoi ressemble le mien et comme vous pouvez le voir, le côté gauche a des emplacements pour 5 picots et le côté droit a des emplacements pour 7 picots. Vous pouvez choisir l'un ou l'autre côté et pour ce projet, n'utilisez que les broches Gnd, VCC, SDA et SCL. Comme il s'agit d'un I2C, il fonctionnera sur presque tous les microcontrôleurs, Arduino ou Raspberry Pi, de sorte que votre investissement ne sera pas gaspillé. | Voici à quoi ressemble le mien et, comme vous pouvez le voir, le côté gauche a des emplacements pour 5 picots et le côté droit a des emplacements pour 7 picots. Vous pouvez choisir l'un ou l'autre côté et, pour ce projet, n'utilisez que les broches Gnd, VCC, SDA et SCL. Comme il s'agit d'un I2C, il fonctionnera sur presque tous les microcontrôleurs, Arduino ou Raspberry Pi, de sorte que votre investissement ne sera pas gaspillé. |
| |
| |
Le maquettage | Le maquettage |
| |
Je dois répéter qu'il y a BEAUCOUP de cartes différentes qui utilisent le DS1307, donc je vais donner des instructions génériques pour la plaque d'essai. N'essayez pas de suivre l'image pour autre chose que la position des broches PICO. En fait, je vais plutôt vous donner un tableau. Mais jetez un coup d'oeil à l'image ci-dessous pour vous faire une idée de la petitesse des choses. | Je dois répéter qu'il y a BEAUCOUP de cartes différentes qui utilisent le DS1307, donc je vais donner des instructions génériques pour la plaque d'essai. N'essayez pas de suivre l'image pour autre chose que la position des broches PICO. En fait, je vais plutôt vous donner un tableau. Mais jetez un coup d'œil à l'image ci-dessous pour vous faire une idée de la petitesse des choses. |
| |
Si vous voulez utiliser I2C(0) sur le pico, les broches 6 et 7 sont les broches suggérées. Si par contre vous voulez utiliser I2C(1), les broches suggérées sont 9 et 10. Dans tous les cas, le SDA du Pico se connecte au SDA du DS1307 et le SCL du Pico se connecte au SCL du DS1307. L'os de la tête est également connecté à l'os du cou et ainsi de suite. | Si vous voulez utiliser I2C(0) sur le pico, les broches 6 et 7 sont les broches suggérées. Si, par contre, vous voulez utiliser I2C(1), les broches suggérées sont les 9 et 10. Dans tous les cas, le SDA du Pico se connecte au SDA du DS1307 et le SCL du Pico se connecte au SCL du DS1307. « L'os de la tête est également connecté à l'os du cou et ainsi de suite. » |
| |
Nous pouvons maintenant passer à notre code. | Nous pouvons maintenant passer à notre code. |
Il y a un bénéfice supplémentaire dans le code avec l'inclusion d'une sortie vers un écran OLED en utilisant l'écran SSD1366 I2C. Cependant, j'ai commenté tout le code pour que vous puissiez vous en passer. | Il y a un bénéfice supplémentaire dans le code avec l'inclusion d'une sortie vers un écran OLED en utilisant l'écran SSD1366 I2C. Cependant, j'ai commenté tout le code pour que vous puissiez vous en passer. |
| |
Le DS1307 est (dans ce logiciel) configuré sur I2C(0). Si vous voulez inclure l'écran OLED, vous pourriez l'avoir sur le même bus I2C, mais j'ai fait le logiciel pour le gérer sur I2C(1). | Le DS1307 est (dans ce logiciel) configuré sur I2C(0). Si vous voulez inclure l'écran OLED, vous pourriez l'avoir sur le même bus I2C, mais mon logiciel le gère sur I2C(1). |
| |
Encore une fois, j'ai ajouté le code optionnel pour l'écran OLED. Si vous voulez l'utiliser, il suffit de décommenter cette partie du code et quelques lignes dans la boucle while principale (en haut à droite). | Encore une fois, j'ai ajouté le code optionnel pour l'écran OLED. Si vous voulez l'utiliser, il suffit de dé-commenter cette partie du code et quelques lignes dans la boucle while principale (en haut à droite). |
| |
Bien que nous puissions prendre les données directement de la fonction rtc.datetime() et de la fonction time.localtime(), elles reviennent sous forme de tuple et si vous voulez juste jeter un coup d'oeil à l'écran ou à l'affichage, il est quelque peu difficile (du moins pour ce vieux monsieur) de saisir la bonne information parmi les 8 valeurs des tuples. | Bien que nous puissions prendre les données directement des fonctions rtc.datetime() et time.localtime(), elles reviennent sous forme de tuple et si vous voulez juste jeter un coup d'œil à l'écran ou à l'affichage, il est quelque peu difficile (du moins pour ce vieux monsieur) de trouver la bonne information parmi les 8 valeurs des tuples. |
| |
| |
So, taking all that into consideration, I created a little function that takes in the tuple from either rtc.datetime() or time.localtime() and a second parameter that specifies which one the data is coming from. 0 for rtc.datetime and 1 for time.localtime. It returns two values: date and time. The date value returns a string in the format of MM/DD/YYYY and the time value is a string in the format of HH:MM:SS . If you want to change the formats of the returned data, it is really simple. I’ll show you where below. First let’s look at the start of the function (next page, top right).** | So, taking all that into consideration, I created a little function that takes in the tuple from either rtc.datetime() or time.localtime() and a second parameter that specifies which one the data is coming from. 0 for rtc.datetime and 1 for time.localtime. It returns two values: date and time. The date value returns a string in the format of MM/DD/YYYY and the time value is a string in the format of HH:MM:SS . If you want to change the formats of the returned data, it is really simple. I’ll show you where below. First let’s look at the start of the function (next page, top right).** |
| |
La fonction rtc.datetime() renvoie ses valeurs comme suit... | La fonction rtc.datetime() renvoie ses valeurs comme suit : |
| |
dt=(2023, 12, 9, 5, 9, 59, 41, 0) | dt=(2023, 12, 9, 5, 9, 59, 41, 0) |
Année, mois, date, jour de la semaine, heure, minutes, secondes et sous-secondes. | Année, mois, date, jour de la semaine, heure, minutes, secondes et sous-secondes. |
| |
D'autre part, les valeurs de time.localtime() se présentent de la manière suivante... | D'autre part, les valeurs de time.localtime() se présentent de la manière suivante : |
| |
dt=(2023, 12, 9, 9, 59, 41, 5, 343) | dt=(2023, 12, 9, 9, 59, 41, 5, 343) |
| |
Ce qui, à première vue, semble être le même format. Mais ce n'est pas le cas. Le résultat est le suivant... | Ce qui, à première vue, semble être le même format. Mais ce n'est pas le cas. Le résultat est le suivant : |
| |
Année, mois, date, heure, minutes, secondes, jour de la semaine et jour de l'année | Année, mois, date, heure, minutes, secondes, jour de la semaine et jour de l'année |
Heure locale : 12/09/2023 - 09:59:41 | Heure locale : 12/09/2023 - 09:59:41 |
| |
Donc, en prenant tout cela en considération, j'ai créé une petite fonction qui prend le tuple de rtc.datetime() ou de time.localtime() et un second paramètre qui spécifie de quel type de données il s'agit. 0 pour rtc.datetime et 1 pour time.localtime. Il renvoie deux valeurs : la date et l'heure. La valeur de la date est une chaîne au format MM/JJ/AAAA et la valeur de l'heure est une chaîne au format HH:MM:SS . Si vous souhaitez modifier les formats des données renvoyées, c'est très simple. Je vous montrerai comment faire ci-dessous. Regardons d'abord le début de la fonction (page suivante, en haut à droite). | Donc, en considérant tout cela, j'ai créé une petite fonction qui prend le tuple de rtc.datetime() ou de time.localtime() et un second paramètre qui spécifie la source des données. 0 pour rtc.datetime et 1 pour time.localtime. Il renvoie deux valeurs : la date et l'heure. La valeur de la date est une chaîne au format MM/JJ/AAAA et la valeur de l'heure est une chaîne au format HH:MM:SS. Si vous souhaitez modifier les formats des données renvoyées, c'est très simple. Je vous montrerai comment faire ci-dessous. Regardons d'abord le début de la fonction (page suivante, en haut à droite). |
| |
| |
La première ligne de la fonction se contente de copier les données entrantes de « d » vers dtin, ce qui est plus logique. Je voulais aussi avoir une valeur qui puisse être examinée facilement, plutôt que de simplement nommer le paramètre dtin. | La première ligne de la fonction se contente de copier les données entrantes de « d » vers dtin, ce qui est plus logique. Je voulais aussi avoir une valeur qui puisse être examinée facilement, plutôt que de simplement nommer le paramètre dtin. |
| |
Comme vous pouvez le voir, l'année est gérée de la même manière, que les données proviennent de rtc ou de timer, donc tout ce que nous faisons ici est de passer en revue les trois premiers éléments du tuple, de leur assigner des valeurs temporaires, puis de les mettre à zéro sur la gauche pour s'assurer que 7 minutes après 11 h s'affichent comme « 11 » « 07 », avec n'importe quel séparateur que vous décidez de vouloir. | Comme vous pouvez le voir, l'année est gérée de la même manière, que les données proviennent de rtc ou de timer, donc tout ce que nous faisons ici est de passer en revue les trois premiers éléments du tuple, de leur assigner des valeurs temporaires, puis de les mettre à zéro sur la gauche pour s'assurer que 7 minutes après 11 h s'affichent comme « 11 » « 07 », avec n'importe quel séparateur que vous voulez. |
| |
Nous nous occupons maintenant de la partie temporelle. Si nous traitons les données rtc, nous sautons (pour ce projet) le quatrième élément du tuple (rappelez-vous qu'il est basé sur zéro et qu'il est donc désigné comme dtin[3]), puisqu'il s'agit du jour de la semaine. Ensuite, nous extrayons chaque élément de données et, comme nous l'avons fait avec les dates, nous mettons l'élément à zéro (en haut à droite). | Nous nous occupons maintenant de la partie temporelle. Si nous traitons les données rtc, nous sautons (pour ce projet) le quatrième élément du tuple (rappelez-vous qu'il est basé sur zéro et qu'il est donc désigné comme dtin[3]), puisqu'il s'agit du jour de la semaine. Ensuite, nous extrayons chaque élément de données et, comme nous l'avons fait avec les dates, nous mettons l'élément à zéro sur la gauche (en haut à droite). |
| |
Toutefois, si nous avons affaire à la structure time.localtime (un « 1 » dans le deuxième paramètre), nous n'avons besoin que d'extraire les trois éléments suivants du tuple et, comme ci-dessus, nous les convertissons en chaînes de caractères, avec zéro comme base (en bas à droite). | Toutefois, si nous avons affaire à la structure time.localtime (un « 1 » dans le deuxième paramètre), nous n'avons besoin que d'extraire les trois éléments suivants du tuple et, comme ci-dessus, nous les convertissons en chaînes de caractères, avec un zéro ajouté à gauche si nécessaire (en bas à droite). |
| |
| |
One other thing I should tell you about. If you use Thonny as your IDE, you might notice that for some reason whenever you check the time on your Pico through the IDE, it is correct. Why would that be?** | One other thing I should tell you about. If you use Thonny as your IDE, you might notice that for some reason whenever you check the time on your Pico through the IDE, it is correct. Why would that be?** |
| |
*Maintenant (en haut au milieu), nous utilisons la fonction f-string pour formater les chaînes. Vous pouvez donc facilement voir qu'il serait simple de changer les séparateurs ou de déplacer les éléments. | Maintenant (en haut au milieu), nous utilisons la fonction f-string pour formater les chaînes. Vous pouvez donc facilement voir qu'il serait simple de changer les séparateurs ou de déplacer les éléments. |
| |
C'est tout pour la fonction de formatage. | C'est tout pour la fonction de formatage. |
D'après ce que j'ai compris, lorsque vous connectez un microcontrôleur à Thonny, l'une des premières choses qui se produit est que Thonny extrait les informations de date et d'heure de l'ordinateur local et règle ensuite la date et l'heure du microcontrôleur pour nous. | D'après ce que j'ai compris, lorsque vous connectez un microcontrôleur à Thonny, l'une des premières choses qui se produit est que Thonny extrait les informations de date et d'heure de l'ordinateur local et règle ensuite la date et l'heure du microcontrôleur pour nous. |
| |
Rappelez-vous cependant que si vous branchez votre microcontrôleur directement sur le secteur sans le connecter à votre ordinateur, la date et l'heure ne seront probablement pas proches de la réalité. Dans ce cas, vous pouvez appeler Doctor Who pour une « une sorte d'oscillation du temps », ou vous pouvez utiliser un module RTC DS1307. | Souvenez-vous cependant que si vous branchez votre microcontrôleur directement sur le secteur sans le connecter à votre ordinateur, la date et l'heure ne seront probablement pas proches de la réalité. Dans ce cas, vous pouvez appeler Doctor Who pour une « une sorte d'oscillation du temps », ou vous pouvez utiliser un module RTC DS1307. |
| |
J'ai créé un dépôt sur Github pour le code de ce mois à https://github.com/gregwa1953/MTMT-FCM-200. | J'ai créé un dépôt sur Github pour le code de ce mois à https://github.com/gregwa1953/MTMT-FCM-200. |
| |
Jusqu'à la prochaine fois, HEUREUSE ANNÉE et, comme toujours, restez en sécurité, en bonne santé, positifs et créatifs. | Jusqu'à la prochaine fois, BONNE ANNÉE et, comme toujours, restez en sécurité, en bonne santé, positifs et créatifs. |
| |
| |