Mise en oeuvre du module Hexiwear

L’objectif est de mettre en oeuvre le module Hexiwear et l’environnement de développement mbed.

Le module Hexiwear

Hexiwear est le fruit de la collaboration entre MikroElektronika et NXP.

Le kit de développement est décomposé en :

  • un module hexagonal Hexiwear (un bracelet en option est disponible)
  • une station d’interconnexion Hexiwear Docking Station

Le module Hexiwear est commercialisé pour un prix d’environ 50 euros chez fr.rs-online.com !

Pour créer des applications, il y a plusieurs possibilités dont :

Hexiwear accepte la programmation sans fil OTAP (over-the-air programming) ou via la station d’interconnexion. Elle comporte trois emplacements mikroBus, un connecteur de carte SD, une interface I2C, quelques LEDs et poussoirs, et aussi un adaptateur OpenSDA serial de débogage. La station d’interconnexion transforme alors Hexiwear en un appareil compatible mbed.

Quelques caractéristiques :

  • Micro-contrôleur : ARM® Cortex®-M4 120 MHz
  • Mémoire : 1024KB Flash, 256KB RAM
  • 16-bit ADCs, DAC, Timers
  • USB Device, UART, SPI, I2C, I2S, SD-Card
  • Alimentation : 3.3V 190mAh 2C Li-Po battery with a charger (MC34671)
  • Écran 1.1” OLED couleur
  • USB : port COM virtuel, stockage de masse (mass storage) et débogage

Et aussi :

  • Bluetooth Low Energy (BLE) SoC (Kinetis KW40z)
  • 6-axis Accelerometer and Magnetometer combo (FXOS8700CQ)
  • 3-axis Gyroscope (FXAS21002CQ)
  • Pressure sensor accurate up to Altitude sensing (MPL3115A2)
  • Temperature and humidity combo (HTU21D)
  • Ambient light sensor (TSL2561)
  • Optical Heart rate sensor (Maxim MAX30101)

Liens :

Utilisation

Le menu Settings offre l’option Get app qui affiche un code QR qui conduit votre téléphone directement sur Google Play ou Apple Store d’où vous pourrez télécharger l’application Hexiwear. Celle-ci vous permet de régler la date et l’heure une fois que vous aurez créé un compte WolkSense, activé et apparié Bluetooth, etc.

En mode Sensor Tag du module Hexiwear, vous pouvez lire sur votre téléphone les paramètres de tous les capteurs : niveau de charge de la batterie, température, humidité, pression atmosphérique, luminosité, accéléromètre à trois axes, magnétomètre et gyroscope, sauf ceux du capteur de pulsation cardiaque.

À partir d’un PC, vous pouvez aussi vous connecter à WolkSense.

Source : Banc d’essai Hexiwear Power User Pack

La plateforme de développement mbed

mbed est un IDE (Integrated Development Environment) ou EDI (Environnement de Développement Intégré) en ligne. Il nécessite donc une connexion Internet et un navigateur web.

Site : https://developer.mbed.org/

Rapide tour d’horizon :

  • Hardware : Boards (liste toutes les cartes compatibles) et Components (base de données des composants existants par catégorie)
  • Documentation (évidemment la doc sur l’API) et Cookbook (livre de recettes)
  • Code (partage de code par la communauté)
  • Questions (FAQ) et Forum
  • Log In/Signup
  • Compiler (espace de travail de développement)

La première étape pour pouvoir utiliser mbed consiste à s’enregistrer (Log In/Signup).

Pour développer avec le module Hexiwear, il y a 2 façons de procéder :

  • Cliquez sur Hardware puis Boards. Sélectionnez … Pour finir cliquez sur Add to your mbed Compiler.

  • Ou branchez votre carte sur un port USB. Aller dans le dossier DAPLINK (comme une clef USB) et ouvrir le fichier mbed.htm dans un navigateur.

Premier programme : led clignotante

Objectifs :

  • prendre en main l’environnement mbed
  • créer et compiler un programme
  • déployer et tester le programme

Étapes par étapes :

Créer une nouvelle application en cliquant sur New puis choisir comme modèle (template) “mbed OS Blinky LED …” et donner un nom à votre projet :

