How i get the JSON Channel content from Arduino + ESP8266 | ThingSpeak API | Forum

Avatar

Please consider registering
Guest

Search

— Forum Scope —






— Match —





— Forum Options —





Minimum search word length is 3 characters - maximum search word length is 84 characters

Register Lost password?
sp_Feed sp_TopicIcon
How i get the JSON Channel content from Arduino + ESP8266
Avatar
dher
New Member
Forum Posts: 1
sp_UserOfflineSmall Offline
1
December 7, 2017 - 7:35 pm
sp_Permalink sp_Print

Hi everyone!!

I am very new working with ESP8266 and ThingSpeak Platform. Actually i am trying to make my prototipe Plug and play, that why i need to understand how works to create a new channel from arduino(no manually).

First, I created one channel from arduino using AT Cmd but i dont receive the Json response through ESP8266 serial line just "response 200". The mail goal of this, is receive the Channel JSON content then parse and decode to getting two things : Id and Channel Api_Key.

Someone of you can help me with this issue? I will appreciate forever. 

Here my code: 

#include <SoftwareSerial.h>
#include <EEPROM.h>
/*********************************************************************/
SoftwareSerial esp8266Serial(2, 4); // RX | TX Para Arduino Pro Mini
/***********************Variables Globales*********************************************/
String esp8266Response;
String ssid ="xxxxxxxxxx";
String password ="xxxxxxxxxx"; 
String host ="api.thingspeak.com";
const int httpPort =80;
String userChannelJson ="/channels.json";       // variables que se necesitan para Crear el Channel en Thingspeak
String userApikey ="xxxxxxxxxxxx";                // variable que contiene el User Api key de Thingspeak
String channelUpdate ="/update";                 // variable que tiene el path para actualizar los datos en Thingspeak
String channelApiKey;                                 // ApiKey del Channel en ThingSpeak

/************************Estructuras****************************/
struct ThingData{
String Id; 
String thingName;
String companyName; 
String swVersion; 
};

struct StoredData{
ThingData thingData;
};

StoredData storedData; 

/*///////////////////////////////Funciones///////////////////////////////////////*/
/*******************Inicializando los Puertos Serie*******************************/
void initSerialPorts(void)
{ // Comunicacion Serie UART
   esp8266Serial.flush();
  Serial.begin(115200);
  esp8266Serial.begin(115200);
}

/************************************************************************************
* Funcion que almacena en la EEPROM los datos de informacion
*/
void ARDUINO_storeThingData(void)
{
  EEPROM.put(0, storedData.thingData);
}

/************************************************************************************
* Funcion que obtiene de la EEPROM los datos de informacion
*/
void ARDUINO_restoreThingData(void)
{
  EEPROM.get(0, storedData.thingData);
}

/*******************************************************************/
/*
* Funcion que asigna los datos de informacion en la EEPROM
*/
String ARDUINO_setThingData(void)
{
   storedData.thingData.thingName = "FP01";
  storedData.thingData.Id = " ";
  storedData.thingData.companyName = " ";
  storedData.thingData.swVersion = "V1.0";
 ARDUINO_storeThingData();
}

