Nous avons suivi le MOOC de l'institut Mines Telecom sur la plateforme FUN (France Université Numérique) qui s'intitule "Fabriquer un objet connecté".
Il s'agit de Fabriquer un objet, Nelson, qu'on connectera à internet en Wifi.
Nelson a été inventé par Maxime Castelli.
Sommaire |
Attention deux pièces nécessitent un réglage particulier !!
En effet, sans ce réglage la pièce est mal imprimée !
Régler avec Cura : Choisir la configuration experte : Menu Expert -> Configuration experte, une fenêtre s'ouvre.
Décocher "Combiner l'ensemble (option A)".
Téléchargez les pièces du Nelson sur Thingiverse.
Allumez le logiciel Arduino.
Allez dans le menu Arduino -> Préférence, une fenêtre s'ouvre.
Dans le champ "URL de gestionnaire de cartes supplémentaires" copiez-collez l'URL suivante : http://arduino.esp8266.com/stable/package_esp8266com_index.json
pb de driver !! les drivers CP210x USB to UART Bridge VCP
On utilise le programme présent dans les exemples de la librairie ESP8266 : Menu Fichier -> Exemples -> ESP8266WiFi -> WiFiScan
/* * Ce programme montre comment scanner les réseaux wifi autour de vous. * C'est à peut près la même qu'avec la bibliothèque d'un Shield WiFi, * Le principale différence est l'inclusion de ce fichier : */ #include "ESP8266WiFi.h" void setup() { Serial.begin(115200); // Met le wifi en attente (en mode station) et le déconnecte de tout réseau auquel il auurait pu être connecté WiFi.mode(WIFI_STA); WiFi.disconnect(); delay(100); Serial.println("Paramétrage effectué"); } void loop() { Serial.println("Début du scan"); // WiFi.scanNetworks renvoie le nombre de réseau wifi trouvé int n = WiFi.scanNetworks(); Serial.println("Scan terminé"); if (n == 0) Serial.println("Aucun réseau trouvé"); else { Serial.print(n); Serial.println(" réseaux trouvés"); for (int i = 0; i < n; ++i) { // renvoie sur le moniteur le SSID et le RSSI (force du réseau) pour chaque réseau trouvé Serial.print(i + 1); Serial.print(": "); Serial.print(WiFi.SSID(i)); Serial.print(" ("); Serial.print(WiFi.RSSI(i)); Serial.print(")"); Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*"); delay(10); } } Serial.println(""); // attend 5 secondes et scanne à nouveau delay(5000); }
/* * */ #include <ESP8266WiFi.h> const char* ssid = "nom-de-votre-réseau"; // Nom du réseau const char* password = "Clé"; // clé void setup() { Serial.begin(115200); delay(10); // We start by connecting to a WiFi network Serial.print("Connexion au WiFi "); Serial.println(ssid); WiFi.begin(ssid, password); // On se connecte while (WiFi.status() != WL_CONNECTED) { // On attend delay(500); Serial.print("."); } Serial.println(""); // on affiche les paramètres Serial.println("WiFi connecté"); Serial.print("Adresse IP du module EPC: "); Serial.println(WiFi.localIP()); Serial.print("Adresse IP de la box : "); Serial.println(WiFi.gatewayIP()); } void loop() { }
/* * Progtrame Client-Copteur du MOOC MinesTelecom "Fabriquer un objet connecté" */ #include <ESP8266WiFi.h> const char* ssid = "nom-de-votre-réseau"; // Nom du réseau const char* password = "Clé"; // clé // valeurs pour le serveur Web const char* host = "api.tom.tools"; void setup() { Serial.begin(115200); delay(10); // On commence par se connecter au réseau Wifi Serial.print("Connexion au WiFi "); Serial.println(ssid); WiFi.begin(ssid, password); // On se connecte while (WiFi.status() != WL_CONNECTED) { // On attend delay(500); Serial.print("."); } Serial.println(""); // on affiche les paramètres Serial.println("WiFi connecté"); Serial.print("Adresse IP du module EPC: "); Serial.println(WiFi.localIP()); Serial.print("Adresse IP de la box : "); Serial.println(WiFi.gatewayIP()); } void loop() { Serial.print("Connexion au serveur : "); Serial.println(host); // On se place dans le rôle du client en utilisant WifiClient WiFiClient client; // le serveur Web attend tradionnellement sur le port 80 const int httpPort = 80; // Si la connexio échoue ca sera pour la prochaine fois if (!client.connect(host, httpPort)) { Serial.println("la connexion a raté"); return; } // La connexion a réussie on forme le chemin String url = String("/hits/"); Serial.print("demande URL: "); Serial.println(url); // On l'envoie au serveur sur plusieurs lignes // GET /compteur.php HTTP/1.1 // Hosts: outils.plido.net // Connection: close // // La première ligne précise à la fin version du protocole attendu // La deuxième rappelle au serveur sous quel nom on l'appelle, en // effet, à une même adresse IP on peut avoire différents serveurs // repondant à des noms différents. // La troisième ligne indique que le serveur doit fermer la // connexion apres la réponse et ne pas attendre d'autres requêtes. client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); // On attend 10 mili-secondes delay(1000); // On lit les données reçues, s'il y en a while(client.available()){ String line = client.readStringUntil('\r'); // découpe ligne par ligne Serial.print(line); } // plus de données Serial.println(); Serial.println("connexion fermée"); delay(30000); }
WiFiTemperature.ino qui va interroger le serveur openweathermap.org :
#include <ESP8266WiFi.h> // valeurs pour le WiFi const char* ssid = "toto"; const char* password = "clé"; // valeurs pour le serveur Web const char* host = "api.openweathermap.org"; const char* apikey = "votre clé API (apikey)"; const char* town = "Rennes,fr"; String keyword = String("\"temp\":"); //chaîne que l'on recherche dans le JSON void setup() { Serial.begin(115200); delay(10); // On se connecte au wifi comme d'habitude Serial.print("Connexion au WiFi "); Serial.println(ssid); WiFi.begin(ssid, password); // On se connecte while (WiFi.status() != WL_CONNECTED) { // On attend delay(500); Serial.print("."); } Serial.println(""); // on affiche les paramètres Serial.println("WiFi connecté"); Serial.print("Adresse IP du module EPC: "); Serial.println(WiFi.localIP()); Serial.print("Adresse IP de la box : "); Serial.println(WiFi.gatewayIP()); } // drapeau indiquant pendant l'analyse de la réponse du serveur // si on est dans l'en-tête HTTP (false) ou dans le contenu de // la ressource. bool inBody = false; void loop() { float temperature = 0; /* lue du fichier JSON reçu */ Serial.print("Connexion au serveur : "); Serial.println(host); // On se place dans le rôle du client en utilisant WifiClient WiFiClient client; // le serveur Web attend traditionnellement sur le port 80 const int httpPort = 80; // Si la connexion échoue ça sera pour la prochaine fois if (!client.connect(host, httpPort)) { Serial.println("La connexion a échoué"); return; } // La connexion a réussie on forme le chemin // URL complexe composé du chemin et de deux // questions contenant le nom de ville et l'API key String url = String("/data/2.5/weather?q=") + town + "&appid=" + apikey; Serial.print("demande URL: "); Serial.println(url); client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); // On attend 1 seconde delay(10000); inBody = false; // on est dans l'en-tête // On lit les données reçues, s'il y en a while(client.available()){ String line = client.readStringUntil('\r'); if (line.length() == 1) inBody = true; /* passer l'en-tête jusqu'à une ligne vide */ if (inBody) { // ligne du corps du message, on cherche le mot clé int pos = line.indexOf(keyword); if (pos > 0) { /* mot clé trouvé */ // indexOf donne la position du début du mot clé, en ajoutant sa longueur // on se place à la fin. pos += keyword.length(); Serial.println (&line[pos]); temperature = atof(&line[pos]); } /* fin récupération du flottant */ } /* fin de la recherche du mot clé */ } /* fin de la recherche de données */ Serial.println();Serial.print ("Temperature = "); Serial.println(temperature-273.15); // temp en Kelvin Serial.println("connexion fermée"); delay(120000); // 2 minutes }
© Graphisme : Les Petits Débrouillards Grand Ouest (Patrice Guinche - Jessica Romero) | Développement web : Libre Informatique