Pour tester, il suffit de compiler … d’enregistrer le binaire fourni (extension .bin) et de le copier dans le dossier DAPLINK.

Lorsque vous appuyez sur le bouton Reset_K64F situé sur la station d’accueil, le programme le plus récent du dossier DAPLINK est chargé dans la mémoire FLASH du microcontrôleur K64F (led clignotante) puis il sera lancé.

Nouveau programme

Objectifs :

  • créer un programme vierge
  • importer et exploiter des bibliothèques

Étapes par étapes :

Créer une nouvelle application en cliquant sur New puis choisir comme modèle (template) “Empty Program” et donner un nom à votre projet :

On va importer la bibliothèque mbed :

Ajouter un nouveau fichier avec New File :

Puis éditez le programme suivant :

#include "mbed.h"

DigitalOut led(LED_GREEN);
Serial pc(USBTX, USBRX);

int main() 
{
    int i = 0;
    pc.printf("%d Hello World!\n", i);
    
    while(1) 
    {
        led = !led;
        pc.printf("%d Hello World!\n", i);
        i++;
        wait(0.5f);
    }
}

Pour tester, il suffit ensuite de compiler, d’enregistrer le binaire fourni (extension .bin) et de le copier dans le dossier DAPLINK.

Côté PC, on utilisera un émulateur de terminal comme cutecomm ou minicom sous Linux ou HyperTerminal ou Teraterm sous Windows.

Tests

#include "mbed.h"
#include "Hexi_OLED_SSD1351.h"
#include "MPL3115A2.h"

#define MPL3115A2_I2C_ADDRESS (0x60<<1)

DigitalOut myled(PTA13);
DigitalOut led(LED_GREEN);
Serial pc(USBTX, USBRX);
Timer t;
MPL3115A2 MPL3115A2(PTC11, PTC10, MPL3115A2_I2C_ADDRESS);
SSD1351 oled(PTB22,PTB21,PTC13,PTB20,PTE6, PTD15); /* (MOSI,SCLK,POWER,CS,RST,DC) */
float sensor_data[2]; /* [1] = temperature value */

void initialiserCapteurs()
{
    MPL3115A2.Oversample_Ratio(OVERSAMPLE_RATIO_64);
    MPL3115A2.Barometric_Mode();
}

float lireTemperature()
{
    MPL3115A2.getAllData(&sensor_data[0]);
    return sensor_data[1];
}

void initialiserEcran(char *titre, char *libelle)
{
    char text[32];  /* Text Buffer */ 
    
    /* Get OLED Class Default Text Properties */
    oled_text_properties_t textProperties = {0};
    oled.GetTextProperties(&textProperties);    

    /* Turn on the backlight of the OLED Display */
    oled.DimScreenON();
    
    /* Fills the screen with solid black */         
    oled.FillScreen(COLOR_BLACK);

    /* Display Text at (x=7,y=0) */
    strcpy(text,titre);
    oled.Label((uint8_t *)text,7,0);
        
    /* Change font color to blue */ 
    textProperties.fontColor   = COLOR_BLUE;
    oled.SetTextProperties(&textProperties);

    /* Display text at (x=5,y=40) */ 
    strcpy(text,libelle);
    oled.Label((uint8_t *)text,5,40);
        
    /* Set text properties to white and right aligned for the dynamic text */
    textProperties.fontColor = COLOR_WHITE;
    textProperties.alignParam = OLED_TEXT_ALIGN_RIGHT;
    oled.SetTextProperties(&textProperties);    
}

void afficherTemperature(float temperature)
{
    char text[32];  /* Text Buffer */ 
    
    sprintf(text,"%.1f", temperature);
        
    /* Display time reading in 35px by 15px textbox at(x=55, y=40) */
    oled.TextBox((uint8_t *)text,55,40,35,15); //Increase textbox for more digits
}

int lireCaractere(char *c)
{
    if(pc.readable())
    {        
        *c = pc.getc();
        return 1;
    }
    return 0;
}

