Outils pour utilisateurs

Outils du site


issue167:micro_this_micro_that

March 2021 - Welcome to the first of the “Micro This Micro That” series of articles. Hopefully I will be able to keep up with doing two articles each month. So what is Micro This Micro That? The goal is to provide readers with information and projects to demonstrate MicroPython and CircuitPython compatible microcontroller boards and sensors. Occasionally, I might throw in a Raspberry Pi board to show the differences between Python, MicroPython and CircuitPython. These articles will have code, schematics, diagrams and more – trying to provide real world programming techniques for microcontrollers. I’ll attempt to point out the similarities and differences between CircuitPython, MicroPython, and “Full grown” Python. Believe me, there are TONNES of differences. I might even try to include an Arduino project here and there, but my main thrust will be on MicroPython and CircuitPython. Before we get into any of the projects, let’s take a look at exactly what a microcontroller actually is. From the AllAboutCircuits website, we get a very clear explanation of this…

Mars 2021 - Bienvenue au premier article de la série « Micro Ceci Micro Cela ». J'espère que je pourrai continuer à faire deux articles par mois.

Alors, qu'est-ce que Micro Ceci Micro Cela ? Le but est de fournir aux lecteurs des informations et des projets de démonstration pour les cartes microcontrôleurs et les capteurs compatibles avec MicroPython et CircuitPython. Occasionnellement, je pourrais ajouter une carte Raspberry Pi pour montrer les différences entre Python, MicroPython et CircuitPython. Ces articles contiendront du code, des schémas, des diagrammes et bien plus encore, en essayant de fournir des techniques de programmation réelles pour les microcontrôleurs. J'essaierai de mettre en évidence les similitudes et les différences entre CircuitPython, MicroPython et Python « complet ». Croyez-moi, il y a des TONNES de différences. Je pourrais même essayer d'inclure un projet Arduino ici et là, mais je me concentrerai principalement sur MicroPython et CircuitPython.

Avant d'aborder les projets, jetons un coup d'œil à ce qu'est exactement un microcontrôleur. Le site AllAboutCircuits nous en donne une explication très claire…

“Microcontrollers are small, versatile, inexpensive devices that can be successfully implemented and programmed not only by experienced electrical engineers but also by hobbyists, students, and professionals from other disciplines.” Today, there are many different types of Microcontrollers out there. The line of Arduino products is a prime example of Microcontrollers. The group at Adafruit also have many products as well as the folks at Sparkfun. Most recently, the Raspberry Pi Foundation announced and released the Raspberry Pi Pico board that is based on their brand new RP2040 chip, which is their first Microcontroller product. The response to the RPi Pico has been astounding, and there have been many companies that have announced products based on the RP2040 chip. The most exciting thing for those of us who program in Python is that the RPi Pico can not only be programmed using C/C++, like the Arduino, but with both MicroPython and CircuitPython. Many of the products from Adafruit can be programmed using CircuitPython, but the Pico lets you choose between all three.

« Les microcontrôleurs sont de petits dispositifs polyvalents et peu coûteux qui peuvent être mis en œuvre et programmés avec succès non seulement par des ingénieurs électriciens expérimentés, mais aussi par des amateurs, des étudiants et des professionnels d'autres disciplines. »

Aujourd'hui, il existe de nombreux types de microcontrôleurs. La gamme des produits Arduino est un excellent exemple de microcontrôleurs. Le groupe Adafruit propose également de nombreux produits, tout comme les gens de Sparkfun. Plus récemment, la Raspberry Pi Foundation a annoncé et lancé la carte Raspberry Pi Pico, basée sur leur toute nouvelle puce RP2040, qui est leur premier microcontrôleur. La réaction au RPi Pico a été stupéfiante et de nombreuses entreprises ont annoncé des produits basés sur la puce RP2040. La chose la plus excitante pour ceux d'entre nous qui programment en Python est que le RPi Pico peut non seulement être programmé en C/C++, comme l'Arduino, mais aussi avec MicroPython et CircuitPython. Beaucoup de produits d'Adafruit peuvent être programmés avec CircuitPython, mais le Pico vous permet de choisir entre les trois.

