Modifications

Sauter à la navigation Sauter à la recherche
4 512 octets ajoutés ,  18 novembre 2018 à 08:57
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}}
 +
 
 +
=== Fonctions GPIOs du MOD-IO2 ===
 +
Voici les différentes fonctionnalités possibles sur le GPIO du MOD-IO2
 +
 
 +
[[Fichier:MICROPYTHON-MOD-IO2-GPIO.png|320px]]
    
=== Fonctionnalités du MOD-IO2 ===
 
=== Fonctionnalités du MOD-IO2 ===
Ligne 107 : 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 127 : 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>
29 917

modifications

Menu de navigation