Outils pour utilisateurs

Outils du site


issue170:micro-ci_micro-la

I want to apologize if this month’s article seems a bit dis-jointed. I’ve been having multiple medical issues the last few weeks, and I REALLY wanted to get this article out to you. Last month, I told you that we will be looking at the SparkFun Thing Plus ESP-32 WROOM (https://www.sparkfun.com/products/15663) and we will. However, I do want to bring some news of the RP2040 world and the Raspberry Pi Pico first. Arduino has finally released their Nano RP2040 Connect which costs about $26 USD. It supports Wi-Fi, Bluetooth, and Bluetooth Low-Energy (v4.2), a built-in microphone for sound or voice activation, an RGB LED, and a six-axis motion sensor.

Je tiens à m'excuser si l'article de ce mois-ci semble un peu décousu. J'ai eu plusieurs problèmes médicaux ces dernières semaines, mais je voulais VRAIMENT vous faire parvenir cet article.

Le mois dernier, je vous ai dit que nous allions examiner le SparkFun Thing Plus ESP-32 WROOM (https://www.sparkfun.com/products/15663) et c'est ce que nous allons faire. Cependant, je veux d'abord vous apporter des nouvelles du monde du RP2040 et du Raspberry Pi Pico.

Arduino a enfin sorti son Nano RP2040 Connect qui coûte environ 26 dollars US. Il prend en charge les technologies Wi-Fi, Bluetooth et Bluetooth Low-Energy (v4.2) ; il a un microphone intégré pour le son ou l'activation vocale, une LED RVB et un capteur de mouvement à six axes.

Seeed Studio has released the Wio RP2040 mini development board which includes 2.4 GHz 802.11b/g/n WiFi 4 supporting AP & station modes, but no Bluetooth support. The estimated price will be about $13 USD and is available only for pre-order at this point. It’s still unclear when the board will start shipping. Finally, there is really big news from Adafruit. I’ll quote the headline from Tom’s Hardware site…”CircuitPython Libraries Slither Into MicroPython on the Raspberry Pi Pico”. That’s right. This is a big thing for the RPi Pico, since eventually the entire CircuitPython library should be available to MicroPython users. Currently, there are many drivers that don’t work, but it’s early days yet. Congratulations to Adafruit for making this move! You can find more about it at https://learn.adafruit.com/circuitpython-libraries-on-micropython-using-the-raspberry-pi-pico .

Seeed Studio a sorti la mini-carte de développement Wio RP2040 qui inclut le WiFi 4 2.4 GHz 802.11b/g/n supportant les modes AP et station, mais sans support du Bluetooth. Le prix est estimé à environ 13 dollars US et elle n'est disponible pour le moment qu'en pré-commande. On ne sait toujours pas quand la carte sera livrée.

Enfin, il y a de très grandes nouvelles en provenance d'Adafruit. Je vais citer le titre du site Tom's Hardware… « Les bibliothèques CircuitPython se glissent dans MicroPython sur le Raspberry Pi Pico. » C'est bien cela. C'est une grande chose pour le RPi Pico, puisqu'à terme, l'ensemble de la bibliothèque CircuitPython devrait être disponible pour les utilisateurs de MicroPython. Actuellement, de nombreux pilotes ne fonctionnent pas, mais on n'en est qu'aux débuts. Félicitations à Adafruit pour cette initiative ! Vous pouvez trouver plus d'informations à ce sujet sur https://learn.adafruit.com/circuitpython-libraries-on-micropython-using-the-raspberry-pi-pico.

Sparkfun Thing Plus 32 Wroom On to the real subject of my article for this month. The SparkFun Thing Plus 32 Wroom is an awesome little microcontroller and easily runs MicroPython. The price of the board is a bit steep, about $21 USD. If the cost is too high for your budget, you can find a similar generic board with the Wroom WiFi chip on the web. I found an Aokin ESP32 Development board from Amazon in a three-pack for just under $17 USD. The pinout and form factor between the two are different, but the same MicroPython firmware works on both. Just be sure to find a pinout for whichever board you choose. In addition, the generic ESP32 Development board might not fit properly on your breadboard. For the Generic board, you can get the pinout at https://circuits4you.com/2018/12/31/esp32-devkit-esp32-wroom-gpio-pinout/, as well as other places. For the Sparkfun Thing Plus, see the link at the top of this article. Both boards support 2.4 Ghz WiFi and Bluetooth as well as capacitive touch sensors, Hall sensor (magnetic sensor) and other things. Below is the pinout for the Sparkfun Thing Plus 32 WROOM… Above is the ESP32 Generic Dev board… Now, let’s get into our projects for this month…

Sparkfun Thing Plus 32 Wroom

Venons-en au véritable sujet de mon article de ce mois-ci. Le SparkFun Thing Plus 32 Wroom est un petit microcontrôleur génial qui fait tourner facilement MicroPython. Le prix de la carte est un peu élevé, environ 21 dollars US. Si le prix est trop élevé pour votre budget, vous pouvez trouver une carte générique similaire avec la puce WiFi Wroom sur le Web. J'ai trouvé une carte de développement Aokin ESP32 sur Amazon dans un pack de trois pour un peu moins de 17 dollars US. Le brochage et le format des deux cartes sont différents, mais le même firmware MicroPython fonctionne sur les deux. Assurez-vous simplement de trouver le brochage de la carte que vous choisissez. En outre, la carte de développement ESP32 générique peut ne pas s'adapter correctement à votre plaque d'essai.

Pour la carte générique, vous pouvez obtenir le brochage sur https://circuits4you.com/2018/12/31/esp32-devkit-esp32-wroom-gpio-pinout/, ainsi qu'à d'autres endroits. Pour la carte Sparkfun Thing Plus, voir le lien en haut de cet article.

Les deux cartes prennent en charge le WiFi 2,4 Ghz et le Bluetooth, ainsi que les capteurs tactiles capacitifs, le capteur de Hall (capteur magnétique) et d'autres éléments.

Vous trouverez ci-dessous le brochage de la carte Sparkfun Thing Plus 32 WROOM :

Ci-dessus, la carte de développement générique ESP32.

Maintenant, entrons dans nos projets de ce mois-ci.

Project Program #1 - TouchPad Both the SparkFun Thing Plus and the generic ESP32 development board come with multiple touchpad sensor inputs. For the Thing Plus, there are 8 that are broken out to the external pins. For the Generic that I am using, there are 9 broken out and one that is set to GPIO 0. Just which pins are which input, will be shown on the pinout diagram for your board. When you specify the pin number, be sure to use the GPIO pin number, not the touch number or the physical pin. In this case, we will simply use a male-to-male jumper connected to GPIO pin #27 as our input “pad” denoted as Touch7. The import and setup will be as follows… import machine import utime touch7 = machine.TouchPad(machine.Pin(27))

Programme du projet n° 1 - Pavé tactile

Le SparkFun Thing Plus et la carte de développement générique ESP32 sont tous deux dotés de plusieurs entrées de capteur de pavé tactile. Pour le Thing Plus, il y en a 8 qui sont réparties sur les broches externes. Pour le Generic que j'utilise, il y en a 9 qui sont réparties et une qui est réglée sur GPIO 0. Les broches qui correspondent à chaque entrée sont indiquées sur le diagramme de brochage de votre carte. Lorsque vous spécifiez le numéro de broche, assurez-vous d'utiliser le numéro de broche GPIO, et non le numéro de touche ou la broche physique. Dans ce cas, nous utiliserons simplement un cavalier mâle-mâle connecté à la broche GPIO n° 27 comme notre « pavé » d'entrée désigné par Touch7. L'importation et la configuration seront les suivantes…

import machine

import utime

touch7 = machine.TouchPad(machine.Pin(27))

Now (top right), we’ll create a variable called lowvalue and initialize it to 1000. When running, the touch pad actually floats between 700 and 600. Then we start a “forever loop”. We’ll read the value of the touch pin and compare that with the last recorded lowvalue figure. If the current touchvalue is lower than the last lowvalue, we set lowvalue to the touchvalue. We also print the lowvalue at this point. Finally we sleep for 100 milliseconds and loop again. We can use the {Stop} button in Thonny to quit the program. Here is what the printout looks like. It takes about 1 ½ to 2 seconds to get to the lowest value. LowValue = 677 LowValue = 671 LowValue = 667 LowValue = 658 LowValue = 616 LowValue = 456 LowValue = 390 LowValue = 347 LowValue = 227 LowValue = 128 LowValue = 107 LowValue = 100 LowValue = 94 LowValue = 92 LowValue = 88 LowValue = 87 Now (below), we can modify the program a little bit to allow the program to self terminate…

Maintenant (en haut à droite), nous allons créer une variable appelée lowvalue et l'initialiser à 1000. Lors de l'exécution, le pavé tactile flotte en fait entre 700 et 600. Ensuite, nous démarrons une « boucle éternelle ». Nous allons lire la valeur de la touche et la comparer avec la dernière valeur basse enregistrée. Si la valeur actuelle de la touche est inférieure à la dernière valeur basse, nous réglons la valeur basse sur la valeur de la touche. Nous imprimons également la valeur basse à ce stade. Enfin, nous dormons pendant 100 millisecondes et bouclons à nouveau. Nous pouvons utiliser le bouton {Stop} de Thonny pour quitter le programme.

Voici à quoi ressemble l'impression. Il faut environ 1,5 à 2 secondes pour atteindre la valeur la plus basse.

LowValue = 677 LowValue = 671 LowValue = 667 LowValue = 658 LowValue = 616 LowValue = 456 LowValue = 390 LowValue = 347 LowValue = 227 LowValue = 128 LowValue = 107 LowValue = 100 LowValue = 94 LowValue = 92 LowValue = 88 LowValue = 87

À présent (ci-dessous), nous pouvons modifier un peu le programme pour permettre au programme de se terminer automatiquement :

Notice that we haven’t changed it that much. We just added an assignment to a variable called loopit, changed the while statement to “while loopit:” instead of “while True:”, and then check to see if the lowvalue is less than 90 as a “trigger”. If it is, then we set the loopit value to False to make the loop fail. I have to hold and gently squeeze the male jumper to get the value to go low enough to trigger the exit. Project Program #2 - Network Programming This is a simple example of how to connect to your local router. All it really does is to connect to the router with your password, obtain an IP address, and print it. We’ll cover a more complete example in a future article. First, we need to import the network library and set up the essid and password. Be sure to change these to your real values. import network essid = 'YourNetworkRouter' passwd = 'YourNetworkPassword'

Remarquez que nous ne l'avons pas beaucoup modifié. Nous avons simplement ajouté une affectation à une variable appelée loopit, modifié l'instruction while en « while loopit : » au lieu de « while True : », puis vérifié si la valeur basse est inférieure à 90 comme « déclencheur ». Si c'est le cas, nous mettons la valeur de loopit à False pour faire échouer la boucle.

Je dois tenir et presser doucement le cavalier mâle pour que la valeur soit suffisamment basse pour déclencher la sortie.

Programme du projet n° 2 - Programmation du réseau

Ceci est un exemple simple de la façon de se connecter à votre routeur local. Tout ce qu'il fait réellement est de se connecter au routeur avec votre mot de passe, obtenir une adresse IP et l'imprimer. Nous aborderons un exemple plus complet dans un prochain article.

Tout d'abord, nous devons importer la bibliothèque réseau et configurer l'essid et le mot de passe. Veillez à les remplacer par vos valeurs réelles.

import network

essid = 'Votre RouteurRéseau'

passwd = 'Votre mot de passe réseau'

Now (top right) we’ll create the function to do the actual communications with the router (essid). We set the network object (wlan) to station mode, which is like a “normal” computer on the network. You could also set it up as an access point. Next, we set the network object to active and then try to connect. Once we have connected, we print out the network information (ip address, etc). The final line calls the connection function. As I said, this is a very simple example that really does nothing other than connect to the local router and return an IP address. Using sockets will be covered in a future article. Project Program #3 - Web Server and DHT-11/22 Our final project for this month involves using the ESP32/Sparkfun 32 Thing Plus as a web server as well as DHT-11/22 Temperature/Humidity sensor reader, and a touchpad and button display program. Below is what it looks like when it’s running…

Maintenant (en haut à droite), nous allons créer la fonction pour effectuer les communications réelles avec le routeur (essid). Nous définissons l'objet réseau (wlan) en mode station, qui est comme un ordinateur « normal » sur le réseau. Vous pouvez également le configurer comme un point d'accès. Ensuite, nous définissons l'objet réseau comme actif, puis nous essayons de nous connecter. Une fois la connexion établie, nous imprimons les informations du réseau (adresse IP, etc.). La dernière ligne appelle la fonction de connexion.

Comme je l'ai dit, il s'agit d'un exemple très simple qui ne fait rien d'autre que de se connecter au routeur local et de renvoyer une adresse IP. L'utilisation des « sockets » sera abordée dans un prochain article.

Programme du projet #3 - Serveur Web et DHT-11/22

Notre projet final pour ce mois-ci implique l'utilisation de l'ESP32/Sparkfun 32 Thing Plus comme serveur Web ainsi que le lecteur de capteur de température/humidité DHT-11/22, et un programme d'affichage de pavé tactile et de boutons. Voici à quoi il ressemble pendant qu'il fonctionne :

The entire project is described in detail at: https://itywik.org/2018/10/30/eight-micropython-python-experiments-for-the-esp32/. This project uses the PicoWeb library which can be found at https://github.com/pfalcon/picoweb. Of course you need to add Picoweb and the dependencies. You can try to follow the instructions in the link for the project itself, or you can use upip within the Thonny REPL. You will need to install micropython-pkg_resources, ulogging, uasyncio and picoweb. You will need to do an import upip at the REPL command line to be able to use it. import upip upip.install('micropython-pkg_resources') upip.install('micropython-ulogging') upip.install('micropython-uasyncio') upip.install('picoweb') You can find out more about upip at: https://docs.micropython.org/en/latest/reference/packages.html

L'ensemble du projet est décrit en détail à l'adresse suivante : https://itywik.org/2018/10/30/eight-micropython-python-experiments-for-the-esp32/.

Ce projet utilise la bibliothèque PicoWeb qui se trouve à l'adresse https://github.com/pfalcon/picoweb.

Bien entendu, vous devez ajouter Picoweb et ses dépendances. Vous pouvez essayer de suivre les instructions dans le lien pour le projet lui-même, ou vous pouvez utiliser upip dans le REPL de Thonny. Vous devrez installer micropython-pkg_resources, ulogging, uasyncio et picoweb. Vous devrez faire un import d'upip par la ligne de commande du REPL pour pouvoir l'utiliser.

import upip

upip.install('micropython-pkg_resources')

upip.install('micropython-ulogging')

upip.install('micropython-uasyncio')

upip.install('picoweb')

Vous pouvez trouver plus d'informations sur upip à l'adresse suivante : https://docs.micropython.org/en/latest/reference/packages.html.

There is the code, diagrams and step-by-step projects leading up to the full webserver project. The code for the webserver project is pretty long and includes both the python file and the index.html file that displays the web information. I won’t duplicate it here, but I will point out a few changes that I had to make to get the project to work the way that I wanted it to. I saved the main code to a file named ESP32-DHT-Touch-Picoweb.py Lines 18, 19 and 20 define the pins for the LEDs. I decided to use only the onboard LED on the ESP32 Dev board which is on pin 2. I changed line 18 to: r_led = machine.Pin(2, machine.Pin.OUT) And I left lines 19 and 20 the same. Line 33 (in my code) needs to be modified to support your network. sta_if.connect('YourNetworkESSID', 'YourPasswordHere')

Il y a le code, les diagrammes et les projets, étape par étape, menant au projet complet de serveur Web. Le code du projet de serveur Web est assez long et comprend à la fois le fichier python et le fichier index.html qui affiche les informations Web. Je ne vais pas le reproduire ici, mais je vais signaler quelques changements que j'ai dû faire pour que le projet fonctionne comme je le voulais.

J'ai enregistré le code principal dans un fichier nommé ESP32-DHT-Touch-Picoweb.py.

Les lignes 18, 19 et 20 définissent les broches pour les LEDs. J'ai décidé de n'utiliser que la LED embarquée sur la carte ESP32 Dev qui est sur la broche 2. J'ai changé la ligne 18 en : r_led = machine.Pin(2, machine.Pin.OUT)

Et j'ai laissé les lignes 19 et 20 telles quelles.

La ligne 33 (dans mon code) doit être modifiée pour supporter votre réseau. sta_if.connect('ESSIDdevotreréseau', 'VotreMotdepasseici')

Line 58 defines the callback for the touchpad timer interrupt handler. I modified lines 62, 70 and 78. They each are an if statement testing the touchpad.read() value to be less than 100. Since I’m just using just wires, not true copper pads, the earlier tests showed that I can achieve a value of under 100, but it takes a number of seconds for it to get that low. So, I changed the test value to less than 200 for all three values. It still takes around 2 ½ seconds to 3 seconds and a fairly tight squeeze to get it to trigger, but it does. So line 62 was changed to: if t7 < 200: Line 70 was changed to: If t8 < 200: And line 78 was changed to: If t9 < 200: Lines 87, 89 and 90 (my code) reference the DHT11 sensor. Since I’m using a DHT22, I had to change the three instances from DHT11 to DHT22. d = dht.DHT22(machine.Pin(23)) dht22_timer = machine.Timer(0) dht22_timer.init(period=1000, mode=machine.Timer.PERIODIC, callback=timerIntHandler_temperature)

La ligne 58 définit le callback pour le gestionnaire d'interruption du timer du pavé tactile. J'ai modifié les lignes 62, 70 et 78. Chacune est une instruction if testant que la valeur de touchpad.read() est inférieure à 100. Puisque je n'utilise que des fils, et non de vraies plaques de cuivre, les tests précédents ont montré que je peux obtenir une valeur inférieure à 100, mais qu'il faut un certain nombre de secondes pour qu'elle soit aussi basse. J'ai donc modifié la valeur du test pour qu'elle soit inférieure à 200 pour les trois valeurs. Il faut encore environ 2,5 à 3 secondes et un serrage assez fort pour qu'il se déclenche, mais il le fait. La ligne 62 a donc été modifiée comme suit : if t7 < 200 :

La ligne 70 a été changée en : if t8 < 200 :

Et la ligne 78 a été changée en : if t9 < 200 :

Les lignes 87, 89 et 90 (mon code) font référence au capteur DHT11. Comme j'utilise un DHT22, j'ai dû changer les trois instances de DHT11 à DHT22.

d = dht.DHT22(machine.Pin(23))

dht22_timer = machine.Timer(0)

dht22_timer.init(period=1000, mode=machine.Timer.PERIODIC, callback=timerIntHandler_temperature)

Also, in the index.html file I made a change to make the temperature and humidity display text smaller. Around line 45, you will find the code: .table-value { font-size: 160px; color: #999; } I found that the font size was way too big for me. I changed it to: .table-value { font-size: 60px; color: #999; } Which worked much better, at least for me. You can make this change if you wish. My code can be found on my github repository at https://github.com/gregwa1953/FCM170_MicroThisAndThat The webserver project code on the repository has my changes in it. Next time, we’ll take a look at NeoPixel devices and how to program them using the ESP-32 and the RPI Pico. Until then, as always; stay safe, healthy, positive and creative!

De plus, dans le fichier index.html, j'ai fait une modification pour rendre le texte d'affichage de la température et de l'humidité plus petit. Vers la ligne 45, vous trouverez le code :

     .table-value {
          font-size : 160px ;
          color : #999 ;
}

J'ai trouvé que la taille de la police était beaucoup trop grande pour moi. Je l'ai changée en :

      .table-value {
          font-size : 60px ;
          color : #999 ;
      }

ce qui fonctionne beaucoup mieux, du moins pour moi. Vous pouvez faire ce changement si vous le souhaitez.

Mon code peut être trouvé sur mon dépôt github à l'adresse https://github.com/gregwa1953/FCM170_MicroThisAndThat. Le code du projet de serveur Web sur le dépôt contient mes modifications.

La prochaine fois, nous verrons les dispositifs NeoPixel et comment les programmer en utilisant l'ESP-32 et le RPI Pico.

D'ici là, comme toujours, restez en sécurité, en bonne santé, positifs et créatifs !

issue170/micro-ci_micro-la.txt · Dernière modification : 2021/06/30 15:55 de andre_domenech