/*******************************************************************/
/*
/ Funcion que realiza la conexion del ESP8266 con WIFI
*/
boolean ESP8266_connectWifi(void)
{
   esp8266Serial.print("AT+CWMODE=3
");delay(100);
  esp8266Serial.print("AT+RST
");delay(100);
 String cmd="AT+CWJAP=\"";
 cmd+=ssid;
 cmd+="\",\"";
 cmd+=password;
 cmd+="\"";
 esp8266Serial.println(cmd);
 delay(10000);

if(esp8266Serial.find("OK"))
{
   return true;

}else{
  return false;
}
}
/*******************************************************************/
/*
* Funcion que realiza la conexion TCP del ESP8266 con ThingSpeak
*/
boolean ESP8266_connectTCP(void)
{ // Al pasar 1 minuto automaticamente se cierra
    String cmd="AT+CIPSTART=\"TCP\",\"";
    cmd+=host;
    cmd+="\",80";
    esp8266Serial.println(cmd);
   delay(1000);

  if(esp8266Serial.find("OK"))
 {
    return true;
 }else{
   return false;
 }
}

/*******************************************************************/
/*
* Funcion que realiza la configuracion del ESP8266
*/
void ESP8266_setConfiguration(void)
{
esp8266Serial.print("AT
");delay(100);
//Nos conectamos con Wifi
if(!ESP8266_connectWifi())
{
Serial.println("No hay conexion Wifi");
}else{
Serial.println("Conexion Wifi establecida");
}
esp8266Serial.print("AT+CIPMUX=0
");delay(100);
}

/*******************************************************************/
/*
* Funcion que crea el channel en Thingspeak
*/

void THINGSPEAK_newChannel(void)
{
//Nos conectamos con el servidor
if(!ESP8266_connectTCP())
{
Serial.println("No hay conexion TCP");
}else{
Serial.println("Conexion TCP establecida");
}

//Se arma el encabezado de la peticion http para enviar los datos por field
String cmd ="POST ";
cmd+=userChannelJson;
cmd+="?api_key=";
cmd+=userApikey;
cmd+="&name=";
cmd+=storedData.thingData.thingName;
cmd+=" HTTP/1.1
Host: ";
cmd+=host;
cmd+="

";
int len=cmd.length();
delay(1000);

//enviamos el tamaño en caracteres de la peticion http:
esp8266Serial.print("AT+CIPSEND=");
esp8266Serial.println(len);

//esperamos a ">" para enviar la peticion http:
if(esp8266Serial.find(">")){
esp8266Serial.print(cmd);

//Recibimos un Send Ok que confirma que la peticion
if(esp8266Serial.find("SEND OK"))
{ boolean fin_respuesta;
char chr=' ';
String cadena=" ";

while(fin_respuesta==false)
{
//Esperamos respuesta del api.thingspeak.com
while(esp8266Serial.available()>0)
{
chr=(char) esp8266Serial.read();
Serial.write(chr);
cadena.concat(chr);
}

if(cadena.length()>500)
{
esp8266Serial.println("AT+CIPCLOSE");
if(esp8266Serial.find("OK")){Serial.println("Conexion Finalizada");}
fin_respuesta=true;
}
} // while
}else{
Serial.println("No se creo el Channel");
}
}else{
Serial.println("No se envio la peticion");
}
}

/*******************************************************************/
/*
* Funcion que realiza las configuraciones de todo el Sistema
*/
void ARDUINO_systemConfiguration(void)
{
ARDUINO_restoreThingData();
Serial.println("/*************************************/");
Serial.println("Hola Mundo ");
Serial.print("Mi nombre es: ");
Serial.println(storedData.thingData.thingName);
Serial.println("Configurando el Sistema...");
ESP8266_setConfiguration();
Serial.println("/*************************************/");
}

/******************************************************************/
void setup()
{
initSerialPorts();delay(100);
ARDUINO_setThingData(); delay(100);
ARDUINO_systemConfiguration(); delay(100);
}

 

/***************************************************************/
void loop()
{
THINGSPEAK_newChannel();
delay(10000);
}

Forum Timezone: America/New_York

Most Users Ever Online: 114

Currently Online: cstapels
25 Guest(s)

Currently Browsing this Page:
1 Guest(s)

Top Posters:

rw950431: 252

Vinod: 164

cstapels: 96

piajola: 75

vespapierre: 63

Adarsh_Murthy: 59

Newest Members:

yeseniara11

RomanFug

JamesPes

RobertBak

ScottSmiva

Amourhotte

Forum Stats:

Groups: 4

Forums: 17

Topics: 1313

Posts: 4565

 

Member Stats:

Guest Posters: 1

Members: 5703

Moderators: 0

Admins: 2

Administrators: Hans, lee