I2C et interruptions (Ticker)

L’utilisation du protocole I2C sous MBED / Keil Studio empêche le fonctionnement normal des interruptions lorsque vous souhaitez écrire ou lire des données sur une liaison I2C à l’intérieur d’une fonction d’interruption.

Cette limitation est due à la conception de MBED 6.

Il est possible de contourner un peu le problème en mettant à jour une variable sur interruption et de “scruter” la valeur de cette variable dans la boucle infinie… (retour de la scrutation ??)

Serial n’est pas reconnu par MBED 6

Il faut utiliser la classe UnbufferedSerial (API : https://os.mbed.com/docs/mbed-os/v6.15/apis/unbufferedserial.html).

La fonction printf n’est pas implémenté dans cette classe. Il faut alors passer par une chaîne de caractères formatée à l’aide de la fonction sprintf. Puis la transmission des données se fait à l’aide de la fonction write. Un exemple est fourni ici :

char        charStr[128];

UnbufferedSerial    my_pc(USBTX, USBRX);

sprintf(charStr, "Mbed OS %d.%d.%d.\r\n", MBED_MAJOR_VERSION, MBED_MINOR_VERSION, MBED_PATCH_VERSION);
my_pc.write(charStr, strlen(charStr));

Afin que la fonction strlen soit reconnue, vous devez importer la bibliothèque string.h.

Voir le tutoriel mis à jour : http://lense.institutoptique.fr/mine/nucleo-configurer-une-communication-point-a-point-de-type-rs232-2/

printf n’est pas reconnu

Si ce n’est que pour déboguer votre application, vous pouvez utiliser une version logicielle de la fonction printf proposée par MBED. Pour cela, il faut ajouter dans le fichier de configuration de l’application (mbed_app.json) les lignes suivantes :

{
    "requires": ["bare-metal"],
    "target_overrides": {
      "*": {
        "target.c_lib": "small",
        "target.printf_lib": "minimal-printf",
        "platform.minimal-printf-enable-floating-point": true,
        "platform.stdio-minimal-console-only": true
      }
    }
}

Cette méthode est cependant incompatible si vous souhaitez utiliser la même liaison série pour du transfert de données avec d’autres systèmes. Dans ce cas, il faut utiliser la classe UnbufferedSerial (API : https://os.mbed.com/docs/mbed-os/v6.15/apis/unbufferedserial.html). Voir le tutoriel : http://lense.institutoptique.fr/mine/nucleo-configurer-une-communication-point-a-point-de-type-rs232-2/

Python, quelles bibliothèques ?

Par défaut, vous devez utiliser la distribution Anaconda 3 (sous Python 3.9). L’environnement de développement est Spyder 5 (Anaconda 3).

Pour le développement d’interfaces graphiques, nous vous conseillons PyQt5 (inclus dans la distribution Anaconda).

Pour les liaisons séries, nous vous conseillons la bibliothèques PySerial (voir exemples : http://lense.institutoptique.fr/mine/python-interfacage-et-affichage/#Interfacage_d8217une_carte_d8217acquisition_avec_PySerial ). Cette bibliothèque doit être installée dans Anaconda, en utilisant Prompt (Anaconda 3) puis en exécutant la ligne suivante : pip install pyserial . La bibliothèque s’importe ensuite par la ligne : import serial .

Vous trouverez des tutoriels pour Python à l’adresse suivante : http://lense.institutoptique.fr/python/

Bluetooth / HC-05 non appareillable entre eux

Il n’est pas possible d’appareiller deux modules HC-05 entre eux simplement.

Pour des liaisons sans fil, utiliser des modules nRF24L01 ou RN42-EVM

Code Exemple pour nRF24L01 (présent sur les cartes robots) : https://os.mbed.com/teams/IOGS_France/code/IeTI_nRF24/

Tuto pour RN42 : http://lense.institutoptique.fr/mine/nucleo-faire-communiquer-deux-systemes-en-bluetooth-rn-42-module/

Notice des maquettes

La documentation des maquettes est à présent disponible ici : https://github.com/jvillemejane/LEnsE_IOGS_Maquettes/ dans le répertoire Maquettes (puis Elec_Num_Emb pour les projets d’électronique).

Les schémas, le guide de brochage et une notice d’utilisation (format README.MD) sont en cours de rédaction. Si vous voyez des éléments à ajouter ou modifier, envoyez un mail à julien.villemejane@institutoptique.fr en précisant quelle maquette est concernée.

Capteurs présence Vision Industrielle

Détecte “toujours”. Même quand on ne place rien devant (LED arrièreallumée)

Régler la sensibilité par la petite vis à l’arrière

Nucleo / Trucs et astuces