ESP8266 sous MicroPython : Utilisation des cartes MOD-IO (connecteur UEXT)

Il y a une quinzaine de jours, nous publions l'article "MicroPython sur ESP8266-EVB d'Olimex" qui expliquait comment exploiter le relais et le bouton de la carte ESP8266-EVB.
Nous allons maintenant nous pencher sur le connecteur UEXT et cartes d'extensions UEXT.
ESP8266-EVB d'Olimex
Le connecteur UEXT et carte d'extension
L'intérêt de la carte ESP8266-EVB c'est justement son port UEXT, un connecteur IDC 10 broches, qui transporte le bus I2C, bus SPI et interface série (connexion asynchrone).
Mapping UEXT sur ESP8266
Grâce à ce mapping entre port UEXT et ESP8266, nous pouvons envisager de contrôler des cartes d'extension UEXT sous MicroPyhton sans avoir a réaliser un quelconque raccordement :-)

Le code est compatible avec toutes les plateformes MicroPython sous 3.3V. Il suffit de connecter le bus I2C sur les bonnes broches du connecteur UEXT.

Carte MOD-IO
MOD-IO est une carte de développement permettant d'ajouter des entrées analogiques et digitales sur n'importe quelles cartes disposant d'un connecteur UEXT ou Bus I2C. La carte dispose de 4 relais, 4 entrées digitales opto-isolées, 4 entrée analogique (3.3v Max). Hormis les 3 entrées analogiques, la carte MOD-IO est compatible avec le standard industriel en 24 Volts.
La carte MOD-IO
Les cartes MOD-IO sont chaînables et adressables. Cela signifie que vous pouvez connecter plusieurs cartes MOD-IO ensembles!
Grâce à la connexion UEXT, le raccordement est enfantin!
Très pratique pour un apprentissage scolaire.
Brancher la carte MOD-IO, UEXT Splitter et ESP8266-EVB ensembles
Bibliothèque MOD-IO
Pour commander facilement cette carte depuis MicroPython, nous avons écrit une bibliothèque nommée modio.
Celle-ci est disponible sur la page GitHub dédiée au MODIO sous MicroPython.

Téléchargez simplement le fichier modio.py sur votre MicroContrôleur MicroPython.

Tester la carte MOD-IO sous MicroPython
# Utilisation du MOD-IO d'Olimex avec un ESP8266 sous MicroPython
#
# Shop: http://shop.mchobby.be/product.php?id_product=1408
# GitHub: https://github.com/mchobby/esp8266-upy/tree/master/modio

from machine import I2C, Pin
from time import sleep_ms
from modio import MODIO

# Bus I2C sur le connecteur UEXT
i2c = I2C( sda=Pin(2), scl=Pin(4) )
brd = MODIO( i2c ) # Adresse par défaut=0x58

# === Lire les entrées analogiques ===========================
for input_index in range( 4 ):
    print( 'Analogique %s : %s Volts' %( input_index,brd.analogs[input_index] ) ) 

brd.analogs.raw = True
for input_index in range( 4 ):
    print( 'Analogique %s : %s of 1023' %( input_index,brd.analogs[input_index] ) ) 

print( 'Lire toutes les entrées analogiques, mode RAW, en une seule opération' )
print( brd.analogs.states )

print( 'Lire les tensions, en VOLTS, de toutes les entrée analogiques en une seule opération' )
brd.analogs.raw = False # Réactiver la conversion en tension 
print( brd.analogs.states )

# === Lire les entrées Opto-Isolées =========================
print( 'Lire toutes les entrées Opto-Isolées' )
print( brd.inputs.states )
print( 'Lire la 3ieme entrée Opto-Isolée' )
# Python donc indexé à partir de 0!
print( brd.inputs[2] )

# === RELAIS ======================================
# Activer les relais REL1 et REL3 (Python donc indexé à 0)
print( 'Modifier les relais par index' )
brd.relais[0] = True
brd.relais[2] = True
print( 'Etat des Relais[0..3] : %s' % brd.relais.states ) 
sleep_ms( 2000 )
# Eteindre tous les relais
brd.relais.states = False 

print( 'Commander un relais à la fois')
for irelay in range( 4 ):
    print( '   relais %s' % (irelay+1) )
    brd.relais[irelay] = True # Activer
    sleep_ms( 1000 )
    brd.relais[irelay] = False # Désactiver
    sleep_ms( 500 )

print( 'Mettre tous les relais à jour en une seule opération' )
brd.relais.states = [True, True, False, True]
sleep_ms( 2000 )
print( 'Activer tous les relais' )
brd.relais.states = True
sleep_ms( 2000 )
print( 'Désactiver tous les relais' )
brd.relais.states = False

print( "That's the end folks")

Connecter plusieurs MOD-IO
Il est possible de connecter plusieurs carte MOD-IO ensembles. Il faut cependant changer l'adresse de chaque carte pour qu'elle ne rentre pas en conflit avec les autres cartes. La carte MOD-IO retient son adresse I2C dans l'EEPROM. Cette adresse est donc configurable à l'aide d'une fonction.

L'exemple suivant montre comment passer de l'adresse 0x58 à 0x22.
# Modifier l'adresse de MOD-IO d'Olimex vers 0x22
#
# Shop: http://shop.mchobby.be/product.php?id_product=1408
# GitHub: https://github.com/mchobby/esp8266-upy/tree/master/modio 

from machine import I2C, Pin
from modio import MODIO

i2c = I2C( sda=Pin(2), scl=Pin(4) )
brd = MODIO( i2c, addr=0x58 )
brd.change_address( 0x22 )

A noter que le changement est immédiat, si bien que la carte ne renvoi pas de ACK sous l'adresse 0x58 mais 0x22 (ce qui se traduit par une erreur de transmission... mais l'adresse est belle et bien changée).

Tutoriels et GitHub
Vous trouverez de nombreuses autres informations dans le tutoriel et dans les fiches produits ci-dessous.
Où acheter

Aucun commentaire