Let’s look at MicroPython, in general, for a moment. MicroPython is the brainchild of MicroPython.org and its founder Australian programmer and physicist Damien George, who created it to support their brand of Microcontrollers. The MicroPython language is a special subset of Python 3.4, originally designed to run on their own pyboard Microcontrollers. While it’s a really neat little board with many features, the price is about 30 USD. That puts it out of the reach for many developers who have a shoestring budget for hobby work. As cool as that sounds, there are some limitations. If you normally program using Python 3.7+, you will find things like the “f-strings” will throw syntax errors. At this writing, libraries like numpy, pandas and matplotlib are not currently available in the forms you are used to. However, a small subset of numpy is currently under development, and matplotlib shouldn’t be far behind. This however, exposes a problem with MicroPython. There are at least eight different implementations of MicroPython (one for each different basic board type) out there, and drivers and libraries for one board don’t necessarily work on another, and, in many instances, isn’t even available on the board you are trying to develop for. To make matters worse, CircuitPython, while a different port of MicroPython, is not compatible, and is coded, for the most part, differently than MicroPython. Libraries don’t move from one to another.

Penchons-nous un instant sur MicroPython en général. MicroPython est le fruit de l'imagination de MicroPython.org et de son fondateur, le programmeur et physicien australien Damien George, qui l'ont créé pour soutenir leur marque de microcontrôleurs. Le langage MicroPython est un sous-ensemble spécial de Python 3.4, conçu à l'origine pour fonctionner sur leurs propres microcontrôleurs pyboard. Bien qu'il s'agisse d'une petite carte très intéressante avec de nombreuses fonctionnalités, son prix est d'environ 30 $ US. Ça la met hors de portée de nombreux développeurs qui disposent d'un budget restreint pour leurs travaux de loisir.

Aussi cool que cela puisse paraître, il y a quelques limitations. Si vous programmez normalement en utilisant Python 3.7+, vous trouverez que des choses comme les « f-strings » retournent des erreurs de syntaxe.

À ce jour, des bibliothèques comme numpy, pandas et matplotlib ne sont pas disponibles sous les formes auxquelles vous êtes habitués. Cependant, un petit sous-ensemble de numpy est en cours de développement, et matplotlib ne devrait pas tarder. Cela révèle cependant un problème avec MicroPython. Il existe au moins huit implémentations différentes de MicroPython (une pour chaque type de carte de base), et les pilotes et bibliothèques pour une carte ne fonctionnent pas nécessairement sur une autre, et, dans de nombreux cas, ne sont même pas disponibles sur la carte pour laquelle vous essayez de développer. Pour aggraver les choses, CircuitPython, bien qu'étant un portage différent de MicroPython, n'est pas compatible avec, et est codé, en grande partie, différemment de MicroPython. Les bibliothèques ne passent pas de l'un à l'autre.

For years, I’ve told my son, and many others “If you live or work on the bleeding edge, you WILL get cut!”, and believe me, that’s SO very true when dealing with Microcontrollers. I’ll explain more in a little bit. All that having been said, I won’t only deal with the RPi Pico board in this series of articles. Yes, I will concentrate on it for a few articles, but I also intend on talking about the Adafruit FeatherS2 microcontroller and some of the Arduino boards, and maybe some of the boards from Sparkfun and others as my budget allows.

Pendant des années, j'ai dit à mon fils, et à beaucoup d'autres, « Si tu vis ou travailles à la pointe de l'innovation, tu te piqueras », et croyez-moi, c'est tout à fait vrai lorsqu'il s'agit de microcontrôleurs. Je vais vous en dire plus dans un instant.

Tout cela étant dit, je ne traiterai pas uniquement de la carte RPi Pico dans cette série d'articles. Oui, je vais me concentrer sur elle pendant quelques articles, mais j'ai aussi l'intention de parler du microcontrôleur Adafruit FeatherS2 et de certaines cartes Arduino, et peut-être de certaines cartes de Sparkfun et d'autres si mon budget le permet.

Raspberry Pi Pico As I write this, the RPi Pico has been available for a little over one month. As you can see in the image below, it’s a tiny little thing that’s about 2” x 1”. You don’t actually need to have any external LEDs or sensors to see the board work, since there is an addressable LED already on the board. You don’t even need to solder the header pins for our first two projects. Of course, you’ll also need a computer to talk to and power the RPi Pico. You can use any type of computer. Many people use a Raspberry Pi 3 or 4, and I use my normal Linux Desktop. I am sure that it also will work on a Windows or Mac PC.

Raspberry Pi Pico

Au moment où j'écris ces lignes, le RPi Pico est disponible depuis un peu plus d'un mois. Comme vous pouvez le voir sur l'image ci-dessous, c'est une toute petite chose d'environ 5 x 2,5 cm.

Il n'est pas nécessaire d'avoir des LED ou des capteurs externes pour que la carte fonctionne, puisqu'il y a déjà une LED adressable sur la carte. Vous n'avez même pas besoin de souder les broches de connexion pour nos deux premiers projets.

