ESP8266 sous MicroPython : Utilisation des cartes MOD-IO2 (connecteur UEXT)
Il y a une quinzaine de jours, nous publions l'article "MicroPython sur ESP8266-EVB d'Olimex" suivit d'un autre article sur l "extension MOD-IO" qui expliquait comment exploiter ses relais, entrées optocoupleurs (24v) et entrées analogiques (3.3v).
Nous allons continuer à exploiter le connecteur UEXT avec la carte MO-IO2.
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).
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-IO2
MOD-IO2 est une carte de développement permettant d'ajouter des relais, entrées analogiques et digitales, PWM
sur n'importe quelles cartes disposant d'un connecteur UEXT ou Bus I2C. Si vous avez besoin de plus d'entrée/sortie (ou entrée analogiques 3.3v) sur
votre projet alors cette carte est le produit qu'il vous faut.
Les cartes MOD-IO2 sont chaînables et adressables. Cela signifie
que vous pouvez connecter plusieurs cartes MOD-IO2 ensembles!
Grâce à la connexion UEXT, le raccordement est enfantin!
Très pratique pour un apprentissage scolaire.
Bibliothèque MOD-IO2
Pour commander facilement cette carte depuis MicroPython, nous avons écrit une bibliothèque nommée modio2.
Celle-ci est disponible sur la page GitHub dédiée au MODIO-2 sous MicroPython.
Téléchargez simplement le fichier modio2.py sur votre MicroContrôleur MicroPython.
Tester la carte MOD-IO2 sous MicroPython
Générer un signal PWM sur MOD-IO2
Il est possible de générer un signal PWM sur les GPIO 5 et 6 de la carte MOD-IO2. L'exemple suivant lit l'entrée analogique sur le GPIO 5 et en utilise la valeur pour fixer le cycle utile de la sortie PWM du GPIO 6.
Ce qui produit le résultat suivant:
Connecter plusieurs MOD-IO2
Il est possible de connecter plusieurs carte MOD-IO2 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-IO2 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 0x21 à 0x22.
A noter que le changement est immédiat, si bien que la carte ne renvoi pas de ACK sous l'adresse 0x21 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.
Nous allons continuer à exploiter le connecteur UEXT avec la carte MO-IO2.
ESP8266-EVB d'Olimex |
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 |
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-IO2
Carte MOD-IO2 |
Carte MOD-IO2 |
Grâce à la connexion UEXT, le raccordement est enfantin!
Très pratique pour un apprentissage scolaire.
Brancher la carte MOD-IO2, UEXT Splitter et ESP8266-EVB ensembles |
Pour commander facilement cette carte depuis MicroPython, nous avons écrit une bibliothèque nommée modio2.
Celle-ci est disponible sur la page GitHub dédiée au MODIO-2 sous MicroPython.
Téléchargez simplement le fichier modio2.py sur votre MicroContrôleur MicroPython.
Tester la carte MOD-IO2 sous MicroPython
# Utilisation du MOD-IO2 d'Olimex avec un ESP8266 sous MicroPython # # Shop: [UEXT Expandable Input/Output board (MOD-IO2)](http://shop.mchobby.be/product.php?id_product=1409) # GitHub: https://github.com/mchobby/esp8266-upy/tree/master/modio2 from machine import I2C, Pin from time import sleep_ms from modio2 import MODIO2 i2c = I2C( sda=Pin(2), scl=Pin(4) ) brd = MODIO2( i2c ) # Adresse par défaut=0x21 # === Manipuler les GPIOs ============================= print( "Afficher le mode des broches") print( brd.gpios.pin_modes ) # Devrait retourner: ['IN', 'IN', 'IN', 'IN', 'IN', 'IN', 'IN'] print( "GPIO 5 - Lecture analogique") brd.gpios.pin_mode( 5, Pin.IN ) for i in range(10): volt = brd.gpios.analog(5) print( "GPIO 5 (AN7) = %s v" % volt ) val = brd.gpios.analog(5, raw=True ) print( "GPIO 5 (AN7) = %s / 1023" % val ) sleep_ms( 1000 ) print( "GPIO 0 - en sortie OUT (allumé puis éteind)" ) brd.gpios.pin_mode( 0, Pin.OUT ) brd.gpios[0] = True sleep_ms( 2000 ) brd.gpios[0] = False print( "GPIO 1,2,3 - en entrée IN" ) brd.gpios.pin_mode( 1, Pin.IN ) brd.gpios.pin_mode( 2, Pin.IN ) brd.gpios.pin_mode( 3, Pin.IN, Pin.PULL_UP ) # la pull up est obligatoire sur pin 3 print( "Afficher le mode des broches") print( brd.gpios.pin_modes ) # Doit afficher ['OUT', 'IN', 'IN', 'IN', 'IN', 'IN', 'IN'] print( "Afficher l'état de toutes les I/O (1/0)" ) print( brd.gpios.states ) # doit afficher [False, False, True, False, False, True, False] # === RELAIS ====================================== # Modifier les états des relais REL1 et REL2. # Les relais sont indexés à partir de 0 print( 'Modif. relais par index' ) brd.relais[0] = True brd.relais[1] = False print( 'Etat Relais[0..1] : %s' % brd.relais.states ) # Doit afficher Relais[0..1] states : [True, False] sleep_ms( 2000 ) # Eteindre tous les relais brd.relais.states = False print( 'Manipuler 1 relais à la fois') for irelay in range( 2 ): print( ' relais %s' % (irelay+1) ) brd.relais[irelay] = True # Allumer sleep_ms( 1000 ) brd.relais[irelay] = False # Eteindre sleep_ms( 500 ) print( 'Manipuler plusieurs relais' ) brd.relais.states = [False, True] sleep_ms( 2000 ) print( 'Activer tous les relais' ) brd.relais.states = True sleep_ms( 2000 ) print( 'Eteindre tous les relais' ) brd.relais.states = False print( "That's the end folks")
Générer un signal PWM sur MOD-IO2
Il est possible de générer un signal PWM sur les GPIO 5 et 6 de la carte MOD-IO2. L'exemple suivant lit l'entrée analogique sur le GPIO 5 et en utilise la valeur pour fixer le cycle utile de la sortie PWM du GPIO 6.
# Test PWM sur le MOD-IO2 d'Olimex avec un ESP8266 sous MicroPython # # Shop: http://shop.mchobby.be/product.php?id_product=1409 # GitHub: https://github.com/mchobby/esp8266-upy/tree/master/modio2 from machine import I2C, Pin from time import sleep_ms from modio2 import MODIO2 i2c = I2C( sda=Pin(2), scl=Pin(4) ) brd = MODIO2( i2c ) # Adresse par défaut=0x21 print( "GPIO 5 - IN") brd.gpios.pin_mode( 5, Pin.IN ) print( "GPIO 6 - PWM" ) brd.gpios.pwm( gpio=6, cycle=0 ) cycle=0 while cycle<255: val = brd.gpios.analog( 5, raw = True ) cycle = val // 4 # de 0..1023 a 0..254 if cycle >= 254: # Assure 100% du cycle utile cycle = 255 brd.gpios.pwm( 6, cycle ) print( "val=%s -> cycle=%s" %(val,cycle) ) sleep_ms( 1000 ) print( "That's the end folks")
Ce qui produit le résultat suivant:
MicroPython v1.9.4-8-ga9a3caad0 on 2018-05-11; ESP module with ESP8266 Type "help()" for more information. >>> >>> import test2pwm GPIO 5 - IN GPIO 6 - PWM val=698 -> cycle=174 val=698 -> cycle=174 val=620 -> cycle=155 val=614 -> cycle=153 val=597 -> cycle=149 val=496 -> cycle=124 val=494 -> cycle=123 val=701 -> cycle=175 val=880 -> cycle=220 val=978 -> cycle=244 val=979 -> cycle=244 val=982 -> cycle=245 val=1023 -> cycle=255 That's the end folks
Connecter plusieurs MOD-IO2
Il est possible de connecter plusieurs carte MOD-IO2 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-IO2 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 0x21 à 0x22.
# Modifier l'adresse de MOD-IO2 d'Olimex vers 0x22 # # Shop: http://shop.mchobby.be/product.php?id_product=1408 # GitHub: https://github.com/mchobby/esp8266-upy/tree/master/modio2 from machine import I2C, Pin from modio2 import MODIO2 i2c = I2C( sda=Pin(2), scl=Pin(4) ) brd = MODIO2( i2c, addr=0x21 ) 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 0x21 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.
- Tutoriel MOD-IO2 (Wiki MCHobby, Français) Utiliser le module I2C MOD-IO2 sous MicroPython (via port UEXT).
- MOD-IO2 GitHub landing page (GitHub ESP8266-upy)
- ESP8266 MicroPython drivers (GitHub)
- Le ESP8266-EVB utilisé dans ce tutoriel pour faciliter le raccordement. Pourrait fonctionner avec un Feather ESP8266 avec le raccordement adéquat.
- Le ESP8266-DEV module équipant la carte ESP8266-EVB.
- Le module MOD-IO2
- Le module UEXT Splitter
- La La gamme IoT/ESP8266 disponible chez MC Hobby
- Un Convertisseur USB-Série TLL
Écrire un commentaire