Voila, j'ai besoin de votre aide pour mon projet de fin d'année. Pour des experts comme la plupart d'entre vous ici, c'est peux être rien ou même une routine, mais pour un étudiant comme moi, c'est nouveau, merci d’être indulgent
Je vais vous expliquer le projet mais je vous rassure, ce que je demande est juste une petite partie de ce projet
Le projet: Crée un système de contrôle de valve a distance (à travers internet). Le client doit être capable d'intervenir sur le système depuis n'importe que endroit du monde simplement en se connectant sur un site internet (hébergé sur un serveur distant non dans l’Arduino). Mon rôle est de m'occuper de la partie communication Arduino/serveur.
Le site web doit aussi afficher des informations (status de la valve), ce qui veux dire que l’Arduino doit être capable d'envoyer des data mais aussi d'en recevoir, notamment les ordres qu'envoi l'utilisateur (ouvrir/fermer la valve).
En clair je doit être capable de:
1 - connecter mon Arduino UNO au Wifi a travers le module ESP8266: FAIT!
-----> j'utilise des commandes AT pour connecter le module au routeur
2 - Envoyer des datas au serveur pour les afficher sur le site web: FAIT!
-----> j'utilise des HTTP request GET (TCP) pour connecter au serveur et envoyer la commande a un fichier PHP
3 - recevoir les ordres du serveur: A l'Aide!
-----> C'est la ou j'ai besoin de vous. Je suis coincé. Je ne sait pas quoi utiliser UDP ou TCP? Quel adresse IP utilisé étant donné que je ne peux pas utiliser de "port forwarding" au routeur de l'université.
Je voudrais votre aide par un simple exemple: comment recevoir un message "Hello world" envoyer par une page web.
Merci pour votre aide
Voici le code utilisé jusque la pour la partie "connexion WIFI" et "envoi de data au server PHP". Il me manque la partie "recevoir un message":
#include <SoftwareSerial.h>
SoftwareSerial ESP8266(10, 11);
String Network = "SSID";
String Password = "MyPassword";
void setup()
{
Serial.begin(9600);
ESP8266.begin(115200);
ESP8266.println("AT+CIOBAUD=9600");
readESP8266(4000);
ESP8266.begin(9600);
InitESP8266();
ConnectToWebsite();
}
void loop()
{
while(ESP8266.available())
{
Serial.println(ESP8266.readString());
}
}
/* Function to initialise ESP8266 */
void InitESP8266()
{
ESP8266.println("AT");
readESP8266(2000);
ESP8266.println("AT+CWMODE=3"); //Wifi mode
readESP8266(5000);
ESP8266.println("AT+CWJAP=\""+ Network + "\",\"" + Password +"\""); //connect wifi
readESP8266(10000);
ESP8266.println("AT+CIFSR"); // IP adress
readESP8266(1000);
ESP8266.println("AT+CIPMUX=1"); // multiple connections
readESP8266(1000);
}
/* Function to connect to the server */
void ConnectToWebsite()
{
ESP8266.println("AT+CIPSTART=1,\"TCP\",\"www.mywebsite.com\",80"); //connect to website
readESP8266(10000);
ESP8266.println("AT+CIPSEND=1,114");
readESP8266(2000);
String httpreq = "GET /test.php?ldata=233 HTTP/1.1";
// Make a HTTP request:
ESP8266.println(httpreq);
readESP8266(10000);
ESP8266.println("Host: www.mywebsite.com");
ESP8266.println("Connection: keep-alive");
ESP8266.println("");
readESP8266(5000);
Serial.println("\r\n");
}
//read and display message
void readESP8266(const int timeout)
{
String reponse = "";
long int time = millis();
while( (time+timeout) > millis())
{
while(ESP8266.available())
{
char c = ESP8266.read();
reponse+=c;
}
}
Serial.print(reponse);
}
ArduiCrispy:
Et moi qui pensait que plus un post est bien illustré plus il y a de réponses... Je dois revoir ma stratégie de comm..
bonsoir
sur un forum "arduino" comme ici , tu a plus de chance d'obtenir d’obtenir de l'aide pour utiliser "de l'esp" en mode "IDE" arduino , qu'en restant sous de la discussion "AT" (quelle version de firmware AT ? )
Perso , la derniere fois que j'ai envoyé de "l'AT" sur de l'esp çà commence à dater
au passage ton "fritzing" basé sur un UNO et un esp01 ne gere pas "bien" le niveau des signaux 5V out (UNO) vers IN (ESP)
Artouste:
8)
bonsoir
sur un forum "arduino" comme ici , tu a plus de chance d'obtenir d’obtenir de l'aide pour utiliser "de l'esp" en mode "IDE" arduino , qu'en restant sous de la discussion "AT" (quelle version de firmware AT ? )
Perso , la derniere fois que j'ai envoyé de "l'AT" sur de l'esp çà commence à dater
au passage ton "fritzing" basé sur un UNO et un esp01 ne gere pas "bien" le niveau des signaux 5V out (UNO) vers IN (ESP)
Merci pour ta réponse . Et bien en fait je suis conscient que c'est un peu vieillot l'AT mais je suis débutant dans l’Arduino.
Je veux bien utiliser d'autres méthodes mais je n'y connait pas grand chose et je trouve pas beaucoup de tuto ou d'exemples qui colle avec mon projet. Et je reconnait avoir un peu de pression au niveau du timing qui me laisse pas trop de temps d'apprendre "from the scratch" comme on dit.
Si tu as une piste pour moi, car je sais vraiment pas par où commencer, je suis preneur
Même réponse qu'Artouste..... l'ESP01 et le mode AT c'est un peu la préhistoire de l'ESP8266 (au début il n'y a avait que ça. ).
Aujourd'hui on trouve des modules plus complets et mieux conçus + un choix d'outils de développement : Arduino, LUA, microPython.......
Sur le "joli Frizing" on voit un module ESP01 alimenté en 3V3 par la carte Arduino....... source de gros soucis : les 50mA disponibles ne suffisent pas pour un fonctionnement stable en WiFi
Donc au final : manque de courant sur le 3,3V et trop de tension (5V) sur l'entrée RX (si on se base sur la notice du fabricant de l'ESP8266)
Pour commencer confortablement :
-un module NodeMCU ou Wemos D1 Mini
-Arduino avec le 'plugin' ESP8266
-plein d'exemples pour gérer sa carte comme si c'était une carte Arduino (pas besoin de carte Uno ou autre)
Commencer avec module étriqué, sous alimenté, géré en mode AT , c'est aller au devant de galères.....
Même réponse qu'Artouste..... l'ESP01 et le mode AT c'est un peu la préhistoire de l'ESP8266 (au début il n'y a avait que ça. Aujourd'hui on trouve des modules plus complets et mieux conçus + un choix d'outils de développement ; Arduino, LUA, microPython.......
Sur le "joli Frizing" on voit un module ESP01 alimenté en 3V3 par la carte Arduino....... source de gros soucis : les 50mA disponibles ne suffisent pas pour un fonctionnement stable en WiFi
Donc au final : manque de courant sur le 3,3V et trop de tension sur l'entrée RX (si on se base sur la notice du fabriquant de l'ESP8266)
Pour commencer confortablement :
-un module NodeMCU ou Wemos D1 Mini
-Arduino avec le 'plugin' ESP8266
-plein d'exemples pour gérer sa carte comme si c'était une carte Arduino
Commencer avec module étriqué, sous alimenté, géré en mode AT , c'est aller au devant de galères.....
Bonsoir,
Alors là... Je suis encore plus embêté si mon montage est mauvais même avant d'avoir commencé le code.
Et dire que je dois rendre un truc fonctionnel avant Vendredi
Le plus grave c'est que j'ai des contraintes, je dois utilisé Arduino + module wifi au choix. Donc déjà pour NodeMCU il faut oublié.
al1fch:
Au tout début de l'ESP8266 j'ai brièvement utilisé un ESP01 câblé comme ça
Régulateur 3,3V 500mA
Pont diviseur pour ramener à 3,3V le niveau haut du signal Tx sortant de l'Arduino (adaptation 5V vers 3,3V)
Pour ce qui est du fonctionnement en mode AT voir [le tutoriel de J-M-L /iurl]
[/quote]
wow... Je comprend mieux maintenant! Effectivement c'est très clair.
Et ça a l'air d’intéressé d'autres personnes à ce que je constate (téléchargé 14 fois).
Et au niveau du code en dehors d'AT connais-tu un bon tuto pour une connexion HTTP request client-serveur (distant je précise)?
Voire même connexion wifi si je dois refaire tout le code.