MICROPYTHON-MOD-IO2

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche

Introduction

MICROPYTHON-MOD-IO2-01.jpg

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) sur votre projet alors cette carte est le produit qu'il vous faut.

Le connecteur UEXT facilite grandement le raccordement et permet de disposer de 2 relais (5v 250V) et 7 GPIOs (3.3v Max).

Les cartes MOD-IO2 sont chaînables et adressables. Cela signifie que vous pouvez connecter plusieurs cartes MOD-IO & MOD-IO2 ensembles (après avoir modifié leurs adresses I2C) et vous pourrez toutes les commander indépendamment les unes des autres. Au final, cela fait plein de relais, d'entées/sortie et entrées analogiques! MOD-IO2 est propulsé par un microcontrôleur PIC16F1503 et le firmware est disponible en Open-Source chez le fabriquant.

MICROPYTHON-MOD-IO2-02.png

Caractéristiques de la carte:

  • Microcontrôleur PIC16F1503
  • Préchargé avec le firmware opensource d'Olimex.
    Permet un interfaçage facile depuis MicroPython, Arduino et les machines Linux.
  • Bornier 9 connexion pour les 7 GPIOs, 3.3V et GND
  • Jack d'alimentation (12 VDC)
  • 7 GPIOs qui peuvent implémenter différentes fonctionnalités comme I/O, PWM, ANALOG IN out-of-the-box. (vous pouvez modifier le firmware pour implémenter un bus I2C ou SPI).
  • 2 sorties elais 10A 250VAC. Relais avec bornier à vis et LEDs de statut
  • Dimensions 61x52mm

Voyez notre fiche produit pour plus d'informations, schéma, utilisation OlinuXino, etc.

Matériel utilisé

Pour réaliser ce test, nous avons utilisé:

  Description Quantité
ESP8266-EVB
ESP8266-EVB.png
ESP8266 Evaluation Board d'Olimex
disponible ici chez MCHobby
1
MOD-IO2
MOD-IO2.png
Carte MOD-IO2 d'Olimex
disponible ici chez MCHobby
1
UEXT-SPLITTER
UEXT-SPLITTER.png
Multiplicateur de port UEXT. Permettra de brancher la carte + Interface USB-Serie
disponible ici chez MCHobby
1
USB-SERIE-TTL
USB-SERIE-TTL.png
Un cable console pour pouvoir communiquer avec l'ESP8266
disponible ici chez MCHobby
1

Raccordements

Les raccordements sont effectués comme suit:

MICROPYTHON-MOD-IO2-20.png

  • Un potentiomètre de 10K est branché sur le GPIO 5, il servira a contrôler le générateur PWM sur le GPIO 6.
  • Les relais 1 et 2 (sur les 2 relais à disposition) sont activés à tour de rôle par le code Python.

Le raccordement du convertisseur USB-Série est identique à celui décrit dans le tutoriel ESP8266-DEV sous MicroPython.

Etant donné que le l'ESP8266-DEV (et donc ESP8266-EVB) ne disposent pas de convertisseur USB-Série, il sera donc nécessaire d'utiliser un câble console (USB-Série-TTL) pour communiquer avec la carte ESP8266.

UEXT-SERIAL-wiring.jpg

Flasher MicroPython

Pour flasher MicroPython sur l'ESP8266-DEV (module ESP8266) qui équipe la carte d'évaluation d'Olimex (ESP8266-EVB), nous vous proposons les lectures suivantes:

Utiliser MicroPython sur ESP8266 nécessite de Flasher le MicroContrôleur avec le Firmware et d'utiliser des outils appropriés pour communiquer avec lui. Vous trouverez ci-dessous une sélection de tutoriel pour vous préparer. Nous recommandons vivement l'usage de RSHell, même si Ampy reste une solution plus simpliste (mais aussi nettement plus limitée).

Charger MicroPython

Tlogo-feather-load-upy.jpg

Apprenez comment charger le Firmware MicroPython sur une carte Pyboard, ESP8266 (Feather, Wemos, NodeMcu), etc.

RShell

Tlogo-micropython-RShell.jpg

Transférez des fichiers et contrôlez votre carte depuis une simple connexion série. ESP8266 compatible.

Ampy

Tlogo-micropython-Debugger.jpg

Outil simplifié de transfert de fichiers et de contrôlez de carte depuis une connexion série. ESP8266 compatible.

 

RShell sur ESP8266

Une petite pointe de rappel pour l'utilisation des ESP8266 avec RShell...

rshell --port /dev/ttyUSB0 --baud 115200 --buffer-size 128 --editor nano

Nous avons également un petit script shell rsheel-esp8266.sh pour faciliter faciliter le démarrage de rshell pour un esp8266.

Bibliothèque modio2

Avant d'utiliser le script d'exemple, il est nécessaire de transférer la bibliothèque modio2 sur votre carte MicroPython.

La bibliothèque modio2 et sa documentation sont disponibles dans le GitHub esp8266-uPy.

Download-icon.pngTélécharger la bibliothèque ESP8266-uPy

Puis:

  • Copier le fichier modio2.py sur la carte micropython.

Vous pouvez également transférer le script de test test2.py et test2pwm.py sur la carte MicroPython.

Code

BUS I2C

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.

ESP8266-DEV-12.jpg

En adaptant le code (et les raccordements du bus I2C), vous pourriez tout aussi facilement faire fonctionner des cartes ESP8266 comme Feather ESP8266 Huzza ou Wemos D1 ou même MicroPython Pyboard

Fonctions GPIOs du MOD-IO2

Voici les différentes fonctionnalités possibles sur le GPIO du MOD-IO2

MICROPYTHON-MOD-IO2-GPIO.png

Fonctionnalités du MOD-IO2

Voici l'exemple commenté en Français.

# 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")

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.


# 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 affiche le résultat suivant à l'écran pendant que l'on exécute le script:

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
>>>

Changer l'adresse I2C de la carte

Les cartes MOD-IO sont conçues pour être chaînable. Il faut donc que chacune d'entre-elles aient une adresse différente sur le bus I2C.

Si vous voulez utiliser plusieurs cartes, il faudra configurer une adresse I2C différente pour chacune d'entre-elles (adresse qu'il fait configurer en connectant une seule carte à la fois).

# 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 )

Où acheter


Tutoriel réaliser par Meurisse D. pour MC Hobby SPRL

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.