image-1600443478569.png

ESP32-S2

Guide de démarrage sur l'ESP32-S2

Introduction

L'ESP32-S2 est le nouveau microcontrôleur de chez Espressif, pour le moment il n'est pas encore sorti de l'alpha, mais si vous voulez vous amusez avec, voici un guide pour cela.

Je vous conseille le NanoESP32-S2 de MuseLAB (surtout si vous voulez utiliser circuit python)

Un des ports USB est connecté directement à l'ESP32-S2 et l'autre passe par un chipset série (CH340g).

image-1600436202976.jpg

Comparaison ESP32-S2 / ESP32

Ceci est une traduction d’un article de Xose Pérez sur maker.pro datant de septembre 2019.
https://maker.pro/esp8266/tutorial/a-comparison-of-the-new-esp32-s2-to-the-esp32

Avec le déploiement de l’ESP32-S2, il est intéressant de regarder les différences, entre celui-ci et l’ESP32-S2 ainsi que de le comparer avec l’ESP8266.

En août 2014, Espressif (à cette époque une entreprise chinoise inconnu) sort l’ESP8266. Il avec comme objectif d'être une passerelle Wi-Fi pour les autres microcontrôleur jusqu’à ce que quelqu’un se rende compte qu’il avait une capacité de traitement et une mémoire supérieure aux autres microcontrôleurs.

Plus tard, en novembre, le SDK a été rendu publique et le hacker Ivan Grokhotkov, (qui travaille maintenant chez Espressif) a sorti un projet ayant comme objectif le support de l’ESP8266 dans l’IDE Arduino. Et comme on le dit dans les livres, le reste appartient à l’histoire.

L’ESP32 : Une solution aux problèmes de sécurité de l’ESP8266.

Bien que l’ESP8266 a ses limites qui peuvent être parfois pris à la légère, son énorme succès a éclipsé un de ces plus grand problème : la sécurité. Il y a littéralement des centaines d’appareils ménagers qui tournent sur des ESP8266, que cela soit des interrupteurs connectés, des ampoules connectées ou des drivers de LED jusqu’au tueur de moustiques. Malheureusement l’ESP8266 ne fournit aucun moyen pour sécuriser son code et les données qu’ils contiennent. Toute personne ayant un accès physique à ces appareils peuvent avoir accès à des informations sensibles, comme les identifiants Wi-Fi.

Image de l’ESP8266, Source : Espressif

Espressif a sorti l’ESP32 en septembre 2016. L’ESP32 a essayé d’adresser tous les problèmes de son grand frère : Il a plus de GPIO, d’ADC, et aussi un DAC. Il a un processeur double-coeur plus rapide, le Bluetooth, des capteurs tactiles et, le plus important, la gestion du chiffrement matériel et la signature du code.

Pourtant, peu de produits grand public a un ESP32 intégré, la plupart utilisent le « bon vieux » ESP8266. Pourquoi ? Certains disent que c’est à cause de son prix (Digikey vends des modules ESP32 avec comme prix 3.8$ et des ESP8266 à 2.7$). D’autres disent que c’est dû à l’inertie du marché. Peu importe la raison, il semblerait qu’Espressif a réalisé qu’il fallait proposer une autre réponse au marché.

Voici l’ESP32-S2

En mars 2019, des images d’une nouvelle puce étiqueté « Chip7 2-2-A » a fuité. À ce moment-là, il y a beaucoup de spéculation autour de celle-ci : ajoute t'elle le BLE5,  l’USB, ou du Wi-Fi 5Ghz, ou quelque chose d’autres ?
Les spéculations ont pris fin, le mois dernier quand Espressif a annoncé l’ESP32-S2. Bien qu’il existe encore un peu de confusion à propos de ce qu’est l’ESP32-S2, les spécifications sont pourtant connu maintenant.

Le Chip7 2-2-A a été le premier indice que l’ESP32-S2 était en train d’être fabriqué. Image de John Lee

D’après Espressif « Avec une gestion de l’énergie de pointe, des capacités E/S, et des fonctionnalités de sécurité plus avancés, l’ESP32-S2 est le choix idéal pour un large éventail d’objets connectés et d’applications connectés allant des maisons intelligents, aux technologies portatifs. »

Le schéma fonctionnel de l’ESP32. Image tiré du Datasheet de l’ESP32-S2 (PDF)

Dans cette note de presse, l’entreprise chinoise cherche explicitement a visé le marche des objets connectés avec l’ESP32-S2. Il reste certaines choses à savoir à son sujet, en particulier quelques points négatifs. Comparons ces trois cartes pour voir dans quelles catégories chacune d’entre elles se situe.

ESP8266 Vs. ESP32 Vs. ESP32-S2

Regardons les quelques différences entre chacune de ces 3 cartes dans un tableau comparatif.

Lien vers le tableau

Comme vous pouvez le voir, il y a quelques améliorations mais aussi quelques retours en arrière. Le principal grief tourne autour de l’absence du Bluetooth et de l’Ethernet. Ce qui me manque le plus personnellement est le support du CAN, et j’ai des doutes sur le support du temps de vol (TOF) qui pourrait (théoriquement) permettre la localisation en intérieur. D’un autre côté, c’est le premier produit d’Espressif a avoir le support de l’USB intégré.

