Go Down

Topic: Nodemcu 12e versus ESP8266-01 (Read 290 times) previous topic - next topic

jccampini

Saludos a todos¡

Estoy haciendo un proyecto en el cual tengo que transmitir por internet (no en red local) unos datos de sensores a un servidor propio donde tengo una BD Mysql.

El problema que tengo es que lo he logrado, sin problemas, con el Nodemcu, pero no lo consigo con el ESP8266-01.

El codigo para transmitir que uso en el Nodemcu:

Code: [Select]
String url ="/EDREMOTOp3get.PHP?";
  String key="pass=Timoteo9";
  String data =dato1 + String(temp)+ dato2 + String(hum)+ dato3 + String(valorLDR);
//==================================================================
 
 if(second()==0||second()==1||second()==30||second()==31)
  {
             Serial.print("Enviando datos ");
             Serial.print (data);
             Serial.println (" a: ");
             Serial.println(url);
             Serial.print (hour());
             Serial.print (":");
             Serial.print (minute());
             Serial.print (":");
             Serial.println (second());
             
             client.print(String("GET ") + url +key+ data + " HTTP/1.1\r\n" +
             "Host: " + host + "\r\n" +
             "Connection: close\r\n\r\n");
             delay(10);

           
             unsigned long timeout = millis();
             while (client.available() == 0)
              {
                if (millis() - timeout > 5000)
                    {
                     Serial.println(">>> Client Timeout !");
                     client.stop();
                     return;
                    }
              }
    while (client.available()){
      String line= client.readStringUntil('\r');
      Serial.print(line);
    } 


y en el ESP8266 01:

Code: [Select]
String cmd = "AT+CIPSTART=\"TCP\",\""; //Crear el comando para comenzar una conexion TCP
     cmd +=host; //IP del sitio a conectarse
     cmd += "\",80"; //Puerto (80)
     mySerial.println(cmd); //Crear conexion
     Serial.print("Intentando conectar con  ");
     Serial.println (cmd);
   
     delay(2000);
       
     if(mySerial.find("ERROR"))
       {
        Serial.println(F("No se pudo conectar con puerto mySerial"));
        return; //No se pudo conectar
       }
      else { Serial.println("Hemos conectado");}

       
            temp=10;
            hum=11;
            valorLDR=15;
     
     String dato1 = "&Temperatura=";
     String dato2 = "&Humedad=";
     String dato6 = "&valorLDR=";
     
     String url = "/EDREMOTOp3get.PHP?"; //Este formato funciona en local
     String key     = "pass=******";           //Este formato funciona en local
     String data    =  dato1+ String(temp)+dato2 + String(hum)+dato6 + String(valorLDR);             
   
                       
             mySerial.print(String("GET ") + url +key+ data + " HTTP/1.1\r\n" +
             "Host: " + host + "\r\n" +
             "Connection: close\r\n\r\n");
              delay(10);

            delay(6000);
             unsigned long timeout = millis();
             while (mySerial.available() == 0)
              {
                if (millis() - timeout > 5000)
                    {
                     Serial.println(">>> Client Timeout !");
                     return;
                    }
              }
    while (mySerial.available()){
      String line= mySerial.readStringUntil('\r');
      Serial.println(line);
    }


¿Veis donde puede estar el problema?

Gracias y disculpad si no lo he explicado bien. Es mi primera consulta.

surbyte

Porque pones códigos parciales?

jccampini

#2
Mar 16, 2018, 10:45 am Last Edit: Mar 16, 2018, 10:58 am by jccampini
Gracias por contestar. Pensaba que podía estar ahí el problema, pero los transcribo completos:

Este es el que uso con el Nodemcu y que funciona:

Code: [Select]
#include <ESP8266WiFi.h>       
    #include <DHT11.h>
    #include <TimeLib.h>
    #include <WiFiUdp.h>

  // NTP Servers: Sincronizan la hora por wifi
  static const char ntpServerName[] = "us.pool.ntp.org";
  const int timeZone = 1;     // Central European Time
  WiFiUDP Udp;
  unsigned int localPort = 8888;  // local port to listen for UDP packets 
  time_t getNtpTime();
  void digitalClockDisplay();
  void printDigits(int digits);
  void sendNTPpacket(IPAddress &address);

// DISTRIBUCION DE PINES
     
          const  int pinLed1  = D5;  //pinLed1
          const  int pin      = D6;  //DIGITAL Termometro
          const  int pinLed2  = D7;  //pinLed2
          const  int pinLed3  = D8;  //pinLed3
   
      DHT11 dht11(pin);
      int valorLDR = 0; 
     
      const char* ssid          ="AndroidAP";
      const char* password      ="limonlimonero"
      const char* host          = "83.45.52.230";
   
//=========   VARIABLES GLOBALES =================
          bool state = false;
       
          byte RL1,RL2,RL3;
         
          float temp,hum,resto;
                 
          int llu,ht,llu2,humter, lluvia1, lluvia2;
          int riegos=0;
          int contador1=1, resto1;
          int contador2=1;
          int segundada;
         
          unsigned int hora;
          unsigned int minuto;
          unsigned int segundo;

          String Hum,Temp;

void setup() {
 
    // CONFIGURANDO PINES DE RELES Y LEDS
       
          pinMode(pinLed1,OUTPUT);
          pinMode(pinLed2,OUTPUT);
          pinMode(pinLed3,OUTPUT);
       
          digitalWrite(pinLed2, LOW);
          digitalWrite(pinLed3, LOW);
           
   Serial.begin(115200);
   
   delay(2000);
   Serial.println();
   Serial.println();
   Serial.print("Conectando a ");
   Serial.println(ssid);

   WiFi.begin(ssid,password);

   while (WiFi.status() != WL_CONNECTED)
    {
     delay(500);
     Serial.print(".");
    }
   
   Serial.println("");
   Serial.println("WiFi conectada");
   Serial.println("IP direccion: ");
   Serial.println(WiFi.localIP());
    Serial.println("Conectando UDP");
    Udp.begin(localPort);
    Serial.print("Local puerto: ");
    Serial.println(Udp.localPort());
    Serial.println("esperando para sync");
    setSyncProvider(getNtpTime);
    setSyncInterval(300);
    time_t prevDisplay = 0; // when the digital clock was displayed
}

int value=0;

void loop() {

         
          temp=TEMPERATURA();
          hum =HUMEDADA();
          humter=35;
          lluvia1=15;
          lluvia2=17;
          valorLDR= analogRead(A0)/4;
   
         Serial.print ("hora: ");
         Serial.print (hour());
         Serial.print (":");
         Serial.print (minute());
         Serial.print (":");
         Serial.println (second());
   
  Serial.print("Temperatura: ");
  Serial.println(temp);
  Serial.print("Humedad: ");
  Serial.println(hum);
 
  Serial.print("Luminosidad: ");
  Serial.println(valorLDR);
  Serial.println("");
  Serial.println("");
 
       delay(2000);
        ++value;
        Serial.print("Conectando a :");
        Serial.println(host);

  WiFiClient client;
  const int httpPort=80;
  if (!client.connect(host,httpPort)) {
    Serial.println("conexion fallida");
    return;
  }
 
 
  Temp=String(temp);
  Hum=String(hum);
  String dato1="&Temperatura=";
  String dato2="&Humedad=";
  String dato3="&valorLDR=";
 

  String url ="/EDREMOTOp3get.PHP?";
  String key="pass=*******";
  String data =dato1 + String(temp)+ dato2 + String(hum)+ dato3 + String(valorLDR);
//====================================================
 
 if(second()==0||second()==1||second()==30||second()==31)
  {
             Serial.print("Enviando datos ");
             Serial.print (data);
             Serial.println (" a: ");
             Serial.println(url);
             Serial.print (hour());
             Serial.print (":");
             Serial.print (minute());
             Serial.print (":");
             Serial.println (second());
             
             client.print(String("GET ") + url +key+ data + " HTTP/1.1\r\n" +
             "Host: " + host + "\r\n" +
             "Connection: close\r\n\r\n");
             delay(10);

           
             unsigned long timeout = millis();
             while (client.available() == 0)
              {
                if (millis() - timeout > 5000)
                    {
                     Serial.println(">>> Client Timeout !");
                     client.stop();
                     return;
                    }
              }
    while (client.available()){
      String line= client.readStringUntil('\r');
      Serial.print(line);
    }


  }
}

 //======= EXTRACCION DATOS SENSOR TEMPERATURA  ==========
    int TEMPERATURA()
    {
          dht11.read(hum,temp);           // Sensor temperatura y humedad aire
          temp=int(temp);
          return temp;
     }
//===== EXTRACCION DATOS SENSOR HUMEDAD AIRE ============
    int HUMEDADA()
    {
          dht11.read(hum,temp);           // Sensor temperatura y humedad aire
          hum=int(hum)+45;
          return hum;
     }

void digitalClockDisplay()
{
  // digital clock display of the time
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.print(" ");
  Serial.print(day());
  Serial.print(".");
  Serial.print(month());
  Serial.print(".");
  Serial.print(year());
  Serial.println();
}

void printDigits(int digits)
{
  // utility for digital clock display: prints preceding colon and leading 0
  Serial.print(":");
  if (digits < 10)
    Serial.print('0');
  Serial.print(digits);
}

/*-------- NTP code ----------*/

const int NTP_PACKET_SIZE = 48; // NTP time is in the first 48 bytes of message
byte packetBuffer[NTP_PACKET_SIZE]; //buffer to hold incoming & outgoing packets

time_t getNtpTime()
{
  IPAddress ntpServerIP; // NTP server's ip address

  while (Udp.parsePacket() > 0) ; // discard any previously received packets
  Serial.println("Transmit NTP Request");
  // get a random server from the pool
  WiFi.hostByName(ntpServerName, ntpServerIP);
  Serial.print(ntpServerName);
  Serial.print(": ");
  Serial.println(ntpServerIP);
  sendNTPpacket(ntpServerIP);
  uint32_t beginWait = millis();
  while (millis() - beginWait < 1500) {
    int size = Udp.parsePacket();
    if (size >= NTP_PACKET_SIZE) {
      Serial.println("Receive NTP Response");
      Udp.read(packetBuffer, NTP_PACKET_SIZE);  // read packet into the buffer
      unsigned long secsSince1900;
      // convert four bytes starting at location 40 to a long integer
      secsSince1900 =  (unsigned long)packetBuffer[40] << 24;
      secsSince1900 |= (unsigned long)packetBuffer[41] << 16;
      secsSince1900 |= (unsigned long)packetBuffer[42] << 8;
      secsSince1900 |= (unsigned long)packetBuffer[43];
      return secsSince1900 - 2208988800UL + timeZone * SECS_PER_HOUR;
    }
  }
  Serial.println("No NTP Response :-(");
  return 0; // return 0 if unable to get the time
}

// send an NTP request to the time server at the given address

//========================================================
void sendNTPpacket(IPAddress &address)
{
  // set all bytes in the buffer to 0
  memset(packetBuffer, 0, NTP_PACKET_SIZE);
  // Initialize values needed to form NTP request
 
  packetBuffer[0] = 0b11100011;   // LI, Version, Mode
  packetBuffer[1] = 0;     // Stratum, or type of clock
  packetBuffer[2] = 6;     // Polling Interval
  packetBuffer[3] = 0xEC;  // Peer Clock Precision
  // 8 bytes of zero for Root Delay & Root Dispersion
  packetBuffer[12] = 49;
  packetBuffer[13] = 0x4E;
  packetBuffer[14] = 49;
  packetBuffer[15] = 52;
  // all NTP fields have been given values, now
  // you can send a packet requesting a timestamp:
  Udp.beginPacket(address, 123); //NTP requests are to port 123
  Udp.write(packetBuffer, NTP_PACKET_SIZE);
  Udp.endPacket();
}



jccampini

El del 01 ocupa mas de 9000 caracteres, y no se como colgarlo ¿como fichero adjunto?

surbyte


jccampini

Buenas tardes, subo el sketch que no funciona. El php es el mismo que funciona con el nodemcu.

Gracias¡¡¡


jccampini

Hola de nuevo,

 Me voy contestando yo,  :) , he cambiado para probar haciendo el envio a Thingspeak, y funciona. Con lo cual me queda claro que es el formato para enviar al servidor propio, sigo investigando.

Saludos.

Go Up