int main() 
{
    int i = 0;
    float temperature = 0.;
    
    t.start();
    pc.printf("%d Hello World!\n", i);
    
    initialiserEcran("BTS SN", "Temp. : ");
    initialiserCapteurs();
    
    while(1) 
    {
        char c;
        if(lireCaractere(&c))
        {
            switch(c)
            {
                case 'A' :
                case 'a' :
                    myled = 1;
                    break;
                case 'E' :
                case 'e' :
                    myled = 0;
                    break;    
                default :
                    pc.printf("%c\n", c); // echo
                break;
            }
        }
        led = !led; // clignotement        
        temperature = lireTemperature();
        pc.printf("%d Hello World! [Temperature: %.1f] %.1f s\n", i, temperature, t.read());
        afficherTemperature(temperature);
        i++;
        wait(0.5f);
    }
}

On compile et on teste sur la carte !

Annexe : Détection USB/RS232

  • Sous Linux :
$ dmesg
...
[1550744.939485] usb 3-9.4.4: new full-speed USB device number 61 using xhci_hcd
[1550744.958052] usb 3-9.4.4: New USB device found, idVendor=0d28, idProduct=0204
[1550744.958063] usb 3-9.4.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[1550744.958069] usb 3-9.4.4: Product: DAPLink CMSIS-DAP
[1550744.958074] usb 3-9.4.4: Manufacturer: ARM
[1550744.958078] usb 3-9.4.4: SerialNumber: 0214000031874e4500552004906e00453ed1000097969900
[1550744.959394] scsi38 : usb-storage 3-9.4.4:1.0
[1550744.961439] hid-generic 0003:0D28:0204.0004: hiddev0,hidraw3: USB HID v1.00 Device [ARM DAPLink CMSIS-DAP] on usb-0000:00:14.0-9.4.4/input3
[1550745.246843] cdc_acm 3-9.4.4:1.1: ttyACM0: USB ACM device
[1550745.247186] usbcore: registered new interface driver cdc_acm
[1550745.247187] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
[1550745.957017] scsi 38:0:0:0: Direct-Access     MBED     VFS              0.1  PQ: 0 ANSI: 2
[1550745.958549] sd 38:0:0:0: Attached scsi generic sg10 type 0
[1550745.958972] sd 38:0:0:0: [sdj] 16512 512-byte logical blocks: (8.45 MB/8.06 MiB)
[1550745.959194] sd 38:0:0:0: [sdj] Write Protect is off
[1550745.959206] sd 38:0:0:0: [sdj] Mode Sense: 03 00 00 00
[1550745.959470] sd 38:0:0:0: [sdj] No Caching mode page found
[1550745.959480] sd 38:0:0:0: [sdj] Assuming drive cache: write through
[1550745.961779] sd 38:0:0:0: [sdj] No Caching mode page found
[1550745.961788] sd 38:0:0:0: [sdj] Assuming drive cache: write through
[1550745.986449]  sdj: unknown partition table
[1550745.987411] sd 38:0:0:0: [sdj] No Caching mode page found
[1550745.987413] sd 38:0:0:0: [sdj] Assuming drive cache: write through
[1550745.987415] sd 38:0:0:0: [sdj] Attached SCSI removable disk

$ lsusb 
...
Bus 003 Device 061: ID 0d28:0204 NXP LPC1768

$ ls -l /dev/ttyACM0 
crw-rw---- 1 root dialout 166, 0 déc.  22 12:53 /dev/ttyACM0

$ sudo chmod 666 /dev/ttyACM0 

$ sudo vim /etc/udev/rules.d/51-usb.rules
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0d28", ATTRS{idProduct}=="0204", MODE:="0666"

$ ll /media/DAPLINK/
total 16K
drwx------ 2 tv   tv   1,0K janv.  1  1970 ./
drwxr-xr-x 4 root root 4,0K déc.  22 11:47 ../
-r--r--r-- 1 tv   tv    396 mars  22  2016 DETAILS.TXT
-r--r--r-- 1 tv   tv    375 mars  22  2016 MBED.HTM

$ cat /media/DAPLINK/DETAILS.TXT 
# DAPLink Firmware - see https://mbed.com/daplink
Unique ID: 0214000031874e4500552004906e00453ed1000097969900
HIC ID: 97969900
Auto Reset: 0
Automation allowed: 0
Daplink Mode: Interface
Interface Version: 0241
Bootloader Version: 0241
Git SHA: d5a63b6e15d61714f164b823f7367f97620f3dad
Local Mods: 1
USB Interfaces: MSD, CDC, HID
Bootloader CRC: 0xe21e1718
Interface CRC: 0x886a40bf