Bien entendu, vous aurez également besoin d'un ordinateur pour communiquer avec la RPi Pico et l'alimenter. Vous pouvez utiliser n'importe quel type d'ordinateur. De nombreuses personnes utilisent un Raspberry Pi 3 ou 4, et j'utilise mon ordinateur de bureau Linux normal. Je suis sûr que cela fonctionnera également sur un PC Windows ou Mac.

In addition, you will need a copy of Thonny IDE. If you are using a Raspberry Pi as your connection to the Pico, you probably already have Thonny. Just make sure that it’s version 3.3.3 or better. If you are using a Linux or other OS PC, you probably will need to download it. You need version 3.3.3 or greater. The latest version (as of this writing) is 3.3.5. To install it on your Linux machine, you can simply use wget in a terminal… wget -O thonny-latest.sh https://thonny.org/installer-for-linux If you don’t have wget, you can install it by using: sudo apt install wget Once you have the file, change the permission to executable, then run it from the terminal command prompt.

En outre, vous aurez besoin d'une copie de l'IDE Thonny. Si vous utilisez un Raspberry Pi pour vous connecter au Pico, vous avez probablement déjà Thonny. Assurez-vous simplement qu'il s'agit de la version 3.3.3 ou supérieure. Si vous utilisez un PC sous Linux ou un autre système d'exploitation, vous devrez probablement le télécharger. Vous avez besoin de la version 3.3.3 ou supérieure. La dernière version (au moment où j'écris ces lignes) est la 3.3.5. Pour l'installer sur votre machine Linux, vous pouvez simplement utiliser wget dans un terminal :

wget -O thonny-latest.sh https://thonny.org/installer-for-linux

Si vous n'avez pas wget, vous pouvez l'installer en utilisant :

sudo apt install wget

Une fois que vous avez le fichier, changez la permission en exécutable, puis lancez-le depuis l'invite de commande du terminal.

Now start Thonny, and get your RPi Pico and Micro USB cable ready. On the Pico, hold down the white BOOTSEL button and, while holding it down, plug in the cable. Make sure the other end is connected to your computer. In a moment, you will see a new file manager window pop open. Once you see this window, you can release the BOOTSEL button. Now back to Thonny, and select Run|Select Interpreter from the main menu. You should see a window pop up that looks something like this: Click on the [Install] button; you should see it start to download the MicroPython for the Pico. When it’s finished, you will see a window like this… Now we can start programming!

Maintenant, démarrez Thonny, et préparez votre RPi Pico et votre câble Micro USB. Sur le Pico, maintenez le bouton BOOTSEL blanc enfoncé et, tout en le maintenant enfoncé, branchez le câble. Assurez-vous que l'autre extrémité est connectée à votre ordinateur. Dans un instant, vous verrez apparaître une nouvelle fenêtre de gestion des fichiers.

Dès que vous voyez cette fenêtre, vous pouvez relâcher le bouton BOOTSEL. Revenez maintenant à Thonny, et sélectionnez Run|Select Interpreter dans le menu principal. Vous devriez voir apparaître une fenêtre qui ressemble à quelque chose comme ceci :

Cliquez sur le bouton [Install] ; vous devriez voir démarrer le téléchargement de MicroPython pour le Pico. Lorsque le téléchargement est terminé, vous verrez une fenêtre comme celle-ci :

Maintenant, nous pouvons commencer à programmer !

Project #1 In project #1, we’ll do a very simple program that simply blinks the onboard LED. The code is below. Now before I explain the code, click on the Run button in Thonny and see what happens. You should see the LED near the USB port come on for about 3 seconds and then go off for three seconds, and start all over again. Now I’ll explain the code. First, you will need to import two libraries, machine and utime. The machine library will almost always be needed, and utime is a MicroPython time library similar to the “big brother Python” time library, only smaller and designed just for MicroPython.

Projet n° 1

Dans le projet n° 1, nous allons faire un programme très simple qui fait seulement clignoter la LED intégrée. Le code est ci-dessous.

Avant que je n'explique le code, cliquez sur le bouton Run dans Thonny et voyez ce qui se passe. Vous devriez voir la LED près du port USB s'allumer pendant environ 3 secondes, puis s'éteindre pendant 3 secondes, et recommencer.

Je vais maintenant vous expliquer le code. Tout d'abord, vous devrez importer deux bibliothèques, machine et utime. La bibliothèque machine sera presque toujours nécessaire, et utime est une bibliothèque temporelle de MicroPython similaire à la bibliothèque temporelle du « grand frère Python », mais plus petite et conçue uniquement pour MicroPython.