Quand les premières images du Chip7 est apparu dans les médias, beaucoup on parlait de la possible présence du Wi-Fi 5 Ghz. Je ne vois aucune raison d’ajouter ceci sur un appareil IOT alors que les routeurs modernes continuent a géré la spécification 802.11b depuis maintenant plus de 20 ans. Pourquoi faire une mise à jour vers un protocole certes plus rapide mais plus gourmand en énergie et à la portée plus limitée pour transmettre des données de télémétrie et des commandes (d’une poignée de kilobytes par jour tout au plus ?)

L’absence d’un processeur double-coeur et toutefois contre balancé par un processeur simple cœur LX7 plus rapide et un coprocesseur beaucoup plus puissant. Il a aussi moins de SRAM et de ROM mais supporte toutefois des mémoires externes plus importantes.

Mais la fonctionnalité la plus importante dans ce nouveau microcontrôleur est la présence d’un coprocesseur ULP basé sur l’architecture RISC-V. Cela aura pour effet une consommation électrique très faible et plus de puissance de calcul par rapport à l’ESP32. L’ESP32-S2 est aussi capable de dynamiquement éteindre le transmetteur Wi-Fi quand il n’est pas utilisé pour économiser de l’énergie. On obtient ainsi une consommation réduite même si le Wi-Fi est actif et ping un routeur.

Le datasheet parle d’un mode de basse consommation descendant à 5µA (!!) et 24µA a 1 % de cycle de travail. Cela veut dire qu’il est maintenant possible de faire des appareils Wi-Fi sur batterie, ce qui n’était pas envisageable avec les anciennes versions (sauf si vous voulez changer les batteries toutes les semaines mais voulez vous vraiment cela?)

Est-ce que l’ESP32 vaut le coût ?

J’utilise (et continue à utiliser) des cartes de prototypages ESP8266 ainsi que des appareils en contenant depuis des années maintenant. Mais la sécurité commence à devenir un problème majeur (Enfin !!) et l’ESP8266 n’est pas un microcontrôleur sécurisé. Depuis les 2 dernières années, j’ai vu l’ESP32 gagné de l’importance dans les projets d’objets connectés et trouver sa place dans des projets autour d’appareil informatique (routeur, pont…). Pourtant, l’ESP8266 refuse de disparaître du marché des objets intelligents.

Le nouveau ESP32-S2 a jeté un pavé dans la mare en incluant de nouvelles fonctionnalités intéressantes pour séduire le marché des objets connectés. Il coûte moins cher que l’ESP32 et le support natif de l’USB-OTG, du LCD et de la caméra sont des fonctionnalités géniales pour certains cas d’usages.

Avec l’ESP32-S2, Espressif essaye de remplir le vide entre l’ESP8266 et l’ESP32, que ce soit en termes de fonctionnalité ou de prix. L’ESP32-S2 n’est pas un tueur d’ESP32, mais plutôt un tueur d’ESP8266. J’espère qu’il arrivera à atteindre cet objectif.

Xose Pérez
Développeur IOT et maker. Il est tombé dans le monde de l’embarqué, il y a 10 ans et c’est un monde très fun ! Créateur de l’espurna.io, il écrit aussi pour tinkerman.cat

Circuit Python

Circuit Python

Installation de Circuit Python

Circuit Python 6.0.3 Alpha n'a pas le support WiFi

L'ESP32-S2 a l'USB natif et est donc éligible à CircuitPython ! Adafruit développe officiellement le support pour celui-ci en ce moment

Vous pouvez suivre le développement de celui-ci directement sur youtube
https://www.youtube.com/watch?v=0xyeEGdmLKE&list=PLjF7R1fz_OOXBHlu9msoXq2jQN4JpCk8A

Fonctionnalités testés

Led : ✔️ 
Bouton : ✔️ 
Analog in/out : ❌ 
Sortie audio : ❌ 
Sortie MP3 :
PWM : ✔️  
Servo : ✔️ 
Cap Touch : ❌ 
Internal RGB Led : ✔️  
Neopixel : ✔️ 
DotStar : ❌ (en théorie oui)
UART Serial : ❌(en théorie oui)
I2C : ✔️ (testé avec TSL2561)
HID Keyboard / HID Mouse : ✔️ 
Storage : ✔️ 
CPU Temp : ❌ 

Installation

Source: https://hackspace.raspberrypi.org/issues/34

Prérequis : Python

pip install --user -e .
esptool -h

image-1600437743756.png

esptool -b 921600 write_flash --flash_mode dio --flash_size detect --flash_freq 40m 0x00000 adafruit-circuitpython-espressif_saola_1_wrover-fr-6.0.0-alpha.3.bin

Vous devriez avec un dossier CIRCUITPY

image-1600438013993.png

Conclusion

Et voilà vous avez CircuitPython ! Voici le guide officiel (en anglais) : https://learn.adafruit.com/circuitpython-essentials/circuitpython-digital-in-out

