| |
| arduino:uc:mkr [2022/03/28 10:52] – [4.4 Serveurs HTTP] phil | arduino:uc:mkr [Date inconnue] (Version actuelle) – supprimée - modification externe (Date inconnue) 127.0.0.1 |
|---|
| {{ :suivant.png?nolink&30|}} {{ :retour.png?nolink&30|}} [[arduino:accueilarduino|{{ :iconemaison.jpg?nolink&30|Sommaire Arduino}}]] | |
| |
| ===== La carte Arduino MKR Wifi 1010 ===== | |
| [Mise à jour le 26/3/2022] | |
| {{ :arduino:arduino.png?80&nolink|}} | |
| |
| === Sources sur le site Arduino=== | |
| * <html><a href = "https://store.arduino.cc/arduino-genuino/arduino-genuino-mkr-family" target="_blank">MKR FAMILY</a></html> | |
| * <html><a href="https://www.arduino.cc/en/Guide/MKRWiFi1010#toc3" target="_blank">Getting started with the MKR WiFi 1010</a></html> | |
| |
| === Lecture connexe === | |
| * Wiki matériels - [[materiels:accueilmateriels|"Capteurs, afficheurs, préactionneurs, etc."]] | |
| * Wiki Arduino - [[arduino:clientmqttesp8266|"Mettre en oeuvre un client MQTT sur un EP8266 (ESP32) Feather Huzzah ou Wifi MKR1010"]] | |
| * <html><a href="https://www.arduinolibraries.info/" target="_blank">Arduino Library List</a></html> | |
| |
| === Distributeur === | |
| * <html><a href="https://www.mouser.fr/new/arduino/arduino-mkr-wifi-1010/" target="_blank">Mouser</a></html> | |
| |
| ---- | |
| |
| |
| ===== 1. La gamme MKR ===== | |
| La gamme <html><a href="https://store.arduino.cc/arduino-genuino/arduino-genuino-mkr-family" target="_blank"><strong>MKR</strong></a></html> est une référence dans le domaine des cartes de développement **IoT**. Elle regroupe plusieurs cartes dont le tarif varie entre 20 et 60 euros (2019). | |
| |
| {{ :arduino:mkr_family.jpg?nolink&600 |}} | |
| |
| ==== 1.1 Connectivité ==== | |
| Toutes les cartes de la gamme MKR possèdent le même nombre d'<html><a href="https://www.didel.com/LogiqueMicro.pdf" target="_blank" title="On appelle entrées-sorties les échanges d'informations entre le processeur et les périphériques qui lui sont associés."><strong>E/S</strong></a></html>. Elles sont fournies avec un total de **22 broches d'E/S numérique** dont **12 broches PWM**. Elles comprennent également **7 broches d'entrée analogique** et **1 broche de sortie analogique**. | |
| |
| Il existe plusieurs shields MKR, par exemple le blindage MKR Relay Proto Shield qui permet d’utiliser des relais et qui fournit de l'espace pour ajouter d'autres composants grâce à sa zone de prototypage. | |
| |
| Bien qu'elles ne soient pas compatibles avec les shields Arduino Uno, il est possible de connecter facilement des capteurs aux cartes MKR à l'aide de l'adaptateur <html><a href="https://store.arduino.cc/arduino-mkr-connector-carrier" target="_blank">Arduino MKR Connector Carrier</a></html> (Grove compatible). <html><a href="https://webge.fr/doc/wikis/pdf/MKRConnectorCarrier_V3.0_sch.pdf" target="_blank">[Schéma]</a></html> | |
| {{ :arduino:arduino_mkr_connector.jpg?nolink&500 |}} | |
| |
| ===== 2. La carte Arduino MKR Wifi 1010 ===== | |
| Le MKR WIFI 1010 est équipé d'un module **ESP32** fabriqué par U-BLOX. Cette carte a pour objectif d’accélérer et de simplifier le prototypage des applications IoT basées sur le WiFi grâce à la flexibilité du module ESP32 et à sa faible consommation d’énergie. La carte est composée de **trois principaux blocs** : | |
| * Microcontrôleur **SAMD21** Cortex-M0+ 32bit Low Power ARM MCU <html><a href="https://cdn.sparkfun.com/datasheets/Dev/Arduino/Boards/Atmel-42181-SAM-D21_Datasheet.pdf" target="_blank">(Datasheet)</a></html> | |
| * **U-BLOX NINA-W10** Series Low Power 2.4GHz IEEE® 802.11 b/g/n Wi-Fi <html><a href="https://www.u-blox.com/sites/default/files/NINA-W10_DataSheet_%28UBX-17065507%29_C1-Public.pdf" target="_blank">(Datasheet)</a></html> | |
| * **ECC508 Crypto Authentication**. <html><a href="https://www.microchip.com/wwwproducts/en/atecc508a" target="_blank">(Datasheet)</a></html> | |
| {{ :arduino:mkr1010.jpg?nolink&350 | | |
| }} | |
| |
| * **Principales caractéristiques** | |
| * **Alimentation** de la carte : **5V** (circuit sous **3,3V**:!:) | |
| * **Batterie** supportée : Li-Po Single Cell, 3.7V, 700mAh Minimum | |
| * **E/S numériques** : 8 (7mA) | |
| * **PWM** : 2 (0, 1, 2, 3, 4, 5, 6, 7, 8, 10, A3 - or 18 -, A4 -or 19) | |
| * **UART** : 1 | |
| * **SPI** : 1 | |
| * **I2C** : 1 | |
| * **I2S** : 1 | |
| * **Réseau** : Wifi (sécurisé à l'aide du cryptage SHA-256) | |
| * **Entrées analogiques** : 7 (ADC 8/10/12 bit) | |
| * **Sortie analogique** : 1 (DAC 10bits) | |
| * **Interruptions externes** : 8 (0, 1, 4, 5, 6, 7, 8, A1 -or 16-, A2 - or 17) | |
| * **Flash** : 256KB | |
| * **SRAM** : 32KB | |
| * **EEPROM** : Non | |
| * **Fréquence d'horloge** : 48MHz, 32.768 kHz (RTC) | |
| |
| |
| <note warning>Contrairement à la plupart des cartes Arduino, le MKR WIFI 1010 fonctionne sous 3,3V. La tension maximale tolérée par les broches d’E/S est de 3,3V. **L'application de tensions supérieures à 3,3 V à n'importe quelle broche d'E/S peut endommager la carte**. Bien que la sortie sur des appareils numériques 5V soit possible, la communication bidirectionnelle avec des appareils 5V nécessite un décalage de niveau approprié. **Cette adaptation de niveau est réalisée par la carte Arduino MKR Connector Carrier** ci-dessus.</note> | |
| |
| {{ :arduino:uc:mkr_wifi_1010_pinout.jpg?nolink |}} | |
| |
| <note tip>Pour afficher le diagramme de brochage complet au format PDF, cliquer <html><a href="https://content.arduino.cc/assets/Pinout-MKRwifi1010_latest.pdf" target="_blank">ici</a></html> ou le **schéma** de la carte MKR Wifi 1010, cliquer <html><a href="https://webge.fr/doc/wikis/pdf/MKRWiFi1010V2.0_sch.pdf" target="_blank">ici</a></html>.</note> | |
| |
| <note>Le réseau Wi-Fi est à faible consommation d'énergie. Le port USB du MKR1010 peut être utilisé pour alimenter la carte sous 5V. Il possède un circuit de charge Li-Po qui permet à l'Arduino MKR WIFI 1010 de fonctionner sur batterie ou sur une source externe de 5 volts, chargeant la batterie Li-Po tout en utilisant une alimentation externe. Le passage d'une source à l'autre se fait automatiquement.</note> | |
| |
| |
| ===== 3. Préparation de l'IDE Arduino ===== | |
| |
| ==== 3.1 Installation du support "Arduino SAMD Boards" ==== | |
| * Dans le menu « **Outils** » , « **Type de carte** » et « **Gestionnaire de carte** », rechercher « Arduino SAMD Board » et installer le composant. | |
| {{ :arduino:uc:gestmkr1010.png?nolink |}} | |
| |
| ==== 3.2 Les bibliothèques ==== | |
| A partir du **gestionnaire de bibliothèque** de l'IDE Arduino, **télécharger** et **installer** : | |
| |
| === 3.2.1 WifiNINA === | |
| * **Sources** sur <html><a href="https://github.com/arduino-libraries/WiFiNINA" target="_blank">github</a></html> | |
| * **Documentation** sur <html><a href="https://www.arduino.cc/en/Reference/WiFiNINAarduino.cc"target="_blank">arduino.cc</a></html> | |
| |
| Active la **connexion réseau** (locale et Internet) des Arduino MKR Wifi 1010, Arduino MKR VIDOR 4000 et Arduino UNO Wifi Rev.2. Avec cette bibliothèque, vous pouvez instancier des serveurs, des clients et envoyer / recevoir des paquets UDP via le wifi. La carte peut se connecter à des réseaux ouverts ou cryptés (WEP, WPA). L'adresse IP peut être attribuée de manière statique ou via un serveur DHCP. La bibliothèque peut aussi gérer le DNS. | |
| |
| * **Mise à jour du firmware du module WIFI NINA** | |
| - Mettre à jour la bibliothèque WiFiNINA avec le gestionnaire de bibliothèques. | |
| - Vérifier la version du firmware installé en téléchargeant et en exécutant l'exemple **//CheckFirmwareVersion//** (→ Fichier → Exemples → WiFiNINA -> Tools). Les informations apparaissent dans le moniteur série. | |
| - Télécharger et exécuter l'exemple **//FirmwareUpdater//** dans la carte (→ Fichier → Exemples → WiFiNINA -> Tools) puis mettre à jour le firmware à l'aide de **WIFI101/WiFiNINA Firmware Updater** (-> Outils). | |
| |
| === 3.2.2 PubSubClient === | |
| * **Sources** et documentation de <html><span title="Créateur de Node Red"><strong>Nick O'Leary</strong></span></html> sur <html><a href="https://github.com/knolleary/pubsubclient" target="_blank">github</a></html> | |
| |
| Cette bibliothèque fournit un client pour faire de simples messages de publication / abonnement avec un serveur prenant en charge MQTT. | |
| |
| === 3.2.3 WifiWebServer === | |
| * **Sources** sur <html><a href="https://github.com/khoih-prog/WiFiWebServer" target="_blank">github</a></html> | |
| |
| WifiWebServer est une bibliothèque serveur simple mais complète pour les cartes AVR, Teensy, SAM DUE, **Arduino SAMD21**, Adafruit SAMD21/SAMD51, Adafruit nRF52, ESP32/ESP8266, STM32F/L/H/G/WB/MP1, etc., utilisant les modules/boucliers WiFi (WiFiNINA, WiFi101, U-Blox W101, W102, ESP8266/ESP32-AT, etc.). \\ Les fonctions sont similaires et compatibles à celles de <html><a href="https://github.com/espressif/arduino-esp32/tree/master/libraries/WebServer" target="_blank">ESP32 WebServer</a></html> et des <html><a href="https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266WebServer" target="_blank">ESP8266WebServer</a></html>. \\ A partir de la v1.1.0 cette bibliothèque fournit également un client HTTP et WebSocket de haut niveau dont les fonctions sont similaires et compatibles à celles de la bibliothèque <html><a href="https://github.com/arduino-libraries/ArduinoHttpClient" target="_blank">ArduinoHttpClient</a></html>. | |
| ===== 4. Démarrer avec la carte Arduino MKR WiFi 1010 ===== | |
| |
| |
| |
| === 4.1 Blink un premier Programme pour dire "Hello" === | |
| |
| <code cpp *.cpp> | |
| void setup() { | |
| pinMode(LED_BUILTIN,OUTPUT); | |
| } | |
| | |
| void loop() { | |
| digitalWrite(LED_BUILTIN, HIGH); | |
| delay(1000); | |
| digitalWrite(LED_BUILTIN, LOW); | |
| delay(1000); | |
| } | |
| </code> | |
| |
| {{ :arduino:uc:platformioico.png?nolink&50|}} | |
| <note tip><html><a href="https://webge.fr/doc/wikis/code/Arduino/ARD_PIO_MKR1010_Blink.zip" target="_blank">Télécharger</a></html> le projet PlatformIO pour VSCode.</note> | |
| |
| === 4.2 Intégrer une nouvelle carte MKR1010 dans le réseau Wifi=== | |
| |
| * Ouvrir l'exemple //**WiFiPing**// accessible à partir de (-> Fichier -> Exemples -> WiFiNINA) dans le logiciel Arduino. | |
| * Compléter le **SSID** et le **mot de passe** du Wifi comme dans l'exemple ci-dessous. | |
| <code cpp *.cpp> | |
| // Modifications dans WiFiPing | |
| // Specify IP address or hostname | |
| String hostName = "IP de la box à renseigner"; | |
| |
| // Modifications dans arduino_secrets.h | |
| #define SECRET_SSID "à renseigner" | |
| #define SECRET_PASS "à renseigner" | |
| </code> | |
| //Résultat dans le moniteur série// | |
| {{ :arduino:wifiping.png?nolink&400 |}} | |
| * Programmer la carte. | |
| * Identifier l'adresse **MAC** de la carte avec **Advanced Port Scanner**. | |
| * Entrer l'**@MAC** et attribuer une **@IP** à la carte dans l'onglet "//Réservation DHCP//" de la box du réseau. | |
| * Redémarrer la carte. | |
| |
| {{ :arduino:uc:platformioico.png?nolink&50|}} | |
| <note tip><html><a href="https://webge.fr/doc/wikis/code/Arduino/ARD_PIO_PING_MKR1010.zip" target="_blank">Télécharger</a></html> le projet PlatformIO pour VSCode.</note> | |
| === 4.4 Serveurs HTTP === | |
| * ** Ressource ** : <html><a href="https://randomnerdtutorials.com/esp32-http-get-post-arduino/" target="_blank">ESP32 HTTP GET and HTTP POST with Arduino IDE (JSON, URL Encoded, Text)</a></html> | |
| | |
| <note warning>Ce paragraphe présente **deux** versions d'un serveur HTTP : \\ | |
| - La **Version 1** est une étude de cas pour le cours d'algorithmique \\ | |
| - La **dernière version** est utilisée dans les projets. | |
| </note> | |
| |
| == 4.4.1 VERSION 1 : étude de cas == | |
| * ** Source** : //SimpleWebServer// (-> Fichier -> Exemples -> WiFiNINA) | |
| * **Montage**{{ :arduino:uc:mkr1010serveur.jpg?nolink |}} | |
| * **Algorithme** | |
| <code> | |
| // Principe | |
| // Le serveur lit les requêtes caractère par caractère et extrait les données de l'url | |
| // En réponse à la requête, il envoie une valeur ou/et déclenche une commande | |
| // Exemples | |
| // pas de données dans la requête => envoie de la page d'accueil | |
| // /arduino/digital/led/1 => activation d'une sortie | |
| // /arduino/digital/led/0 => désactivation d'une sortie | |
| // /arduino/analog/val1 => mesure et envoie d'une valeur issue du CAN | |
| |
| // Initialisation | |
| Créer un serveur HTTP à l'écoute sur le port 80 | |
| |
| 1. si le module wifi n'est pas détecté alors | |
| bloquer le programme | |
| 2. tant que le module n'est pas connecté au wifi faire | |
| se connecter au wifi avec le SSID et le mot2passe | |
| fin tant que | |
| 3. Démarrer le serveur HTTP | |
| |
| // Programme | |
| Répéter toujours | |
| début // 4. Traiter les requêtes | |
| Attente blocante d'un client | |
| si un client est connecté alors | |
| | currentLine <- "" // mémorise la donnée transmise dans la requête | |
| | tant que le client est connecté faire | |
| | | si il reste des caractères à lire | |
| | | alors | |
| | | | lire le dernier caractère transmis | |
| | | | si ce caractère est une fin de ligne | |
| | | | alors | |
| | | | | si currentLine = "" // on a eu 2 fin de lignes consécutifs ! => pas de donnée transmise | |
| | | | | alors | |
| | | | | Envoyer la page d'accueil au client et sortir de la boucle tant que | |
| | | | | sinon | |
| | | | | currentLine <- "" | |
| | | | | fin si | |
| | | | sinon | |
| | | | | si le caractère lu n'est pas un retour chariot | |
| | | | | alors | |
| | | | | on l'ajoute à la fin de currentLine | |
| | | | | fin si | |
| | | | fin si | |
| | | | // Traitement les autres requête(s) (une url suit l'@IP) | |
| | | | Traiter la requête 1 et sortir de la boucle tant que | |
| | | | Traiter la requête 2 et sortir de la boucle tant que | |
| | | | ... | |
| | | | Traiter la requête n et sortir de la boucle tant que | |
| | | fin si | |
| | fin tant que | |
| fin si | |
| Fermer la connexion | |
| fin | |
| </code> | |
| |
| * **Code** (adaptation de l'exemple __SimpleWebServer__) | |
| {{ :arduino:uc:platformioico.png?nolink&50|}} | |
| <note tip><html><a href="https://webge.fr/doc/wikis/code/Arduino/ARD_MKR1010_HTTP_SERVER_V1.zip" target="_blank" title="Version 1">Télécharger</a></html> le projet PlatformIO pour VSCode.</note> | |
| |
| * **Tests**{{ :arduino:uc:pageaccueil.png?nolink |}} | |
| |
| == 4.4.2 VERSION utilisée dans les projets == | |
| * ** Source** : //AdvancedWebServer// (-> Fichier -> Exemples -> WiFiWebServer) | |
| * **Montage**{{ :arduino:uc:mkr1010serveur.jpg?nolink |}} | |
| * **Algorithme** | |
| <code> | |
| // Serveur HTTP V4 | |
| // Le serveur répond à une requête en envoyant une ou des valeurs lues sur ses entrées | |
| // et/ou en déclenchant une commande sur ses sorties | |
| // Exemples | |
| // pas de données dans la requête => envoie de la page d'accueil | |
| // /ecrire/valA?val=1 => activation de la sortie valA | |
| // /ecrire/valA?val=0 => désactivation de la sortie valA | |
| // /lire/val1 => mesure et envoie la valeur présente sur l'entrée val1 (issue du CAN) | |
| // ------------------------------------------------------------------------------------ | |
| // Variables | |
| chaîne de caractères <- page HTML (accueil) | |
| tableaux de caractères <- SSID et mot2passe | |
| |
| // Liste des gestionnaires (fonctions) répondant à une requête | |
| g1. Envoie de la page d'accueil | |
| g2. Commande de la led L de la carte et de la sortie D0 | |
| g3. Commande de la sortie D1 | |
| g4. Mesure et transmission de la valeur analogique présente sur A0 | |
| g5. Mesure et transmission de la valeur analogique présente sur A1 | |
| g6. Mesure et transmission des valeurs analogiques présentes sur A0 et A1 au format JSON | |
| g7. Traitement des requêtes non prises en charge | |
| ... | |
| gn ... | |
| |
| // Initialisation | |
| a. Configuration des E/S | |
| b. Si le module wifi n'est pas détecté, alors | |
| bloquer le programme !!!! | |
| c. tant que le module n'est pas connecté au réseau wifi | |
| faire | |
| se connecter au réseau Wifi avec le SSID et le mot2passe | |
| fin tant que | |
| d. Inscription les gestionnaires de requête | |
| e. Démarrage du serveur HTTP | |
| | |
| Répéter toujours | |
| Traiter une requête | |
| </code> | |
| |
| * **Code** | |
| {{ :arduino:uc:icoarduinoplatformio.png?nolink|}} | |
| <note tip><html><strong>Télécharger</strong> le projet <a href="https://webge.fr/doc/wikis/code/Arduino/ARD_PIO_MKR1010_HTTP_SERVER.zip" target="_blank" title="Version 4">PlatformIO</a> pour VSCode ou le projet <a href="https://webge.fr/doc/wikis/code/Arduino/ARD_MKR1010_HTTP_SERVER_V4.zip" target="_blank" title="Version 4">Arduino</a></html>.</note> | |
| |
| * **Tests** {{ :arduino:uc:pageaccueilv4.jpg?nolink |}} | |
| === 4.5 Client MQTT=== | |
| * Voir la page [[arduino:clientmqttesp8266|"Mettre en oeuvre un client MQTT sur un EP8266 (ESP32) Feather Huzzah ou MKR Wifi 1010"]] | |
| ===== 5. Tutoriels ===== | |
| Des liens vers des tutoriels sont accessibles sur la page [[arduino:webographie|webographie]]. | |