Next, we create an object by pointing to the pin number and telling it whether it’s supposed to be an input or an output pin. We’ll call this object “led_onboard”. Notice that we are using the GPIO number, not the physical pin number. Other systems like CircuitPython use the physical pin instead of the GPIO number. We’ll get more into that another time, but for now, just remember that when you are using MicroPython, you will want to use the GPIO designation. Next, we create a forever loop that sets the value to 1 (high) or 0 (low). When the pin switches to high, the voltage (in this case) goes to 3.3 volts which turns on the LED. When the pin switches to low, the voltage goes to 0 volts. Once we set the value to 1, we sleep for three seconds then set the value 0 and sleep 3 more seconds, then start it all over again. Be sure to save your code on your main machine, just in case something happens to your Pico.

Ensuite, nous créons un objet en pointant le numéro de la broche en lui indiquant s'il s'agit d'une broche d'entrée ou de sortie. Nous appellerons cet objet « led_onboard ». Remarquez que nous utilisons le numéro GPIO, et non le numéro de broche physique. D'autres systèmes comme CircuitPython utilisent le numéro du picot physique au lieu de GPIO. Nous reviendrons sur ce sujet une autre fois, mais pour l'instant, souvenez-vous que lorsque vous utilisez MicroPython, vous devez utiliser la désignation des GPIO.

Ensuite, nous créons une boucle sans fin qui fixe la valeur à 1 (haut) ou 0 (bas). Lorsque la broche passe au niveau haut, la tension (dans ce cas) passe à 3,3 volts, ce qui allume la LED. Lorsque la broche passe au niveau bas, la tension passe à 0 volt. Une fois que nous avons fixé la valeur à 1, nous veillons pendant trois secondes, puis nous fixons la valeur à 0 et nous veillons encore trois secondes, puis nous recommençons.

Assurez-vous de sauvegarder votre code sur votre machine principale, juste au cas où quelque chose arriverait à votre Pico.

Project #2 In project #2, we’ll make the onboard LED do something a little bit different. Rather than just blinking on and off, we’ll use the PWM (Pulse Width Modulation) function. We’ve done this a long time ago on the Raspberry Pi. I won’t go too deeply into the code with you right now, we’ll revisit this in a future article, plus, as I said, we did a similar project on the Raspberry Pi a few years ago. I just think that the throbbing LED is cool and especially with the onboard led. You should be able to find the code presented here at my github repository at: https://github.com/gregwa1953/MicroThisAndMicroThat

Projet n° 2

Dans le projet n° 2, nous allons faire en sorte que la LED intégrée fasse quelque chose d'un peu différent. Au lieu de seulement clignoter, nous allons utiliser la fonction PWM (Pulse Width Modulation - Modulation de largeur d'impulsion). Nous l'avons déjà fait il y a longtemps sur le Raspberry Pi.

Je ne vais pas m'attarder sur le code pour le moment, nous y reviendrons dans un prochain article. De plus, comme je l'ai dit, nous avons réalisé un projet similaire sur le Raspberry Pi il y a quelques années. Je pense simplement que la LED pulsée est cool, surtout avec la LED intégrée.

Vous devriez pouvoir trouver le code présenté ici sur mon dépôt github à l'adresse suivante : https://github.com/gregwa1953/MicroThisAndMicroThat.

Since we have used the onboard LED for these two projects, there were no external components required. However, for our upcoming projects, we’ll need a breadboard, LEDs, jumper wires, resistors, etc. One word of warning though. ALL voltages for the RPi Pico are 3.3 volts. Many older sensors and displays are 5 volt, and will cause problems with the Pico, up to and including burning out the Pico. You should consider getting a Logic Level Converter that will safely change the voltages from 5 volts to 3 volts. Here are two sources that can get you started in your search… https://www.sparkfun.com/products/12009 https://www.adafruit.com/product/757 Also, before you start interfacing devices to your Pico, you should get your hands on the pinout of the board. You can download a copy of the RPi Pico pinout for your easy reference… https://datasheets.raspberrypi.org/pico/Pico-R3-A4-Pinout.pdf

Puisque nous avons utilisé la LED intégrée pour ces deux projets, aucun composant externe n'a été nécessaire. Cependant, pour nos prochains projets, nous aurons besoin d'un circuit d'essai, de LED, de fils de liaison, de résistances, etc. Un mot d'avertissement cependant. TOUS les voltages pour la RPi Pico sont en 3,3 volts. De nombreux capteurs et écrans plus anciens sont en 5 volts et causeront des problèmes avec le Pico, pouvant aller jusqu'à le brûler. Vous devriez envisager de vous procurer un convertisseur de niveau logique qui fera passer les tensions de 5 à 3 volts en toute sécurité. Voici deux sources qui peuvent vous aider dans votre recherche :

