Pour les projets conséquents, les performances de la carte micro-bit se révèlent rapidement insuffisantes, principalement au niveau de la mémoire RAM qui ne fait que 16 ko. Avec cette capacité, si on importe des librairies ou modules de quelques ko, la ’compilation’ se termine souvent par un message MemoryError : memory allocation failed, allocating xxxx bytes.
Pendant la compilation, le code source des librairies/modules et le résultat de la compilation sont stockés en RAM. De ce fait, tous les commentaires et espaces occupent de l’espace mémoire et contribuent à la saturation de celle-ci.
Une alternative intéressante pour rester en micro-python est d’utiliser les cartes pycom https://pycom.io/
Avec leurs nombreux modules réseau sans fil, ces cartes sont particulièrement adaptées au développement d’IOT
Mémoire
Basées sur un ESP32 avec 520 ko de RAM, les cartes pycom sont dotées de 4 Mo de RAM externe et 8 Mo de mémoire flash repoussant très loin les limitations dues aux capacités ’mémoire’.
Interfaces
On retrouve les interfaces de l’ESP32
- ADC (12 bits) jusqu’à 18 canaux ;
- 2 × 8 bits DAC ;
- 10 × capteurs de touché (GPIO de capteur capacitif ) ;
- 4 × SPI ;
- 2 × interfaces I²C ;
- 3 × UART ;
- contrôleur SD
- PWM (jusqu’à 16 canaux) ;
Programmation
La programmation se fait en micro-python avec le logiciel multi-platformes ATOM sur lequel on installe le plugin Pymakr.
Connexion physique
Les échanges avec l’ordinateur se font par la liaison série. On peut utiliser son propre convertisseur USB/UART, mais pour la phase de développement, il est fortement recommandé d’utiliser une carte d’extension.
Il existe d’autres cartes d’extension avec capteur de température, d’humidité, accéléromètre, GPS, RFID, etc
Premier pas
Pour débuter et changer du célèbre Blink, on va commander la Led RGB qui est intégrée à la carte.
import pycom
import time
pycom.heartbeat(False)
for cycles in range(2): # Arreter apres 2 cycles
pycom.rgbled(0x007f00) # vert
time.sleep(4)
pycom.rgbled(0x7f7f00) # jaune
time.sleep(3)
pycom.rgbled(0xee0000) # rouge
time.sleep(2)
pycom.rgbled(0x000000) #eteint