| |
arduino:uc:mkr [2022/03/28 10:19] – [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_PIO_MKR1010_HTTP_SERVER.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** : //SimpleWebServer// (-> Fichier -> Exemples -> WiFiNINA) | |
| |
* **Montage** | |
| |
* **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:platformioico.png?nolink&50|}} | |
<note tip><html><strong>Télécharger</strong> le projet <a href="https://webge.fr/doc/wikis/code/Arduino/ARD_MKR1010_HTTP_SERVER_V4.zip" target="_blank" title="Version 4">Arduino</a> ou le projet <a href="https://webge.fr/doc/wikis/code/Arduino/ARD_PIO_MKR1010_HTTP_SERVER.zip" target="_blank" title="Version 4">PlatformIO</a></html> pour VSCode.</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]]. | |