https://www.sparkfun.com/products/12009

https://www.adafruit.com/product/757

En outre, avant de commencer à interfacer des appareils à votre Pico, vous devez mettre la main sur le brochage de la carte. Vous pouvez télécharger une copie du brochage du RPi Pico pour vous y référer facilement :

https://datasheets.raspberrypi.org/pico/Pico-R3-A4-Pinout.pdf

One final thought. Earlier I said “If you live or work on the bleeding edge, you WILL get cut!”. The RPi Pico has only been out a little over a month as I write this. The MicroPython for the Pico (http://micropython.org/download/rp2-pico/) seems to be updated on a daily basis and is missing many of the “standard” modules that other boards enjoy. CircuitPython has other things that are missing for the Pico, and is being worked on as fast as the programmers can get the code out. There are so many displays and sensors out there that have no current support on the Pico either under MicroPython or CircuitPython, or have support on one, but not the other. There is very limited support for using WiFi on the Pico at this point. I suppose this is due to the fact that the Raspberry Pi group never thought that anyone would need networking support on a board this small and low cost.

Une dernière pensée. Plus haut, j'ai dit « Si vous vivez ou travaillez à la pointe de l'innovation, vous vous piquerez ! » Au moment où j'écris ces lignes, la RPi Pico n'est sortie que depuis un peu plus d'un mois. Le MicroPython pour le Pico (http://micropython.org/download/rp2-pico/) semble être mis à jour quotidiennement et il lui manque de nombreux modules « standard » dont bénéficient d'autres cartes. CircuitPython a d'autres choses qui manquent pour le Pico et les programmeurs travaillent aussi vite que possible pour sortir le code nécessaire. Il existe un grand nombre d'écrans et de capteurs qui ne sont pas pris en charge par le Pico, que ce soit par MicroPython ou CircuitPython, ou qui sont pris en charge par l'un d'eux, mais pas par l'autre. Le support pour l'utilisation du WiFi sur le Pico est très limité pour le moment. Je suppose que cela est dû au fait que le groupe Raspberry Pi n'a jamais pensé que quelqu'un aurait besoin d'un support du réseau sur une carte aussi petite et peu coûteuse.

This is all to be expected this early in the process. Sales of the Pico are so swift, that many retailers haven’t gotten a single stick and are still in a “back order” mode, or they have gotten some, but sold out within a day or two. The Arduino RP2040 device is coming with WiFi support, but still doesn’t have a release date or price. Sparkfun and Adafruit have boards coming out based on the RP2040, but still haven’t been released. If your display or sensor is extremely old or had limited sales, you might have to “bite the bullet” and consider getting a newer version that does have support, or look into writing your own driver library. I’m certain that in the next month or so, many of these issues will be solved. I don’t think that anyone thought that the Pico or the RP2040 would take off as strongly as it has. The price of the Pico makes it perfect for someone who wants to break into Microcontroller programming and experimentation. Until next time, as always; stay safe, healthy, positive and creative!

Il fallait s'y attendre au début du processus. Les ventes du Pico sont si rapides que de nombreux détaillants n'ont pas encore reçu la moindre pièce et sont toujours en mode « précommande », ou bien ils en ont reçu quelques-unes, mais les stocks ont été épuisés en un jour ou deux. Le dispositif Arduino RP2040 arrive avec le support WiFi, mais n'a toujours pas de date de sortie ni de prix. Sparkfun et Adafruit ont des cartes à venir basées sur le RP2040, mais elles ne sont toujours pas disponibles. Si votre écran ou votre capteur est extrêmement vieux ou a été vendu en quantités limitées, vous devrez peut-être « vous serrer la ceinture » et envisager d'obtenir une version plus récente qui est prise en charge, ou envisager la possibilité d'écrire votre propre bibliothèque de pilotes.

Je suis certain que d'ici un mois environ, la plupart de ces problèmes seront résolus. Je ne pense pas que quiconque ait pensé que le Pico ou le RP2040 connaîtrait un tel essor. Le prix du Pico le rend parfait pour quelqu'un qui veut se lancer dans la programmation et l'expérimentation de microcontrôleurs.

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

issue167/micro_this_micro_that.txt · Dernière modification : 2021/04/04 17:24 de andre_domenech