Go Down

Topic: Sparkfun ESP8266 requête http (Read 985 times) previous topic - next topic

dakota99

Bonjour
Merci pour ta suggestion.
Effectivement il s'agit d'un shield que je place sur un Arduino Uno.
Et je pensais qu'il était donc normal de choisir la carte Arduino Uno.
Mais non apparemment il faut sélectionner Sparkfun ESP8266 Thing
La compilation est réalisée correctement. Mais ce ne serait pas amusant s'il n'y avait pas encore un autre problème lors du téléchargement : le message d'erreur suivant apparaît :

  File "C:/Users/Utilisateur/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/2.5.2/tools/esptool\esptool.py", line 468, in connect
    raise FatalError('Failed to connect to %s: %s' % (self.CHIP_NAME, last_error))
esptool.FatalError: Failed to connect to ESP8266: Invalid head of packet (0x00)

J'ai essayé en sélectionnant d'autres cartes : mais c'est pareil.
Merci pour votre temps.


Code: [Select]

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>

ESP8266WebServer server(80);
int ledPin = 16;
bool ledState = LOW;

void setup() {
   pinMode(ledPin, OUTPUT);
   Serial.begin(115200);
   WiFi.begin("VOO-020245","UTJQDCRE"); //Connect to the WiFi network
   while(WiFi.status()!= WL_CONNECTED){ //Wait for connection
      delay(500);
      Serial.println("Waiting to connect…");
   }
   Serial.print("IP address: ");
   Serial.println(WiFi.localIP()); //Print the local IP

   server.on("/on", turnOn);       //Associate the handler function to the path
   server.on("/off", turnOff);     
   server.on("/toggle", toggle);   
   server.begin();                 //Start the server
   Serial.println("Server listening");
}

void loop() {
server.handleClient();
}

void turnOn(){
ledState = HIGH;
digitalWrite(ledPin, ledState);
server.send(200, "text/plain", "LED on");
}

void turnOff(){
ledState = LOW;
digitalWrite(ledPin, ledState);
server.send(200, "text/plain", "LED off");
}

void toggle(){
ledState = !ledState;
digitalWrite(ledPin, ledState);
server.send(200, "text/plain", "LED toggled");
}



lesept

Je vais ressortir le fameux théorème de Lesept : "Si tu as une erreur, il est fort probable que quelqu'un d'autre l'a eue avant toi et a posé la question sur un forum".

Donc, partant de là, tu peux chercher sur Google : "Failed to connect to %s: %s' % (self.CHIP_NAME, last_error)" et voir s'il y a des réponses...

Sur le Github d'espressif, on trouve ce genre d'erreur : une solution proposée est de revenir à une version plus ancienne de l'esptool (ne me demande pas comment, je ne sais pas, cherche...), une autre est de changer la vitesse d'upload (115200 bauds lieu de 921600), une autre de lancer la compilation + upload avec l'esp non branché et de la brancher seulement lorsque le transfert est initié...

Lis ces messages et teste les solutions, il y en a peut-être une qui fonctionnera pour toi.
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

supercc

Effectivement il s'agit d'un shield que je place sur un Arduino Uno.
Tu as une référence vers ce shield ? sa doc ? Il a un port usb dédié et si oui c'est lui que tu utilises pour charger ton programme ?

dakota99

Merci pour tous ces conseils.

Je ne m'imaginais pas passer autant d'heures pour "simplement" récupérer des paramètres d'une requête http. Je l'ai fait sans problème avec un Arduino Wifi (qui n'est plus en vente).
Je n'ai peut-être pas choisi la bonne solution.... Si vous avez un avis là-dessus n'hésitez pas à me le communiquer.
Mon objectif est d'envoyer une requête du genre http://192.168.0.35/p02 et de récupérer le paramètre p02

Concernant le shield : SparkFun WiFi Shield - ESP8266
 
https://www.sparkfun.com/products/13287

Merci

MicroQuettas

Bonsoir,

Si j'ai bien compris, vous avez un Uno et un shield Wifi à base d'ESP8266. Entre les 2, des commandes AT.
Il y a des exemples d'utilisation de cette architecture sur le site, mais c'est une solution m....ique.
Tous ceux qui l'ont un jour essayé (dont moi) ont abandonné.
Passez tout sur une carte à  ESP8266 (Nodemcu, Wemos D1 mini, etc.)
C'est beaucoup plus simple, beaucoup plus performant.... et beaucoup moins cher !

Bonne bidouille

MicroQuettas

supercc

Je viens de suivre ton lien et je ne connais pas du tout. Par contre je confirme que la solution avec une seule carte esp8266 comme indiquée par MicroQuettas est facile à mettre en oeuvre.

lesept

Oui, on t'a donné tous les éléments pour y arriver
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

dakota99

Encore une fois merci pour votre temps.

Comme vous l'aurez compris je ne suis pas un spécialiste et j'essaie d'aller droit au but afin de consacrer le maximum de temps sur le projet proprement dit.

Je pense qu'effectivement après les heures passées avec cette carte Sparkfun ESP8266 je ferai mieux de laisser tomber.

J'avais déjà testé la solution Node MCU qui effectivement fonctionne.

Dans mon projet j'ai choisi de travailler avec un Arduino Mega et un module qui reçoit les commandes en Wifi (jusqu'à présent un Arduino Wifi)
L'Arduino Mega s'occupe de la gestion des moteurs, des capteurs ultrasons, accéléromètre, relais, encodeurs, ... bref il est bien occupé.

Le module Wifi reçoit les commandes en Wifi via des requêtes Http et les transmet au Mega via une liaison I2C.

Afin d'éviter de suivre une piste qui n'est pas la bonne, ... la solution d'utiliser un NodeMCU pour recevoir les données et les envoyer en I2C à un Arduino Mega vous semble-t-elle une solution valable ?

Merci

MicroQuettas

Bonjour,

La combinaison ESP8266 et Arduino Méga est bonne :
  • le serveur sur l'ESP avec sa puissance,
  • les I/O sur la Méga, avec ses nombreuses pins et l'accès facile aux ressources internes (timers, interruptions, etc).


Seul point à soigner :
  • l'ESP est en 3.3V,
  • la Méga en 5V.


Pour le bus I2C entre les deux, il faut utiliser un changeur de niveau actif et raccorder les résistances de rappel au +3.3V côté ESP et au +5V côté Méga.

Bonne bidouille,

MicroQuettas

dakota99

Ok merci.

Reste plus qu'à comprendre ce qu'est exactement un changeur de niveau actif et des résistances de rappel.
Mais c'est comme si c'était fait.

Encore merci pour vos suggestions.

MicroQuettas

Bonsoir,

Pour le changeur de niveau ("logic level converter"), regardez cette page changeur de niveau

L'important est qu'il soit bidirectionnel et actif. Il y en a aussi chez AdaFruit, ainsi que tous les clônes.

Les résistances de rappel, ou de tirage ("pull-up"), relient SCL et SDA à la tension d'alimentation.
Si vous utilisez un convertisseur comme celui pour lequel j'ai posté le lien, la bonne nouvelle est qu'elles sont sur le convertisseur. Vous n'avez donc rien à rajouter.

Bonne bidouille,

MicroQuettas

dakota99

Merci pour le lien MicroQuettas

Avec un schéma de raccordement, c'est tout ce qu'il me faut :)

J'ai commandé le module.


Go Up