ESP8266 esp01 + arduino uno

Hello! I need a Little help with my Project, I’m using an Arduino Uno with ESP8266 esp-01 module. The esp8266 connects to WiFi, but my App stays offline. It gets stock in the phrase: “connected to WiFi”. I’m using external power supply with enough current. I’ve changed baudrate with the command: AT+UART_DEF=9200,8,1,0,0.
Here is part of my code:

Removed unformatted code - Moderator

Thank you!!

  1. Format your code properly using backticks (```)

  2. Post all your code

  3. Post your serial monitor output :slightly_smiling_face:

Hi! this is my whole code:

#define BLYNK_PRINT Serial
#define BLYNK_DEBUG
#define BLYNK_MAX_READBYTES 1024
#include <SoftwareSerial.h>
#include <ESP8266_Lib.h>  
#include <BlynkSimpleShieldEsp8266.h>

char ssid[] = "Iphone";
char pass[] = "*******";

SoftwareSerial EspSerial(2,3); // RX, TX

// Your ESP8266 baud rate:
#define ESP8266_BAUD 9600

ESP8266 wifi(&EspSerial);

char auth[] = "****************************";//token de la app Blynk
SimpleTimer timer2;//Definicion del temporizador
WidgetLCD lcd(V2);//asignación del pin virtual 2

int value;      //variable que almacena la lectura analógica raw
int position;   //posicion del potenciometro en tanto por ciento
int ej;//valor del ejercicio escogido (1,2,3,4 ó 5)
int contador = 0;//el contador que inicializa los mensajes en LCD
int valorMin = 140;//valores de comparacion con la posicion actual
int valorMax = 0;//valores de comparacion con la posicion actual
int bolaVal;//posicion del interruptor de bola
int repeticiones = 30;//repeticiones del ejercicio
int timerID;//ID del temporizador que llama a la funcion leedatos
String cadena;
/****************************FUNCIÓN QUE LEE LOS DATOS ANALÓGICOS/DIGITALES DE LOS SENSORES*******************************/
void leedatos()
{
  const int analogPin = A0;//variable que almacena el valor del potenciometro
  bolaVal = digitalRead(2); //lee del interruptor bola
  value = analogRead(A0);      // realizar la lectura analógica raw
  position = round(map(value, 0, 1023, 0, 140));  // convertir a porcentaje el potencimetro
  Blynk.virtualWrite(V5, position);//escribe en la aplicacion en el widget SUPERCHART
 
  switch (ej)//llama a el ejercicio correspondiente
  {
    case 1: ejercicio1();//comprobaciones del ej 1
            cadena=cadena+position+",";//actualiza la cadena
      break;
    case 2: ejercicio2();//comprobaciones del ej 2
            cadena=cadena+position+",";
      break;
    case 3: ejercicio3();//comprobaciones del ej 3
            cadena=cadena+position+",";
      break;
    case 4: ejercicio4();//comprobaciones del ej 4
            cadena=cadena+position+",";
      break;
    case 5: ejercicio5();//comprobaciones del ej 5
            cadena=cadena+position+",";
      break;
    default:
            lcd.clear();
            lcd.print(0,0,"escoge un ejercicio");
            delay(1000);
      break;
  }
}


/*********************************FUNCION DE BOTON START/STOP********************************************************/
BLYNK_WRITE(V3)
{
  if (param.asInt() == 1)//El boton en la aplicación está a 1
  {
    timer2.disable(timerID);//deshabilita el temporizador que llama a Leedatos
    lcd.clear();//Borra LCD
    lcd.print(0, 0, "has salido del ejercicio");//Imprime en LCD
    delay(3000);
  }
  else
  {
    timer2.enable(timerID);//habilita el temporizador que llama a leedatos
    lcd.clear();//borra de LCD
    lcd.print(0, 0, "empieza el ejercicio");//Imprime en LCD
    delay(3000);
  }

}


/*****************************FUNCION QUE HACE LAS COMPROBACIONES DEL EJERCICIO 1********************************/
void ejercicio1()//Sentada flexiona y estira la rodilla al máximo
{
  valorMax = max(position, valorMax);//Actualiza el valor máximo recogido
  valorMin = min(position, valorMin);//Actualiza el valor mínimo recogido
  contador++;//Aumenta el contador para la escritura en LCD

  if (valorMax < 130)//comprobacion para ver si NO flexiona la rodilla
  {
    if (contador >= 40)//si el contador llega a 40 que escriba en LCD
    {

      lcd.clear();
      lcd.print(0, 0, "Flexiona mas la rodilla");
      contador = 0;//Se restauran los valores
      valorMin = 140;//Se restauran los valores
      valorMax = 0;//Se restauran los valores
    }
  }
  else if (valorMin > 10)//comprobabcion para ver si NO estira la rodilla
  {
    
    if (contador >= 40)//si el contador llega a 40 que escriba en LCD
    {
      lcd.clear();
      lcd.print(0, 0, "Estira mas la rodilla");

      contador = 0;
      valorMin = 140;
      valorMax = 0;
    }
  }

  else //si consigue cumplir los ángulos correctos
  {
    if(valorMin <10 && valorMax > 130)
    {
      lcd.clear();
      lcd.print(0, 0, "Sigue asi");
      valorMin = 140;
      valorMax = 0;
      repeticiones--;//se disminuye una repeticion de la serie
      Blynk.virtualWrite(V4, repeticiones);//se imprime en la aplicación en el widjet de DISPLAY
      if (repeticiones <= 0)//si termina con las repeticiones
      {
        lcd.clear();
        lcd.print(0, 0, "Enhorabuena, has terminado el ej");//termina el ejercicio (imprime lcd)
        Blynk.virtualWrite(V3, 1);//pone el boton a STOP y para de leer datos
        Blynk.email("isabeljg15@gmail.com", "Nombre del paciente", "Ejercicio 1: "+cadena);
        cadena="";
      }
    }  
  }
}


/*****************************FUNCION QUE HACE LAS COMPROBACIONES DEL EJERCICIO 2********************************/
void ejercicio2()//Sentadilla contra la pared
{
  valorMax = max(position, valorMax);
  valorMin = min(position, valorMin);
  contador++;

  if (valorMax < 90)//comprobabcion de flexión
  {
    if (contador >= 40)
    {
      lcd.clear();
      lcd.print(0, 0, "Flexiona mas la rodilla");
      contador = 0;
      valorMin = 140;
      valorMax = 0;
    }
  }
  else if (valorMin > 10)//comprobabción de estiramiento
  {
    if (contador >= 40)
    {
      lcd.clear();
      lcd.print(0, 0, "Estira mas la rodilla");
      contador = 0;
      valorMin = 140;
      valorMax = 0;
    }
  }
  else
  {
    if(valorMin <10 && valorMax > 90)//comprobacion de movimiento correcto
    {
      lcd.clear();
      lcd.print(0, 0, "Sigue asi");
      valorMin = 140;
      valorMax = 0;
      repeticiones--;//disminuye una repetición
      Blynk.virtualWrite(V4, repeticiones);//escribe en el widget de DISPLAY
      if (repeticiones <= 0)//termina el ejercicio
      {
        lcd.clear();
        lcd.print(0, 0, "Enhorabuena, has terminado el ej");
        Blynk.virtualWrite(V3, 1);//para de leer y pone la app en STOP
        Blynk.email("isabeljg15@gmail.com", "Nombre del paciente", "Ejercicio 2: "+cadena);
        cadena="";
      }
    }  
  }

}



/*****************************FUNCION QUE HACE LAS COMPROBACIONES DEL EJERCICIO 3********************************/
void ejercicio3()//tumbada llevar la rodilla al pecho flexionando
{
  valorMax = max(position, valorMax);
  valorMin = min(position, valorMin);
  contador++;

  if (valorMax < 130)//comparativa de flexión
  {
    if (contador >= 40)
    {
      lcd.clear();
      lcd.print(0, 0, "Flexiona mas la rodilla");
      contador = 0;
      valorMin = 140;
      valorMax = 0;
    }
  }
  else if (valorMin > 10)//comparativa de estiramiento
  {
    if (contador >= 40)
    {
      lcd.clear();
      lcd.print(0, 0, "Estira mas la rodilla");
      contador = 0;
      valorMin = 140;
      valorMax = 0;
    }
  }
  else if (position > 130 && bolaVal == LOW)//comparativa de la rodilla al pecho
  {
    if (contador >= 5)
    {
      lcd.clear();
      lcd.print(0, 0, "lleva la rodilla al pecho");
      contador = 0;
    }
  }
  else//se realiza correctamente el ejercicio
  {
     if(valorMin <10 && valorMax > 130)
    {
      lcd.clear();
      lcd.print(0, 0, "Sigue asi");
      valorMin = 140;
      valorMax = 0;
      repeticiones--;//disminuye una repetición
      Blynk.virtualWrite(V4, repeticiones);//escribe en el widget de DISPLAY las repeticiones que quedan
      if (repeticiones <= 0)//termina el ejercicio
      {
        lcd.clear();
        lcd.print(0, 0, "Enhorabuena, has terminado el ej");
        Blynk.virtualWrite(V3, 1);
        Blynk.email("isabeljg15@gmail.com", "Nombre del paciente", "Ejercicio 3: "+cadena);
        cadena="";
      }
    }  
  }

}



/*****************************FUNCION QUE HACE LAS COMPROBACIONES DEL EJERCICIO 4********************************/
void ejercicio4()//boca abajo flexionar y estirar
{
  valorMax = max(position, valorMax);
  valorMin = min(position, valorMin);
  contador++;

  if (valorMax < 130)//comprobación de flexión
  {
    if (contador >= 40)
    {
      lcd.clear();
      lcd.print(0, 0, "Flexiona mas la rodilla");
      contador = 0;
      valorMin = 140;
      valorMax = 0;
    }
  }
  else if (valorMin > 10)//comparación de estiramiento
  {
    if (contador >= 40)
    {
      lcd.clear();
      lcd.print(0, 0, "Estira mas la rodilla");
      contador = 0;
      valorMin = 140;
      valorMax = 0;
    }
  }
  else if (bolaVal == LOW)//comprobar posicion del cuerpo(boca abajo/boca arriba)
  {
    if (contador >= 5)
    {
      lcd.clear();
      lcd.print(0, 0, "colocate tumbado boca abajo");
      contador = 0;
    }
  }
  else//realiza correctaente el ejercicio
  {
    if(valorMin <10 && valorMax > 130)
    {
      lcd.clear();
      lcd.print(0, 0, "Sigue asi");
      valorMin = 140;
      valorMax = 0;
      repeticiones--;
      Blynk.virtualWrite(V4, repeticiones);
      if (repeticiones <= 0)
      {
        lcd.clear();
        lcd.print(0, 0, "Enhorabuena, has terminado el ej");
        Blynk.virtualWrite(V3, 1);
        Blynk.email("isabeljg15@gmail.com", "Nombre del paciente", "Ejercicio 4: "+cadena);
        cadena="";
      }
    }  
  }

}




/*****************************FUNCION QUE HACE LAS COMPROBACIONES DEL EJERCICIO 5********************************/
void ejercicio5()//Levantar la pierna estirada
{
  valorMax = max(position, valorMax);
  valorMin = min(position, valorMin);
  contador++;

  if (valorMax > 20)//comprobar que no flexiona la rodilla
  {
    if (contador >= 40)
    {
      lcd.clear();
      lcd.print(0, 0, "Estira mas la rodilla");
      contador = 0;
      valorMin = 140;
      valorMax = 0;
    }
  }
  else if (valorMin > 10)//comparar que estira lo suficiente la rodilla
  {
    if (contador >= 40)
    {
      lcd.clear();
      lcd.print(0, 0, "Estira mas la rodilla");
      contador = 0;
      valorMin = 140;
      valorMax = 0;
    }
  }
  else
  {
     if(valorMin <10 && valorMax <30&&bolaVal == HIGH)//realiza correctamente el ejercicio
    {
      lcd.clear();
      lcd.print(0, 0, "Sigue asi");
      valorMin = 140;
      valorMax = 0;
      repeticiones--;//disminuye una repeticion
      Blynk.virtualWrite(V4, repeticiones);//imprime en DISPLAY las repeticiones que quedan
      if (repeticiones <= 0)//termina el ejercicio
      {
        lcd.clear();
        lcd.print(0, 0, "Enhorabuena, has terminado el ej");
        Blynk.virtualWrite(V3, 1);
        Blynk.email("isabeljg15@gmail.com", "Nombre del paciente", "Ejercicio 5: "+cadena);
        cadena="";
      }
    }  
  }

}

/*********************************FUNCION DEL MENU DESPLEGABLE EN LA APP*****************************************/
BLYNK_WRITE(V0)
{
  ej = param.asInt();//Lee el ejercicio escogido
  switch (param.asInt())
  {
    case 1://se elige el ejercicio 1
      Blynk.virtualWrite(V1, 1); //se cambia la imagen 1 en el widget de IMAGE GALERY
      repeticiones=30;
      cadena="";
      lcd.clear();
      lcd.print(0, 0, "Has elegido ejercicio 1");
      delay(2000);
      break;
    case 2://se elige el ejercicio 2
      Blynk.virtualWrite(V1, 2); //se cambia la imagen 2
      repeticiones=30;
      cadena="";
      lcd.clear();
      lcd.print(0, 0, "Has elegido ejercicio 2");
      delay(2000);
      break;
    case 3://se elige el ejercicio 3
      Blynk.virtualWrite(V1, 3); //se cambia la imagen 3
      repeticiones=30;
      cadena="";
      lcd.clear();
      lcd.print(0, 0, "Has elegido ejercicio 3");
      delay(2000);
      break;
    case 4://se elige el ejercicio 4
      Blynk.virtualWrite(V1, 4); //se cambia la imagen 4
      repeticiones=30;
      cadena="";
      lcd.clear(); 
      lcd.print(0, 0, "Has elegido ejercicio 4");
      delay(2000);
      break;
    case 5://se elige el ejercicio 5
      Blynk.virtualWrite(V1, 5); //se cambia la imagen 5
      repeticiones=30;
      cadena="";
      lcd.clear();
      lcd.print(0, 0, "Has elegido ejercicio 5");
      delay(2000);
      break;
    default:
      lcd.clear();
      lcd.print(0, 0, "no se elije nada");

  }

}


/*******************************FUNCION DE INICIALIZACION*************************/
void setup()
{
  // Inicializamos
  Serial.begin(9600);//baudios a los que trabaja arduino

  EspSerial.begin(ESP8266_BAUD);
  Serial.println("llega1");
  delay(10);
  
  Serial.println("llega1");
  Blynk.begin(auth, wifi, ssid, pass);
  
  Serial.println("llega2");
  Serial.println("Waiting for connections...");
  timerID= timer2.setInterval(250L, leedatos);//inicializacion del timer de leedatos cada 250ms
  Blynk.syncAll();//sincroniza la aplicacion blynk todos los pines virtuales

}


/****************************FUNCION BUCLE PRINCIPAL*****************************/
void loop()
{
  Blynk.run();//Ejecuta la App Blynk
  timer2.run();//Ejecuta el temporizador
}
´´

And this is the serial monitor: 
![photo5843828611877023934|375x500](upload://cLKEGDwZnLV13eFniVDUTJpUIPi.jpeg)

What happens if you replace the above with the below?:

Blynk.begin(auth, wifi, ssid, pass, “blynk-cloud.com”, 8080);

If you’re connecting to your iPhone as a mobile hotspot then that may be your issue.
The connecting to a normal Wi-Fi network.

Pete.

it will never work

Why? This syntax seem to work and had been copied from example:

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "YourNetworkName";
char pass[] = "YourPassword";

So why the one @Isabel had posted won’t work??

I think his Iphone is in tethering mode :thinking:

Probably YES, but IPhone as an AP should work. At least Android works.

1 Like

I guess it’s possible, but is it possible to have an iPhone as an AP and Blynk App as well?

It seems that some ISPs will block Blynk traffic when the phone is used in tethering/hotspot mode.

Pete.

2 Likes

I think so …

Ah YES! I’ve met such an issue in PL with one operator, while there is no issue with another. So that could be…

Yet there should be one more line in serial monitor: “Connecting to blynk…”, and I don’t see it…

1 Like

I tried, but it doesn’t make any difference.

So, here is the thing, i tried with this other sketch, and works… but I don’t know why. The answer on the serial monitor is completly different. Here is the code and the output on the serial.

#include <BlynkSimpleShieldEsp8266.h>

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "***********************";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "Iphone";
char pass[] = "+++++++";



// or Software Serial on Uno, Nano...
#include <SoftwareSerial.h>
SoftwareSerial EspSerial(2, 3); // RX, TX

// Your ESP8266 baud rate:
#define ESP8266_BAUD 9600

ESP8266 wifi(&EspSerial);

void setup()
{
  // Debug console
  Serial.begin(9600);

  // Set ESP8266 baud rate
  EspSerial.begin(ESP8266_BAUD);
  delay(10);

  Blynk.begin(auth, wifi, ssid, pass);

  Serial.println("Waiting for connections...");
  //timerID= timer2.setInterval(250L, leedatos);//inicializacion del timer de leedatos cada 250ms
  //Blynk.syncAll();//sincroniza la aplicacion blynk todos los pines virtuales

}

void loop()
{
  Blynk.run();
  Serial.println("hello world");
  // You can inject your own code or combine it with other sketches.
  // Check other examples on how to communicate with Blynk. Remember
  // to avoid delay() function!
}

This include and define appears to be the only real main difference from a quick glance.

Does your original sketch work if you upload now?

If not, try removing the above and try again?

1 Like

I tried with ando without the define, and still the same output on the serial. The include is in both sketches but i forgot to paste it, sorry.

And without the ESP8266_Lib.h?

1 Like

Then it doesn’t work. I think the problem is with the functions I’ve made, (it’s very heavy for the arduno to run it).
Also if I use the function Blynk.email it also gets stuck on the blynk.begin… but I dont konw why.

1 Like