Hola a todos, estoy con dificultades a la hora de utilizar el ESP8266.
La razón por la que les escribo es la siguiente. Construí una placa de programación del modulo como la siguiente
(Vale aclarar que para programarla utilizo mi arduino, con el reset e GND y en lugar del C232HM Cable coloque un level converter de 5V a 3.3V)
Al terminar de programar mi ESP quiero correr el programa y lo que sucede es que el programa que clavado en "Staring up Wifi..." hasta que no presione el boton de Reset. A que se debe eso? Vi por muchos lugares en internet que al pin reset lo dejan sin conectar y todo funciona ok.
Este problema que se presenta me imposibilita a que el modulo sea completamente autonomo, ya que cada ves que prenda el arduino tengo que presionar reset para que funcione.
El codigo que le cargo al arduino es el siguiente
#include <SoftwareSerial.h>
int RX = 3;
int TX = 2;
SoftwareSerial Wifi (RX, TX); // RX | TX
int state = 0;
void setup()
{
pinMode(7, OUTPUT);
Serial.begin(9600);
Wifi.begin(9600);
Serial.println("Staring up wifi...");
int res;
int tries = 1;
digitalWrite(13,HIGH);
delay(50);
digitalWrite(13,LOW);
while (res != '0')
{
if (Wifi.available())
{
res = Wifi.read();
tries++;
}
}
Serial.print("Handshake done in ");
Serial.print(tries);
Serial.println(" tries");
}
void loop()
{
int resultado;
switch (state)
{
case 0:
ConnectWifi();
break;
case 1:
SendData();
break;
default:
break;
}
}
void SendData()
{
int data;
int res;
delay(1000);
if(Serial.available() >0){
data = Serial.parseInt();
Wifi.print(data);
Serial.print("Sending ");
Serial.println(data);
while (res == 0)
{
while (Wifi.available() == 0)
{
}
res = Wifi.read();
if (res == '1')
Serial.println("OK");
else
Serial.println("RETRY");
}
}
}
void ConnectWifi()
{
int res = -1;
delay(1000);
if (Wifi.available())
{
res = Wifi.read() ;
}
if (res == '1')
{
state = 1;
Serial.println("Ready");
}
else if (res == '0')
{
Serial.println("Connecting...");
}
else if (res == -1)
{
Serial.println("ESP didnt respond");
}
else
{
Serial.println("Invalid character");
}
}
El cogido del ESP es el siguiente
#include <ESP8266WiFi.h>
const char* ssid = "***************";
const char* password = "***********";
const char* host = "*********";
int state = 0; // 0 Waiting connection to network
// 1 Already connected to network, waiting to handshake to JC
// 2 Handshake made, waiting for JC to send data
void setup() {
Serial.begin(9600);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
delay(10);
}
String value;
void loop() {
switch (state)
{
case 0:
ConnectWifi();
break;
case 1:
if (Serial.available() > 0)
{
UploadValue();
}
break;
default:
break;
}
}
void UploadValue()
{
delay(1000);
int data;
while (Serial.available() > 0) // Don't read unless
// there you know there is data
{
data = Serial.parseInt(); // Read a character
}
// Use WiFiClient class to create TCP connections
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println("connection failed");
return;
}
// We now create a URI for the request
String url ="/JuanCarlosWS/Measures/AddMeasure?interval=";
url += data;
// This will send the request to the server
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
unsigned long timeout = millis();
while (client.available() == 0) {
if (millis() - timeout > 5000) {
Serial.print("0"); //ERROR
client.stop();
return;
}
}
Serial.print("1"); //HTTP 200 DONE!
client.stop();
//
// // Read all the lines of the reply from server and print them to Serial
// while (client.available()) {
// String line = client.readStringUntil('\r');
// Serial.print(line);
// }
}
void ConnectWifi()
{
// We start by connecting to a WiFi network
while (WiFi.status() != WL_CONNECTED) {
Serial.print(0); // Telling JC that connection isint ready yet
delay(500);
}
state = 1; //CONNECTED
Serial.print(1);
delay(1000);
}
Desde ya muchas gracias.