Upload
others
View
13
Download
0
Embed Size (px)
Citation preview
Internet des objets - IoT
L'Internet des objets, ou IdO (en anglais Internet of Things, ou IoT) est l'interconnexion entre Internet et des objets, des lieux et des environnements physiques.
L'appellation désigne un nombre croissant d'objets connectés à Internet permettant ainsi une communication entre nos biens dits physiques et leurs existences numériques.
Ces formes de connexions permettent de rassembler de nouvelles masses de données sur le réseau et donc, de nouvelles connaissances et formes de savoirs.
SmartComputerLab 2
Internet des objets - IoT
SmartComputerLab 3
Principaux composants d’Internet
Internet
routeur avec un point d’accès - AP
serveurclientPC/Tablette/Smartphone
réseau local
commutateur
AP
WiFi
Ethernetréseau
cellulaire
SmartComputerLab 4
Principaux composants IoT
InternetIoT
capteur
actionneur
terminal mono-tâche
terminal multi-tâche passerelle routeur
serveur
client
Lien - LoRa
SmartComputerLab 5
Evolution du Matériel pour IoT (IA)unités centrales pour terminaux et passerelles
2003 -● MCU - Arduino - simple microcontrôleur pour les applications
embarquées● SBC – Raspberry-Pi (2,3) – carte ordinateur embarqué
2012 - ● MCU - ESP8266 (ESP12) puis ESP32
- puissant microcontrôleur avec WiFi et BT – freeRTOSmodems LoRa
● SBC Nvidia - Jetson (TK1,TX1,TX2), Jetson Nano – puissantes cartes ordinateur embarqué - Linux Ubuntuunités IA pour deep learning, deep streaming etc. (GPU+TensorFlow,..)
SmartComputerLab 6
Plate-forme pédagogique – IoT DevKit La plate-forme La plate-forme IoT DevKitIoT DevKit a été développée à l’Université de a été développée à l’Université de Nantes (Nantes (Polytech’NantesPolytech’Nantes) au sein de ) au sein de SmartComputerLabSmartComputerLab qui qui est associé au laboratoire est associé au laboratoire LS2NLS2N – équipe – équipe RIORIO (Réseaux et (Réseaux et Internet des Objets).Internet des Objets).
IoT DevKitIoT DevKit consiste en : consiste en :● cartes de basecartes de base (3 formats) (3 formats)● cartes MCU et SBCcartes MCU et SBC (ESP12, ESP32, NanoPi) (ESP12, ESP32, NanoPi)● cartes d’extensioncartes d’extension pour de multiples pour de multiples capteurscapteurs, ,
actionneursactionneurs et et modemsmodems de communication de communication
Le kit est complété par les Le kit est complété par les préparationspréparations (logiciel) pour les (logiciel) pour les laboratoires IoTlaboratoires IoT
SmartComputerLab 7
Plate-forme pédagogique – IoT DevKitformat large avec une batterie
Cartes de base avec une Cartes de base avec une unité MCU – unité MCU – (ESP32+WiFi,LoRa,..)(ESP32+WiFi,LoRa,..)
emplacements pour les cartes d’extension
format mini D1
SmartComputerLab 8
Plate-forme pédagogique – IoT DevKitformat longue
emplacements pour les cartes d’extension en format mini D1emplacements pour les cartes d’extension en format mini D1
ESP12 (Wemos)
ESP32 (Wemos)
SmartComputerLab 9
Architecture ESP32 : le « top » de MCU pour IoT
processeurs
Interfaces - bus modems radio
SmartComputerLab 10
Cartes ESP32 (ESP12)
Carte MCU (Heltec) ESP32 + LoRa + OLED
pour la plate-forme large avec une batterie
WiFi/BT/BLE LoRa
SmartComputerLab 11
Cartes ESP32 (ESP12)
Carte MCU (Wemos) ESP12 et ESP32
pour la plate-forme longue – cartes d’extension au format mini D1
WiFiWiFi/BT/BLE
SmartComputerLab 12
Cartes d’extension (exemples)
Cartes d’extension pour les Cartes d’extension pour les emplacements « longues »emplacements « longues »
Une trentaine !Une trentaine !
UART
I2C
SPI
spécifique
SmartComputerLab 13
Cartes d’extension avec capteurs (exemples)
Carte - bus I2C et un Carte - bus I2C et un capteur de luminosité - capteur de luminosité - BH1750BH1750
Carte - bus I2C et un capteur Carte - bus I2C et un capteur de température/humidité - de température/humidité - HTU21HTU21
Carte - bus UARTet Carte - bus UARTet module GPS – NEO-M6module GPS – NEO-M6
SmartComputerLab 14
Cartes d’extension format mini D1
Cartes d’extension de SmartComputerLab
Une vingtaine !
Cartes d’extension Cartes d’extension « externes »« externes »En dizaines !En dizaines !
SmartComputerLab 15
Exemple d’une architecture IoTExemple d’une architecture IoT
MCU – ESP32MCU – ESP32+ carte relais+ carte relais+ carte OLED+ carte OLED+ carte LoRa + carte LoRa
MCU – MCU – ESP32+LoRa+OLEDESP32+LoRa+OLED+ carte relais+ carte relais
SmartComputerLab 16
Exemples, exemples, exemples, ..
Lecture de température, humidité, luminosité Lecture de température, humidité, luminosité Envoi par WiFi (Internet) sur le serveur, Envoi par WiFi (Internet) sur le serveur, Réception de la commande pour le relaisRéception de la commande pour le relais
SmartComputerLab 17
Exemples, exemples, exemples, ..
Lecture de température, humidité, luminosité, CO2, particules, Lecture de température, humidité, luminosité, CO2, particules, Envoi par LoRa vers une passerelle LoRa-WiFi (Internet) Envoi par LoRa vers une passerelle LoRa-WiFi (Internet) Réception de la commande pour le relaisRéception de la commande pour le relais
LoRa
SmartComputerLab 18
Exemples, exemples, exemples, ..
Lecture empreintes, carte RFIDLecture empreintes, carte RFIDEnvoi par LoRa vers une passerelle LoRa-WiFi (Internet) Envoi par LoRa vers une passerelle LoRa-WiFi (Internet)
LoRa
SmartComputerLab 19
Exemples, exemples, exemples, ..
Passerelle Passerelle LoRa-WiFiLoRa-WiFi configurableconfigurableRéception-EnvoiRéception-Envoi des données sur le serveur des données sur le serveur ThingspeakThingspeakStockage des données horodatées sur une carte Stockage des données horodatées sur une carte SDSD
LoRa
WiFi
SmartComputerLab 20
Serveurs IoTServeurs IoT
ExempleExemple - - ThingSpeakThingSpeak (open source) (open source) Thingspeak.comThingspeak.com (MatLab), (MatLab), Thingspeak.frThingspeak.fr (SmartComputerLab) (SmartComputerLab)
Il existe plusieurs types de serveurs pour IoT.Il existe plusieurs types de serveurs pour IoT.Fonctions : Fonctions : stockagestockage , , visualisationvisualisation (IU), (IU), traitementstraitements
SmartComputerLab 21
Serveurs IoTServeurs IoTUn canal ThingSpeak avec les champs (fields) :
SmartComputerLab 22
Programmation – Arduino IDEProgrammation – Arduino IDE
Ajouter les cartes Ajouter les cartes ESP32ESP32 et et ESP12ESP12 (8266) (8266)
Dans les préférences :Dans les préférences :https://dl.espressif.com/dl/package_esp32_index.jsonhttps://dl.espressif.com/dl/package_esp32_index.json,,http://arduino.esp8266.com/stable/package_esp8266com_index.jsonhttp://arduino.esp8266.com/stable/package_esp8266com_index.json
Puis dans le Puis dans le Boards ManagerBoards Manager
Télécharger le fichier d’installation Arduino IDETélécharger le fichier d’installation Arduino IDE● LinuxLinux● WindowsWindows
Installer l’IDEInstaller l’IDE
SmartComputerLab 23
Un très simple exemple du codeUn très simple exemple du code
Nous allons utiliser la carte « large » avec le MCU – Heltec : Nous allons utiliser la carte « large » avec le MCU – Heltec : ESP32+OLED+WiFi+LoRaESP32+OLED+WiFi+LoRa
Nous allons tester un bouton (pin 0) et un LED (pin 25).Nous allons tester un bouton (pin 0) et un LED (pin 25).
const intconst int ButtonPin=0; // PRG ButtonPin=0; // PRGconst intconst int LEDPin=25; // LED LEDPin=25; // LED
void void setupsetup() {() { pinModepinMode(LEDPin, OUTPUT); (LEDPin, OUTPUT); // sens de fonctionnement : INPUT, OUTPUT// sens de fonctionnement : INPUT, OUTPUT}}
SmartComputerLab 24
Un très simple exemple du code
const int ButtonPin=0; // PRGconst int ButtonPin=0; // PRGconst int LEDPin=25; // LEDconst int LEDPin=25; // LED
void setup() {void setup() { pinModepinMode(LEDPin, OUTPUT); // sens du fonctionnement : INPUT, OUTPUT(LEDPin, OUTPUT); // sens du fonctionnement : INPUT, OUTPUT}}
void loop() {void loop() {{{int buttonState; int buttonState; buttonState = buttonState = digitalReaddigitalRead(ButtonPin); // lecture de l’etat(ButtonPin); // lecture de l’etat if(buttonState) if(buttonState) digitalWritedigitalWrite(LEDPin,HIGH); // envoi du signal : HIGH, LOW(LEDPin,HIGH); // envoi du signal : HIGH, LOW else else digitalWritedigitalWrite(LEDPin,LOW);(LEDPin,LOW); delay(30); // attente de 30 msdelay(30); // attente de 30 ms }}}}
SmartComputerLab 25
Lecture des données sur SHT21
##includeinclude < <WireWire.h>.h>##includeinclude <Sodaq_SHT2x.h> <Sodaq_SHT2x.h>
void void setupsetup()(){{ WireWire..beginbegin(21,22);(21,22); SerialSerial..beginbegin(9600);(9600);}}
void void looploop()(){{ Serial.print("Humidity(%RH): ");Serial.print("Humidity(%RH): "); Serial.print(SHT2x.GetHumidity());Serial.print(SHT2x.GetHumidity()); Serial.print(" Temperature(C): ");Serial.print(" Temperature(C): "); Serial.println(SHT2x.GetTemperature());Serial.println(SHT2x.GetTemperature()); delaydelay(1000);(1000);}}
SmartComputerLab 26
Lecture des données surLecture des données sur SHT21 SHT21 et et l’affichagel’affichage sur l’écran OLED sur l’écran OLED
#include <#include <WireWire.h>.h>#include <Sodaq_SHT2x.h>#include <Sodaq_SHT2x.h>
##include include <U8x8lib.h> // bibliothèque à charger a partir de <U8x8lib.h> // bibliothèque à charger a partir de U8X8_SSD1306_128X64_NONAME_SW_I2C U8X8_SSD1306_128X64_NONAME_SW_I2C u8x8u8x8(15,4,16); // clock, data, reset(15,4,16); // clock, data, reset
floatfloat temperature,humidite; temperature,humidite;
void dispData() void dispData() { { char dbuf[16]; char dbuf[16]; u8x8u8x8..clearclear(); (); u8x8u8x8..drawStringdrawString(0,1,"SmartComputerLab"); (0,1,"SmartComputerLab"); sprintf(dbuf,"temp:%f",temperature); sprintf(dbuf,"temp:%f",temperature); u8x8u8x8..drawStringdrawString(0,3,dbuf); (0,3,dbuf); sprintf(dbuf,"humi:%f",humidite); sprintf(dbuf,"humi:%f",humidite); u8x8u8x8..drawStringdrawString(0,4,dbuf); (0,4,dbuf); delay(6000); delay(6000); } }
SmartComputerLab 27
Envoi des données sur Envoi des données sur ThingSpeakThingSpeak
Préparations :Préparations :
Adresse IP et numéro de port du serveur (pour Adresse IP et numéro de port du serveur (pour Thingspeak.frThingspeak.fr) dans ) dans ThingSpeak.hThingSpeak.h
##definedefine THINGSPEAK_IPADDRESSTHINGSPEAK_IPADDRESS IPAddress(90,105,148,36) IPAddress(90,105,148,36)##definedefine THINGSPEAK_PORT_NUMBERTHINGSPEAK_PORT_NUMBER 443 443
Ajouter au début du code :Ajouter au début du code :
#include <#include <WiFiWiFi.h> .h> #include "#include "ThingSpeakThingSpeak.h" .h"
Utiliser les fonctions pour précharger et envoyer les données : Utiliser les fonctions pour précharger et envoyer les données :
ThingSpeak.ThingSpeak.setFieldsetField(1, sensor[0]); // préparation du field1(1, sensor[0]); // préparation du field1ThingSpeak.ThingSpeak.setFieldsetField(2, sensor[1]); // préparation du field2(2, sensor[1]); // préparation du field2
PuisPuis
ThingSpeak.ThingSpeak.writeFieldswriteFields((myChannelNumbermyChannelNumber[1], [1], myWriteAPIKeymyWriteAPIKey[1]); // envoi[1]); // envoi
SmartComputerLab 28
Connexion WiFi Connexion WiFi
#include <#include <WiFiWiFi.h> .h> #include "#include "ThingSpeakThingSpeak.h".h"char char ssidssid[] = "PhoneAP"; // SSID du reseau[] = "PhoneAP"; // SSID du reseauchar char passpass[] = "smartcomputerlab"; // mot de passe par defaut[] = "smartcomputerlab"; // mot de passe par defautunsigned long unsigned long myChannelNumbermyChannelNumber = 100; = 100; const char * const char * myWriteAPIKeymyWriteAPIKey="MEH7A0FHAMNWJE8P" ;="MEH7A0FHAMNWJE8P" ;WiFiClient client;WiFiClient client;
void void setupsetup() {() {Serial.begin(9600);Serial.begin(9600);WiFi.WiFi.disconnectdisconnect(true); // effacer de l’EEPROM WiFi (true); // effacer de l’EEPROM WiFi credentialscredentialsdelay(1000);delay(1000);WiFi.WiFi.beginbegin((ssidssid, , passpass););delay(1000);delay(1000); while (WiFi.while (WiFi.statusstatus() != () != WL_CONNECTEDWL_CONNECTED) {) { delay(500);delay(500); Serial.print(".");Serial.print("."); }}
SmartComputerLab 29
Envoi des données sur Envoi des données sur ThingSpeakThingSpeak IPAddress IPAddress ipip = WiFi.localIP(); = WiFi.localIP(); Serial.print("IP Address: ");Serial.println(Serial.print("IP Address: ");Serial.println(ipip);); Serial.println("WiFi setup ok");delay(1000);Serial.println("WiFi setup ok");delay(1000); ThingSpeak.ThingSpeak.beginbegin((clientclient); // ); // connexion TCPconnexion TCP au serveur au serveur delay(1000);delay(1000); Serial.println("ThingSpeak begin");Serial.println("ThingSpeak begin");}}
int tout=10000; // en millisecondesint tout=10000; // en millisecondesfloat luminosity=100.0, temperature=10.0;float luminosity=100.0, temperature=10.0;
void void looploop()(){{ThingSpeak.ThingSpeak.setFieldsetField(1, luminosity); // préparation du field1(1, luminosity); // préparation du field1ThingSpeak.ThingSpeak.setFieldsetField(2, temperature); // préparation du field1(2, temperature); // préparation du field1 while (WiFi.status() != WL_CONNECTED) {while (WiFi.status() != WL_CONNECTED) { delay(500);Serial.print(".");}delay(500);Serial.print(".");}ThingSpeak.ThingSpeak.writeFieldswriteFields((myChannelNumbermyChannelNumber, , myWriteAPIKeymyWriteAPIKey); ); luminosity++;temperature++;luminosity++;temperature++;delay(tout);delay(tout);
}}
SmartComputerLab 30
LoRa sur IoT DevKitLoRa sur IoT DevKit
LoRaLoRa ( (LoLong ng RaRange) est une technologie de communication de nge) est une technologie de communication de données numérique sans fil brevetée développée par données numérique sans fil brevetée développée par CycleoCycleo à Grenoble, et acquise par à Grenoble, et acquise par SemtechSemtech en 2012, membre en 2012, membre fondateur de l'Alliance LoRa. fondateur de l'Alliance LoRa.
LoRaLoRa est un protocole de communication sans fil longue est un protocole de communication sans fil longue portée qui rivalise avec d’autres réseaux sans fil à faible portée qui rivalise avec d’autres réseaux sans fil à faible puissance tels que puissance tels que SIGFOXSIGFOX ou ou 4G/5G4G/5G à bande étroite ( à bande étroite (NBNB).).
Les circuits – modems Les circuits – modems LoRaLoRa de référence sont de référence sont SX1276/78SX1276/78, , SX1301 (multicanal), ..SX1301 (multicanal), ..
Les circuits Les circuits SX1276/78SX1276/78 sont intégrés avec les SoC ESP32 sur sont intégrés avec les SoC ESP32 sur les cartes Heltec utilisés sur la plate-forme les cartes Heltec utilisés sur la plate-forme IoT DevKitIoT DevKit..
SmartComputerLab 31
LoRa – émetteur/récepteurLoRa – émetteur/récepteur
Préparations :Préparations :
#include <SPI.h> // include libraries#include <SPI.h> // include libraries#include <LoRa.h>#include <LoRa.h>#define SCK 5 // GPIO5 SX127x's SCK#define SCK 5 // GPIO5 SX127x's SCK#define MISO 19 // GPIO19 SX127x's MISO#define MISO 19 // GPIO19 SX127x's MISO#define MOSI 27 // GPIO27 SX127x's MOSI#define MOSI 27 // GPIO27 SX127x's MOSI#define SS 18 // GPIO18 SX127x's CS#define SS 18 // GPIO18 SX127x's CS#define RST 14 // GPIO14 SX127x's RESET#define RST 14 // GPIO14 SX127x's RESET#define DI0 26 // GPIO26 SX127x's IRQ(Interrupt Request)#define DI0 26 // GPIO26 SX127x's IRQ(Interrupt Request)
#define freq #define freq 868E6868E6 #define sf #define sf 88#define sb #define sb 125E3125E3
SmartComputerLab 32
LoRa – émetteur/récepteurLoRa – émetteur/récepteur
unionunion pack pack{{
uint8_tuint8_t frame[16]; // trames avec octets frame[16]; // trames avec octetsfloat data[4]; // 4 valeurs en virgule flottantefloat data[4]; // 4 valeurs en virgule flottante
} sdp ; // paquet d’emission} sdp ; // paquet d’emission
void void setupsetup() {() { Serial.begin(9600);Serial.begin(9600); pinMode(DI0, INPUT); // signal interruption pinMode(DI0, INPUT); // signal interruption SPI.SPI.beginbegin(SCK,MISO,MOSI,SS);(SCK,MISO,MOSI,SS); LoRaLoRa..setPinssetPins(SS,RST,DI0);(SS,RST,DI0); if (!if (!LoRaLoRa..beginbegin((freqfreq)) {)) { Serial.println("Starting LoRa failed!");Serial.println("Starting LoRa failed!"); while (1);while (1); }}LoRaLoRa.setSpreadingFactor(.setSpreadingFactor(sfsf););LoRaLoRa.setSignalBandwidth (.setSignalBandwidth (sbsb););}}
SmartComputerLab 33
LoRa – émetteurLoRa – émetteur
float d1=12.0, d2=321.54 ;float d1=12.0, d2=321.54 ;
void void looploop() // la boucle de l’emetteur() // la boucle de l’emetteur{{Serial.println("New Packet") ;Serial.println("New Packet") ; LoRaLoRa..beginPacketbeginPacket(); // start packet(); // start packet sdp.data[0]=d1;sdp.data[0]=d1; sdp.data[1]=d2;sdp.data[1]=d2; LoRaLoRa..writewrite(sdp.frame,16);(sdp.frame,16); LoRaLoRa..endPacketendPacket();();d1++; d2+=2;d1++; d2+=2;delay(2000);delay(2000);}}
packet
SmartComputerLab 34
LoRa – récepteurLoRa – récepteur
float d1,d2;float d1,d2;int i=0;int i=0;
void void looploop() // la boucle de recepteur() // la boucle de recepteur{{int packetLen;int packetLen;packetLen=packetLen=LoRaLoRa.parsePacket();.parsePacket();if(packetLen==16)if(packetLen==16) {{ i=0;i=0; while (while (LoRaLoRa..availableavailable()) {()) { rdp.frame[i]=rdp.frame[i]=LoRaLoRa..readread();i++;();i++; }} d1=rdp.data[0];d2=rdp.data[1];d1=rdp.data[0];d2=rdp.data[1]; rssi=rssi=LoRaLoRa..packetRssipacketRssi(); // force du signal en réception en dB (); // force du signal en réception en dB Serial.println(d1); Serial.println(d2);Serial.println(d1); Serial.println(d2); Serial.println(rssi);Serial.println(rssi); }}}}
packet
SmartComputerLab 35
Une architecture IoT multitâche avec Une architecture IoT multitâche avec freeRTOSfreeRTOS – exemple : passerelle LoRa-WiFi – exemple : passerelle LoRa-WiFi
LoRa - terminaux
WiFi – Internet - WiFi – Internet - ThingSpeakThingSpeak
EEPROM module
CardKB module
SmartComputerLab 36
Une architecture IoT multitâche avec Une architecture IoT multitâche avec freeRTOSfreeRTOS – exemple : passerelle LoRa-WiFi – exemple : passerelle LoRa-WiFi
#include <Wire.h> // bus I2C#include <Wire.h> // bus I2C#include "WiFi.h"#include "WiFi.h"#include "ThingSpeak.h"#include "ThingSpeak.h"#include <U8x8lib.h> // ecran OLED #include <U8x8lib.h> // ecran OLED U8X8_SSD1306_128X64_NONAME_SW_I2C u8x8(15, 4, 16);U8X8_SSD1306_128X64_NONAME_SW_I2C u8x8(15, 4, 16);#include <AT24Cxx.h> // memoire EEPROM pour stocker les parametres#include <AT24Cxx.h> // memoire EEPROM pour stocker les parametres#define i2c_address 0x50 // adresse I2C pour le module EEPROM#define i2c_address 0x50 // adresse I2C pour le module EEPROMuint16_t paddr=0; uint16_t paddr=0; AT24Cxx eep(i2c_address, 32); // taille in KBAT24Cxx eep(i2c_address, 32); // taille in KB#define CARDKB_ADDR 0x5F // adresse I2C pour le clavier cardKB#define CARDKB_ADDR 0x5F // adresse I2C pour le clavier cardKBchar ssid[32],pass[32]; // parametres WiFichar ssid[32],pass[32]; // parametres WiFiWiFiClient client;WiFiClient client;#include <SPI.h> // bus SPI#include <SPI.h> // bus SPI#include <#include <LoRaLoRa.h>.h>#define SCK 5 // GPIO5 SX127x's SCK#define SCK 5 // GPIO5 SX127x's SCK#define MISO 19 // GPIO19 SX127x's MISO#define MISO 19 // GPIO19 SX127x's MISO#define MOSI 27 // GPIO27 SX127x's MOSI#define MOSI 27 // GPIO27 SX127x's MOSI#define SS 18 // GPIO18 SX127x's CS#define SS 18 // GPIO18 SX127x's CS#define RST 14 // GPIO14 SX127x's RESET#define RST 14 // GPIO14 SX127x's RESET#define DI0 26 // GPIO26 SX127x's IRQ(Interrupt Request)#define DI0 26 // GPIO26 SX127x's IRQ(Interrupt Request)#define #define freqfreq 434E6 434E6 // ou 868E6 en Europe // ou 868E6 en Europeint int sf=8;sf=8; // facteur d’etalement // facteur d’etalementint int sb=125E3;sb=125E3; // bande passante LoRa 125KHz,[250KHz,500Kz] // bande passante LoRa 125KHz,[250KHz,500Kz]
SmartComputerLab 37
Une architecture IoT multitâche avec Une architecture IoT multitâche avec freeRTOSfreeRTOS – exemple : passerelle LoRa-WiFi – exemple : passerelle LoRa-WiFi
unionunion {{ uint8_t frame[24];uint8_t frame[24]; struct struct {{ uint8_t head[4];uint8_t head[4]; float sens[5];float sens[5]; } data;} data; } pack;} pack;int setwifi=0,setts=0; // mode parametresint setwifi=0,setts=0; // mode parametreschar preset[32];char preset[32];int channel=1; // thingspeak channel: 112int channel=1; // thingspeak channel: 112char char chnumchnum[32];[32];char char wkeywkey[32]; // thingspeak channel write key : "0WLWT3UPVO2KI818"[32]; // thingspeak channel write key : "0WLWT3UPVO2KI818"
int int weepromweeprom(uint16_t addr, uint8_t *val, int len)(uint16_t addr, uint8_t *val, int len){{ for(int i=0;i<len;i++) for(int i=0;i<len;i++) eepeep..writewrite(addr++,val[i]); (addr++,val[i]); }}
int int reepromreeprom(uint16_t addr, uint8_t *val, int len)(uint16_t addr, uint8_t *val, int len){{ for(int i=0;i<len;i++) val[i] = for(int i=0;i<len;i++) val[i] = eepeep..readread(addr++); (addr++); }}
SmartComputerLab 38
Une architecture IoT multitâche avec Une architecture IoT multitâche avec freeRTOSfreeRTOS – exemple : passerelle LoRa-WiFi – exemple : passerelle LoRa-WiFi
int int getstrgetstr(char *p, int len)(char *p, int len){{int i=0; memset(p,0x00,len);int i=0; memset(p,0x00,len);while(1)while(1) { { WireWire..requestFromrequestFrom(CARDKB_ADDR, 1);(CARDKB_ADDR, 1); while(while(WireWire..availableavailable())()) {{ char c = char c = WireWire..readread(); // receive a byte as character(); // receive a byte as character if (c != 0)if (c != 0) {{ Serial.println(c, HEX);Serial.println(c);Serial.println(c, HEX);Serial.println(c); if(c==0x08 && i>0) { i;}if(c==0x08 && i>0) { i;} elseelse {{ if(c=='\n' || c=='\r'){u8x8.clear();i=0;return(0);}if(c=='\n' || c=='\r'){u8x8.clear();i=0;return(0);} else {p[i]=c;u8x8.drawString(0,i/16,p+16*(i/16));i++;}else {p[i]=c;u8x8.drawString(0,i/16,p+16*(i/16));i++;} if(i==len) {u8x8.clear();i=0;memset(p,0x00,len);return(1); }if(i==len) {u8x8.clear();i=0;memset(p,0x00,len);return(1); } } } }} }} delay(10);delay(10); }}}}
SmartComputerLab 39
Une architecture IoT multitâche avec Une architecture IoT multitâche avec freeRTOSfreeRTOS – exemple : passerelle LoRa-WiFi – exemple : passerelle LoRa-WiFi
voidvoid taskTStaskTS( void * ( void * parameterparameter)){ { int i=0,packetSize=0;int i=0,packetSize=0;char dbuff[32]; char dbuff[32]; whilewhile(1) // une tache s’execute en boucle !(1) // une tache s’execute en boucle ! {{ while (while (WiFiWiFi..statusstatus() != WL_CONNECTED) {() != WL_CONNECTED) { delay(500);delay(500); Serial.print(".");Serial.print("."); }} pack.data.sens[0]= (float) i++;pack.data.sens[0]= (float) i++; ThingSpeakThingSpeak..setFieldsetField(1, pack.data.sens[0]);(1, pack.data.sens[0]);
Serial.println(Serial.println(channelchannel); Serial.println(); Serial.println(wkeywkey);); ThingSpeakThingSpeak..writeFieldswriteFields((channelchannel, , wkeywkey);); delay(10000);delay(10000); }}}}
SmartComputerLab 40
Une architecture IoT multitâche avec Une architecture IoT multitâche avec freeRTOSfreeRTOS – exemple : passerelle LoRa-WiFi – exemple : passerelle LoRa-WiFi
voidvoid taskTS( void * taskTS( void * parameterparameter)){ { int i=0,packetSize=0;char dbuff[32]; int i=0,packetSize=0;char dbuff[32]; whilewhile(1)(1) { packetSize = { packetSize = LoRaLoRa..parsePacketparsePacket();(); if (packetSize==24) if (packetSize==24) { i=0;{ i=0; whilewhile ( (LoRaLoRa..availableavailable()) ()) { pack.frame[i]={ pack.frame[i]=LoRaLoRa..readread();i++; }();i++; } while (while (WiFiWiFi..statusstatus() != WL_CONNECTED) {() != WL_CONNECTED) { delay(500);Serial.print(".");delay(500);Serial.print("."); }} ThingSpeakThingSpeak..setFieldsetField(1, pack.data.sens[0]);(1, pack.data.sens[0]); ThingSpeakThingSpeak..setFieldsetField(2, pack.data.sens[1]);(2, pack.data.sens[1]); ThingSpeakThingSpeak..setFieldsetField(3, pack.data.sens[2]);(3, pack.data.sens[2]); ThingSpeakThingSpeak..setFieldsetField(4, pack.data.sens[3]);(4, pack.data.sens[3]); ThingSpeakThingSpeak..setFieldsetField(5, pack.data.sens[4]);(5, pack.data.sens[4]); ThingSpeakThingSpeak..writeFieldswriteFields((channelchannel, , wkeywkey);); delay(10000); }delay(10000); } } } }}
SmartComputerLab 41
Une architecture IoT multitâche avec Une architecture IoT multitâche avec freeRTOSfreeRTOS – exemple : passerelle LoRa-WiFi – exemple : passerelle LoRa-WiFi
void void setupsetup()(){{char dbuf[32]; int cn=0;char dbuf[32]; int cn=0; Serial.begin(9600);Serial.begin(9600);WireWire.begin(21,22); ...begin(21,22); .. SPISPI.begin(SCK,MISO,MOSI,SS);.begin(SCK,MISO,MOSI,SS);LoRaLoRa.setPins(SS,RST,DI0);.setPins(SS,RST,DI0); if (!if (!LoRaLoRa.begin(434E6)) {.begin(434E6)) { Serial.println("Starting LoRa failed!");Serial.println("Starting LoRa failed!"); while (1);while (1); }} WiFiWiFi.disconnect(true);.disconnect(true); delay(100);delay(100); WiFiWiFi.begin(ssid, pass); .begin(ssid, pass); while (while (WiFiWiFi.status() != WL_CONNECTED) { delay(500); Serial.print(".");.status() != WL_CONNECTED) { delay(500); Serial.print("."); }} IPAddress ip = IPAddress ip = WiFiWiFi.localIP(); ...localIP(); .. sprintf(dbuf,"%d.%d.%d.%d",ip[0],ip[1],ip[2],ip[3]);sprintf(dbuf,"%d.%d.%d.%d",ip[0],ip[1],ip[2],ip[3]); u8x8u8x8.drawString(0,3,dbuf); ...drawString(0,3,dbuf); .. ThingSpeakThingSpeak.begin(client);.begin(client); delay(1000);delay(1000); Serial.println("ThingSpeak begin");Serial.println("ThingSpeak begin"); xTaskCreatexTaskCreate(( taskTS, /* Task function. */taskTS, /* Task function. */ "taskTS", /* String with name of task. */"taskTS", /* String with name of task. */ 10000, /* Stack size in words. */10000, /* Stack size in words. */ NULL, /* Parameter passed as input of the task */NULL, /* Parameter passed as input of the task */ 0, /* Priority of the task. */0, /* Priority of the task. */ NULL);NULL);}}
void void looploop(){ Serial.println("in the loop");delay(3000);}(){ Serial.println("in the loop");delay(3000);}
SmartComputerLab 42
IoT DevKit et architectures IoT IoT DevKit et architectures IoT
Architectures des terminaux IoTArchitectures des terminaux IoT
● Terminaux simples – mono-tâche : ESP12/ESP32Terminaux simples – mono-tâche : ESP12/ESP32● Terminaux complexes – multi-tâches (Terminaux complexes – multi-tâches (freeRTOSfreeRTOS) : ESP32) : ESP32
Architectures des passerelles IoT :Architectures des passerelles IoT : ESP32 ESP32
● Multi-tâches et configurables (Multi-tâches et configurables (freeRTOSfreeRTOS))
Une vaste sélection des cartes et des capteurs/actionneurs Une vaste sélection des cartes et des capteurs/actionneurs permettant de construire une grande variété d’permettant de construire une grande variété d’architecturesarchitectures IoT façon LEGOIoT façon LEGO..
SmartComputerLab 43
IoT DevKit et architectures IoTIoT DevKit et architectures IoT
Serveurs IoT Serveurs IoT
● ThingSpeak.frThingSpeak.fr● Thinger.frThinger.fr
Support pédagogique completSupport pédagogique complet
Incluant :Incluant :● Les préparations du Les préparations du logiciellogiciel - - scriptes Arduino scriptes Arduino et et
bibliothèques de bibliothèques de composantscomposants● Les Les exemplesexemples d’utilisation de l’ensemble des d’utilisation de l’ensemble des cartescartes et des et des
capteurs/actionneurscapteurs/actionneurs● Exemples Exemples d’architecturesd’architectures dans les dans les différentes domaines différentes domaines
d’application d’application