Good experts,
I have been doing some tests with Arduino UNO + ESP8266 and I have had many problems sending data to a test website using GET method (and AT commands).
Finally, watching a video about Arduino + ThingSpeak I realized that the problem was that I was using a free website without a dedicated IP. I am right? Is it possible to use GET method without dedicated IP?
If a dedicated IP is really needed, is there any hosting that gives free IP?
IMPORTANT: the Arduino UNO + ESP8266 is located on a local network, but the site I want to contact is in 000webhostapp.
Here is my code:
#include <SoftwareSerial.h>
//#include <DHT.h>;
SoftwareSerial ESP8266(2, 3); // Rx, Tx
/* DHT SENSOR SETUP */
//#define DHTTYPE DHT11
//#define DHTPIN A0
//DHT dht(DHTPIN, DHTTYPE,11);
float humidity=0, temp_f=0;
long writingTimer = 17;
long startTime = 0;
long waitTime = 0;
boolean relay1_st = false;
boolean relay2_st = false;
unsigned char check_connection=0;
unsigned char times_check=0;
boolean error;
void setup()
{
Serial.begin(9600);
ESP8266.begin(9600);
//dht.begin();
startTime = millis();
ESP8266.println("AT+RST");
delay(2000);
Serial.println("Connecting to Wifi");
while(check_connection==0)
{
Serial.print(".");
ESP8266.print("AT+CWJAP=\"MYWIFI\",\"MYPASSWORD\"\r\n");
ESP8266.setTimeout(5000);
if(ESP8266.find("WIFI CONNECTED\r\n")==1)
{
Serial.println("WIFI CONNECTED");
break;
}
times_check++;
if(times_check>3)
{
times_check=0;
Serial.println("Trying to Reconnect..");
}
}
}
void loop()
{
waitTime = millis()-startTime;
if (waitTime > (writingTimer*1000))
{
readSensors();
writePHP();
startTime = millis();
}
}
void readSensors(void)
{
temp_f = temp_f+0.5;
humidity = humidity+0.5;
}
void writePHP(void)
{
startConection();
// preparacao da string GET
String getStr = "GET /update.php?";
getStr +="&field1=";
getStr += String(temp_f);
getStr +="&field2=";
getStr += String(humidity);
getStr += "\r\n\r\n";
GetResponse(getStr);
}
void startConection(void)
{
ESP8266.flush();
String cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += "roborta.000webhostapp.com"; // SHOULD BE A DEDICATED IP?
cmd += "\",80";
ESP8266.println(cmd);
Serial.print("Start Commands: ");
Serial.println(cmd);
if(ESP8266.find("Error"))
{
Serial.println("AT+CIPSTART error");
return;
}
}
String GetResponse(String getStr)
{
String cmd = "AT+CIPSEND=";
cmd += String(getStr.length());
ESP8266.println(cmd);
Serial.println(cmd);
if(ESP8266.find(">"))
{
ESP8266.print(getStr);
Serial.println(getStr);
delay(500);
String messageBody = "";
while (ESP8266.available())
{
String line = ESP8266.readStringUntil('\n');
if (line.length() == 1)
{
messageBody = ESP8266.readStringUntil('\n');
}
}
Serial.print("MessageBody received: ");
Serial.println(messageBody);
return messageBody;
}
else
{
ESP8266.println("AT+CIPCLOSE");
Serial.println("AT+CIPCLOSE");
}
}
Regards,