11 TP STM32 Iot
11 TP STM32 Iot
11 TP STM32 Iot
Objectifs : Réaliser un objet connecté à une application en ligne par protocole LoRaWan
- Configurer le node B-LO72Z-LRWAN
- Configurer le broker TTN
- Configurer l’application finale mydevices
Durée conseillée : 4h
Le node sera réalisé avec une carte B-L072Z-LRWAN1 fabriquée par STMicroelectronics. Celle-ci est
équipée d’un module contenant un microcontrôleur STM32, un émetteur/récepteur LoRa (ou Sigfox), un
support de batteries et une interface ST-LINK pour la programmation. La carte B-L072Z-LRWAN1 ne
dispose d’aucun capteur, elle peut accueillir la plupart des shields au format Arduino.
La carte sera programmée en C++ à l’aide de d’environnement de développement intégré en ligne MBEB
Il est indispensable d’être familiarisé avec l’IDE MBED.
UM2115: Discovery kit for LoRaWAN™, Sigfox™, and LPWAN protocols with STM32L0 :
https://www.st.com/resource/en/user_manual/dm00329995.pdf
Repérer sur la documentation les connecteurs Arduino et les fonctions qui leurs sont associées
(GPIO, I2C …)
Combien de LEDs sont à la disposition de l’utilisateur ?
Quels sont les rôles des boutons poussoirs ?
2 Travaux pratiques
Le TP se compose de trois parties :
- Création et configuration d’un compte TTN sur https://www.thethingsnetwork.org/ et récupération des clés
de configuration du node.
- Adaptation du logiciel de démonstration sur MBED avec configuration des capteurs, du payload et des clés
LoRaWan récupérées sur TTN
- Construction de l’application finale sur mydevices.com
Le TP permettra l’acquisition de la température ambiante du node et sa lecture sur une application en ligne.
TTN procure alors l’application EUIS qui sera enregistrée dans le node et la clé d’accès qui permettra
de récupérer les données depuis l’application terminale
Choisir un nom et un device EUI de votre choix mais qui doit être unique
TTN génère l’application EUI ainsi que la clé d’application et affiche un récapitulatif
Les données provenant du node sont encapsulées au format « cayenne ». TTN doit être préparé pour ce
format de données.
Ajouter une « integration », sélectionner « cayenne » , nommer le process ID et valider une clé d’accès, puis
cliquer sur ADD INTEGRATION
Importer le programme dans le compilateur et mettre à jour toutes les bibliothèques (vous changerez le nom
du programme en LRWAN-TTN-CAYENNE)
L’application finale étant mydevices cayenne, il est nécessaire d’ajouter la bibliothèque cayenne au projet.
Effectuer une recherche sur « Cayenne Low Power Payload » pour récupérer la bibliothèque
Importer la bibliothèque dans le projet et mettre à jour les bibliothèques. (sélectionner LRWAN-TTN-
CAYENNE dans target path)
La bibliothèque Cayenne
La bibliothèque LoRa radio SX1276
Le programme principal
Le fichier json de configuration
Editer mbed_app.json
Il est possible pour les essais de choisir le rapport-cyclique d’émission LoRa, pour cela il faut passer
"lora.duty-cycle-on" en « false » afin de pouvoir définir la période d’émission.
Editer main.cpp
Si "lora.duty-cycle-on" est « false » il faut régler la période d’émission comme souhaité : #define TX_TIMER
20000 // 20sec
A l’emplacement des instanciations d’objets , instancier un objet de type « cayenne » qui permettra de
formater l’envoi des données (payload) au format cayenne :
DS1820 ds1820(PC_9);
CayenneLPP cayenne(100); // 100 caractères max
La fonction d’émission send_message doit être modifiée pour récupérer les données des capteurs et les
encapsuler au format cayenne
Modifier cette fonction comme suit (ici on utilise le capteur virtuel de la démonstration) :
// Sends a message to the Network Server
static void send_message()
{
uint16_t packet_len;
int16_t retcode;
float sensor_value; // valeur de la temperature à transmettre
/* lecture du capteur virtuel ds1820 qui retourne ici une valeur aléatoire
dans sensor_value */
if (ds1820.begin()) {
ds1820.startConversion();
sensor_value = ds1820.read();
printf("\r\n Dummy Sensor Value = %3.1f \r\n", sensor_value);
ds1820.startConversion();
} else {
printf("\r\n No sensor found \r\n");
return;
}
Sur le site TTN les données reçues sont visualisables dans l’onglet data de l’application :
Create App
Add device.
Sur MBED, dans main.cpp, à la suite de l’instanciation de l’objet « cayenne » , instanciez un objet AnalogIn:
/**
* Sends a message to the Network Server
*/
static void send_message()
{
uint16_t packet_len;
int16_t retcode;
float lm35temp;
/*
placer ici l’acquisition de données
*/
// Vs=0v+10mV/°C VDD=3.3v
lm35temp=lm35.read()*330.0;
cayenne.reset();
cayenne.addTemperature(8, lm35temp); // objet graphique 8 (par exemple)
cayenne.copy(tx_buffer);
packet_len=cayenne.getSize();
Complément :
- Allumage d’une LED sur le node depuis l’interface mydevice.com
- lecture d’un bouton du node
DigitalOut ledTest(LED1);
DigitalIn bp(USER_BUTTON);
/**
* Receive a message from the Network Server
*/
static void receive_message()
{
int16_t retcode;
uint8_t port; // var to store port number provided by the stack
int flags; // var to store flags provided by the stack
retcode = lorawan.receive( rx_buffer,sizeof(rx_buffer), port, flags);
printf("\x1B[1m"); // yellow text
if (retcode < 0) {
printf("receive() - Error code %d \r\n", retcode);
return;
}
printf(" Reception on port : %d \n",port);
printf(" Flags are : %d \n",flags);
printf(" Data: ");
if (rx_buffer[2]==0x64) ledTest=1;
if (rx_buffer[2]==0x00) ledTest=0;
memset(rx_buffer, 0, sizeof(rx_buffer));
}
Dès la réception des données, l’application mydevices.com fait apparaître un bouton Digital Output (7).
Lors du clic sur ce bouton la LED s’allume sur la carte ST.