Ligne 95 : |
Ligne 95 : |
| == Code == | | == Code == |
| === BUS I2C === | | === BUS I2C === |
− | La carte MOD-IO utilise le bus I2C (adresse par défaut est 0x21) pour communiquer avec le MicroContrôleur. | + | La carte MOD-IO2 utilise le bus I2C (adresse par défaut est 0x21) pour communiquer avec le MicroContrôleur. |
| | | |
| Ce bus I2C est disponible sur le connecteur UEXT de notre ESP8266-EVB comme le montre le tableau suivant. | | Ce bus I2C est disponible sur le connecteur UEXT de notre ESP8266-EVB comme le montre le tableau suivant. |
Ligne 101 : |
Ligne 101 : |
| [[Fichier:ESP8266-DEV-12.jpg|480px]] | | [[Fichier:ESP8266-DEV-12.jpg|480px]] |
| | | |
− | En adaptant le code (et les raccordements du bus I2C), vous pourriez tout aussi facilement faire fonctionner des cartes ESP8266 comme {{pl|67|Feather ESP8266 Huzza}} ou {{cl|121|Wemos D1}}. | + | En adaptant le code (et les raccordements du bus I2C), vous pourriez tout aussi facilement faire fonctionner des cartes ESP8266 comme {{pl|67|Feather ESP8266 Huzza}} ou {{cl|121|Wemos D1}} ou même {{pl|570|MicroPython Pyboard}} |
| | | |
− | === GPIO du MOD-IO2 === | + | === Fonctions GPIOs du MOD-IO2 === |
| Voici les différentes fonctionnalités possibles sur le GPIO du MOD-IO2 | | Voici les différentes fonctionnalités possibles sur le GPIO du MOD-IO2 |
| | | |
− | [[Fichier:MICROPYTHON-MOD-IO2-GPIO]] | + | [[Fichier:MICROPYTHON-MOD-IO2-GPIO.png|320px]] |
| | | |
| === Fonctionnalités du MOD-IO2 === | | === Fonctionnalités du MOD-IO2 === |
Ligne 112 : |
Ligne 112 : |
| | | |
| <syntaxhighlight lang="python"> | | <syntaxhighlight lang="python"> |
− | xxx
| + | # 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") |
| + | </syntaxhighlight> |
| + | |
| + | === Exemple PWM === |
| + | PWM est uniquement disponible sur les GPIO GPIO 5 & 6. |
| + | |
| + | Dans l'exemple ci-dessous, un potentiomètre de 10 KOhms permet de fournir une valeur analogique sur le GPIO 5 (lecture en RAW, 0 à 1024). |
| + | |
| + | Cette valeur est ensuite utilisée pour fixer le cycle utile PWM du GPIO 6 (0 à 255). |
| + | |
| + | Comme la lecture analogique fournit un résultat entre 0 et 1024, il faut diviser celle-ci par 4 pour fixer le cycle utile PWM. |
| + | |
| + | Le script s'arrête lorsque le signal PWM atteind 100% du cycle utile. |
| + | |
| + | |
| + | <syntaxhighlight lang="python"> |
| + | # 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") |
| + | </syntaxhighlight> |
| + | |
| + | Ce qui affiche le résultat suivant à l'écran pendant que l'on exécute le script: |
| + | <syntaxhighlight lang="python"> |
| + | 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 |
| + | >>> |
| </syntaxhighlight> | | </syntaxhighlight> |
| | | |
Ligne 132 : |
Ligne 275 : |
| | | |
| i2c = I2C( sda=Pin(2), scl=Pin(4) ) | | i2c = I2C( sda=Pin(2), scl=Pin(4) ) |
− | brd = MODIO2( i2c, addr=0x1 ) | + | brd = MODIO2( i2c, addr=0x21 ) |
| brd.change_address( 0x22 ) | | brd.change_address( 0x22 ) |
| </syntaxhighlight> | | </syntaxhighlight> |