Vous pouvez coder avec n'importe que logiciel (par ex: Visual Studio code) mais je vous recommande Code With Mu
https://codewith.mu/

 

 

Circuit Python

Digital (LED et Boutons)

Source : https://learn.adafruit.com/circuitpython-essentials/circuitpython-digital-in-out​​

Vous êtes perdu ? vous pouvez avoir les commandes disponibles en tapant dir(FONCTION), par ex dir(board)

Contrôler une LED

Il n'y a pas de LED intégré (contrôlable directement du moins), il faut en relier une.

ON/OFF

import board
import digitalio
led = digitalio.DigitalInOut(board.IO0)
led.direction = digitalio.Direction.OUTPUT
led.value = True

PWM

import time
import board
import pulseio
    
led = pulseio.PWMOut(board.IO0, frequency=5000, duty_cycle=0)
    
while True:
    for i in range(100):
        # PWM LED up and down
        if i < 50:
            led.duty_cycle = int(i * 2 * 65535 / 100)  # Up
        else:
            led.duty_cycle = 65535 - int((i - 50) * 2 * 65535 / 100)  # Down
        time.sleep(0.01)

Contrôler la LED avec un bouton

Le bouton utilise le pull resistor interne de l'ESP32

import time
import board
from digitalio import DigitalInOut, Direction, Pull
    
led = DigitalInOut(board.IO0)
led.direction = Direction.OUTPUT
    
switch = DigitalInOut(board.IO1)
switch.direction = Direction.INPUT
switch.pull = Pull.UP
    
while True:
    if switch.value:
        led.value = False
    else:
        led.value = True
    
    time.sleep(0.01)  # debounce delay

 

Circuit Python

Servo

 

import time
import board
import pulseio
from adafruit_motor import servo
    
pwm = pulseio.PWMOut(board.IO3, duty_cycle=2 ** 15, frequency=50)
    
# Create a servo object, my_servo.
my_servo = servo.Servo(pwm)
    
while True:
    for angle in range(0, 180, 5):  # 0 - 180 degrees, 5 degrees at a time.
        my_servo.angle = angle
        time.sleep(0.05)
    for angle in range(180, 0, -5): # 180 - 0 degrees, 5 degrees at a time.
        my_servo.angle = angle
        time.sleep(0.05)

 

Circuit Python

Neopixel

    # CircuitPython demo - NeoPixel
    import time
    import board
    import neopixel
     
    pixel_pin = board.IO18
    num_pixels = 1
     
    pixels = neopixel.NeoPixel(pixel_pin, num_pixels, brightness=0.3, auto_write=False)
     
     
    def wheel(pos):
        # Input a value 0 to 255 to get a color value.
        # The colours are a transition r - g - b - back to r.
        if pos < 0 or pos > 255:
            return (0, 0, 0)
        if pos < 85:
            return (255 - pos * 3, pos * 3, 0)
        if pos < 170:
            pos -= 85
            return (0, 255 - pos * 3, pos * 3)
        pos -= 170
        return (pos * 3, 0, 255 - pos * 3)
     
     
    def color_chase(color, wait):
        for i in range(num_pixels):
            pixels[i] = color
            time.sleep(wait)
            pixels.show()
        time.sleep(0.5)
     
     
    def rainbow_cycle(wait):
        for j in range(255):
            for i in range(num_pixels):
                rc_index = (i * 256 // num_pixels) + j
                pixels[i] = wheel(rc_index & 255)
            pixels.show()
            time.sleep(wait)
     
     
    RED = (255, 0, 0)
    YELLOW = (255, 150, 0)
    GREEN = (0, 255, 0)
    CYAN = (0, 255, 255)
    BLUE = (0, 0, 255)
    PURPLE = (180, 0, 255)
     
    while True:
        pixels.fill(RED)
        pixels.show()
        # Increase or decrease to change the speed of the solid color change.
        time.sleep(1)
        pixels.fill(GREEN)
        pixels.show()
        time.sleep(1)
        pixels.fill(BLUE)
        pixels.show()
        time.sleep(1)
     
        color_chase(RED, 0.1)  # Increase the number to slow down the color chase
        color_chase(YELLOW, 0.1)
        color_chase(GREEN, 0.1)
        color_chase(CYAN, 0.1)
        color_chase(BLUE, 0.1)
        color_chase(PURPLE, 0.1)
     
        rainbow_cycle(0)  # Increase the number to slow down the rainbow

ESP-IDF

ESP-IDF

Installation

Source :

Prérequis

git clone https://github.com/espressif/esp-idf

Installation

Test

Aller sur examples\get-started\hello_world

Vous pouvez rentrer le port en ajoutant -p sinon le port sera détecter automatiquement

On peut configurer l'esp32-s2 avec cette commande

idf.py menuconfig

Arduino

Arduino

Installation

Source : https://tutorial.cytron.io/2020/06/25/program-esp32-s2-using-arduino-ide-unofficial/

Pour vous simplifier la vie, j'ai fait une version prête à l'usage disponible sur Google Drive, décompressez le dossier et lancer Arduino.