Glossaire

MCU
MCU (MicroController Unit) est un microcontrôleur (µc ou uc). C’est un circuit intégré qui rassemble les éléments essentiels d’un ordinateur : processeur, mémoires (mémoire morte pour le programme, mémoire vive pour les données), unités périphériques et interfaces d’entrées-sorties. Les microcontrôleurs se caractérisent par un plus haut degré d’intégration, une plus faible consommation électrique, une vitesse de fonctionnement plus faible et un coût réduit par rapport aux microprocesseurs polyvalents utilisés dans les ordinateurs personnels. Les microcontrôleurs sont fréquemment utilisés dans les systèmes embarqués. Lire : https://fr.wikipedia.org/wiki/Microcontr%C3%B4leur.
Système embarqué
Un système embarqué est défini comme un système électronique et informatique autonome, souvent temps réel, spécialisé dans une tâche bien précise. Le terme désigne aussi bien le matériel informatique que le logiciel utilisé. Ses ressources sont généralement limitées. Cette limitation est généralement d’ordre spatial (encombrement réduit) et énergétique (consommation restreinte).
ARM
ARM est une société britannique spécialisée dans le développement d’architectures 32 bits de type RISC. Fondée sous la forme d’une coentreprise par Acorn Computers, Apple Computer (maintenant Apple Inc.) et VLSI Technology, ARM développe également un grand nombre de blocs de propriété intellectuelle (IP). Elle est basée sur un modèle économique particulier de la microélectronique : la conception de propriétés intellectuelles (Intellectual Properties). Ainsi il n’est pas possible d’acheter un processeur ARM comme c’est le cas pour Intel. Les cœurs ARM sont intégrés au sein de systèmes sur puces (SoC) complets. Les cœurs de processeurs ARM sont très présents dans les systèmes embarqués (téléphone mobile, console portable, tablette électronique).
Architecture ARM
Les architectures ARM sont des architectures matérielles RISC 32 bits (ARMv1 à ARMv7) et 64 bits (ARMv8)1 développées par ARM Ltd depuis 1990 et introduites à partir de 1983 par Acorn Computers. Dotés d’une architecture relativement plus simple que d’autres familles de processeurs, et bénéficiant d’une faible consommation, les processeurs ARM sont devenus dominants dans le domaine de l’informatique embarquée, en particulier la téléphonie mobile et les tablettes. Ces processeurs sont fabriqués sous licence par un grand nombre de constructeurs.
Mémoire Flash
La mémoire flash est une mémoire de masse à semi-conducteurs ré-inscriptible, c’est-à-dire une mémoire possédant les caractéristiques d’une mémoire vive mais dont les données ne disparaissent pas lors d’une mise hors tension. Ainsi, la mémoire flash stocke les bits de données dans des cellules de mémoire, mais les données sont conservées en mémoire lorsque l’alimentation électrique est coupée. La technique flash se décline sous deux principales formes : flash NOR et NAND, selon le type de porte logique utilisée pour chaque cellule de stockage. Sa durée de vie est limitée par le nombre de cycles d’écriture.
EDI
Un EDI (ou IDE pour Integrated Development Environment) est un environnement de développement pouvant contenir de nombreux outils comme : un éditeur de texte, une chaîne de compilation, la documentation en ligne, la gestion de version et un débogueur (debugger) qui permet de trouver des erreurs et de les éliminer. Il existe de nombreux EDI (ou IDE) pour le langage C/C++ : Visual C++, Builder, Qt Creator, Code::Blocks, devcpp, eclipse, etc… Ils peuvent être très pratique en améliorant surtout la productivité dans un cadre professionnel.
Terminal
Un terminal est le nom d’un logiciel d’émulation de terminal. Un émulateur de terminal, aussi appelé console virtuelle ou terminal virtuel, est un logiciel qui émule le fonctionnement d’un terminal informatique ce qui permet d’interagir avec les commandes Unix lorsqu’on utilise un environnement graphique.

Retour au sommaire