L’objectif est de mettre en oeuvre le module Hexiwear et l’environnement de développement mbed.
Hexiwear est le fruit de la collaboration entre MikroElektronika et NXP.
Le kit de développement est décomposé en :
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 :
Et aussi :
Liens :
Site officiel : www.hexiwear.com
Documentation : hexiwear-user-manual
Ressources : téléchargements, github, …
Des modules MikroElektronika : www.elektor.fr
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
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 :
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.
Objectifs :
É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é.
Objectifs :
É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.
#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 !
$ 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