MICROPYTHON-MOD-MAG3110
Introduction
MOD-MAG utilise un MAG3110 de FreeScale/NXP. Le MAG3110 est un magnétomètre 3 axes. Il utilise une source d'alimentation de 1.95V à 3.6V et communique par l'intermédiaire du bus I2C. Les donnés sont envoyées sur le bus I2C en utilisant le complément en deux (donc signés). La gamme de valeur évolue entre -30000 à +30000 pour la gamme de ±1000µT (micro Tesla).
Ce senseur permet de détecter rapidement des champs magnétiques dans le voisinage. Les données peuvent être utilisées pour créer une boussole digitale ou détecter le champ magnétique de transformateurs électriques!
L'avantage du module MOG-MAG est qu'il expose un port UEXT facilitant les raccordements.
Le MAG3110 équipe également différents breakout comme celui de SparkFun ci-dessous.
Cette carte:
- Utilise le bus I2C
- Propose une lecture de champs magnétiques
- Un connecteur UEXT pour faciliter le raccordement
Matériel utilisé
Pour réaliser ce test, nous avons utilisé:
Description | Quantité | |
ESP8266-EVB |
ESP8266 Evaluation Board d'Olimex disponible ici chez MCHobby |
1 |
MOD-MAG3110 |
Carte MOD-MAG3110 d'Olimex utilisant le MAG3110 de NXP disponible ici chez MCHobby |
1 |
UEXT-SPLITTER |
Multiplicateur de port UEXT. Permettra de brancher la carte + Interface USB-Serie disponible ici chez MCHobby |
1 |
USB-SERIE-TTL |
Un cable console pour pouvoir communiquer avec l'ESP8266 disponible ici chez MCHobby |
1 |
Raccordements
Les raccordements sont effectués comme suit:
- La carte MOD-MAG (MAG3110) est branché sur l'UEXT Splitter.
Attention: ne pas appliquer plus de 5V sur la carte d'évaluation ESP8266-EVB |
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.
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).
Apprenez comment charger le Firmware MicroPython sur une carte Pyboard, ESP8266 (Feather, Wemos, NodeMcu), etc.
Transférez des fichiers et contrôlez votre carte depuis une simple connexion série. ESP8266 compatible.
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...
Il est impératif de réduire la taille du buffer à 128 octets sur un ESP8266 sinon vous risquez d'écraser le système de fichier votre ESP8266... auquel cas il faudra reflasher votre carte |
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 mag3110
Avant d'utiliser le script d'exemple, il est nécessaire de transférer la bibliothèque mag3110 sur votre carte MicroPython.
La bibliothèque mag3110 et sa documentation sont disponibles dans le GitHub esp8266-uPy.
Puis:
- Copier le fichier mag3110.py sur la carte MicroPython.
Vous pouvez également transférer le script de test test.py et testcal.py sur la carte MicroPython.
Code
BUS I2C
La carte MOD-MAG3110 utilise le bus I2C (adresse par défaut est 0x0E) 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.
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.
Exemple: lecture brute
L'exemple suivant fait une lecture des données brutes (en mode RAW) du magnétomètre et les affiches dans la session REPL.
Les données sont retournée par la méthode read() sous la forme d'un tuple (x,y,z).
from time import sleep
from mag3110 import MAG3110, DR_OS_1_25_32
i2c = I2C( sda=Pin(2), scl=Pin(4) )
mag = MAG3110( i2c )
print( "CHIP ID: %s" % mag.who_am_i() )
# Fixer le débit de donnée à 1.25 Hz et l'oversampling à 32 fois
mag.setDR_OS( DR_OS_1_25_32 )
# Active le senseur
mag.start()
while True:
# Attendre qu'une donnée soit disponible
if mag.data_ready:
# Lecture du tuple (x,y,z)
xyz = mag.read()
print( 'x,y,z = %s,%s,%s ' % xyz )
print( "That's the end folks")
Exemple: Calibration & Orientation
Contenu de l'exemple est disponible dans testcal.py.
Ce dernier démontre l'utilisation de la phase de calibration et correction avec l'offset utilisateur.
Une fois la calibration terminée, le script indique l'angle d'orientation par rapport le Nord magnétique.
La calibration prend place au démarrage du script. Une fois la calibration terminée, le script indique le Nord.
POUR CALIBRER: faire tourner le senseur sur 360 degrés. Le mode de calibration s'interrompt entre 5 à 10 secondes. |
from time import sleep
from mag3110 import MAG3110, DR_OS_1_25_32
i2c = I2C( sda=Pin(2), scl=Pin(4) )
mag = MAG3110( i2c )
print( "CHIP ID: %s" % mag.who_am_i() )
# Fixer le débit de donnée à 1.25 Hz et l'oversampling à 32 fois
# mag.setDR_OS( DR_OS_1_25_32 )
# Activer le senseur
mag.start()
while True:
# Pas encore calibré ?
if not mag.is_calibrated:
# Pas en cours de calibration ?
if not mag.is_calibrating:
print( "Démarrer le mode de calibration!")
mag.enter_calibration()
else:
# collecter des données de calibration
mag.step_calibration()
else:
print( "Calibré" )
break
# Afficher les infos durant la calibration
# (x,y,z) tuple
# xyz = mag.read()
# print( xyz )
print( 'Offset utilisateur = %s,%s,%s' % mag.user_offset() )
#mag.setDR_OS( DR_OS_1_25_32 )
while True:
if mag.data_ready:
print( 'x,y,z = %s,%s,%s ' % mag.read() )
heading = mag.heading()
print( 'Direction Nord = ', heading )
print( '-'*40 )
sleep( 3 )
print( "That's the end folks")
Contenu de l'exemple est disponible dans testcal.py.
Exemple: autres
La bibliothèque MAG3110 Arduino proposé par Sparkfun propose d'autres exemples comme:
- La magnitude
- Bousolle digitale
- Lecture MicroTesla (extra)
- Le déclenchement de mesure (mode triggered)
Le temps manquant, je n'ai pu faire le portage de ces exemples (et code bibliothèque correspondant) sous MicroPython. N'hésitez pas à nous contacter sur MC Hobby en cas de besoin ou partage de participation.
Où acheter
- 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-MAG3110 magnétomètre digital 3 axes de NXP.
- Le module UEXT Splitter
- La La gamme IoT/ESP8266 disponible chez MC Hobby
- Un Convertisseur USB-Série TLL
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.