Az ESP-n rajta a firmware, és az alábbi kód mindig hibára fut, de nem tudom miért. Megpróbáltam már a Thingspeak-re manuálisan csatlakozni, úgy sikerül, de a kóddal nem. A wifi már be van állítva, automatikusan csatlakozik.
Mi lehet a baj? Egyes sorok direkt vannak kommnetelve, mert később kelleni fog.
Kód: Egész kijelölése
// Thingspeak
String statusChWriteKey = "API_KEY"; // Status Channel id: xxxxxx
#include <SoftwareSerial.h>
SoftwareSerial EspSerial(6, 7); // Rx, Tx
#define HARDWARE_RESET 8
// DS18B20
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 5 // DS18B20 on pin D5
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature DS18B20(&oneWire);
int soilTemp = 0;
//DHT
#include "DHT.h"
#include <stdlib.h>
int pinoDHT = 11;
int tipoDHT = DHT22;
DHT dht(pinoDHT, tipoDHT);
int airTemp = 0;
int airHum = 0;
// LDR (Light)
#define ldrPIN 1
int light = 0;
// Soil humidity
#define soilHumPIN 0
int soilHum = 0;
// Variables to be used with timers
long writeTimingSeconds = 17; // ==> Define Sample time in seconds to send data
long startWriteTiming = 0;
long elapsedWriteTime = 0;
// Variables to be used with Actuators
boolean pump = 0;
boolean lamp = 0;
int spare = 0;
boolean error;
void setup()
{
Serial.begin(9600);
pinMode(HARDWARE_RESET,OUTPUT);
digitalWrite(HARDWARE_RESET, HIGH);
DS18B20.begin();
dht.begin();
EspSerial.begin(9600); // Comunicacao com Modulo WiFi
EspHardwareReset(); //Reset do Modulo WiFi
startWriteTiming = millis(); // starting the "program clock"
}
void loop()
{
start: //label
error=0;
elapsedWriteTime = millis()-startWriteTiming;
if (elapsedWriteTime > (writeTimingSeconds*1000))
{
readSensors();
writeThingSpeak();
startWriteTiming = millis();
}
if (error==1) //Resend if transmission is not completed
{
Serial.println(" <<<< ERROR >>>>");
delay (2000);
goto start; //go to label "start"
}
}
/********* Read Sensors value *************/
void readSensors(void)
{
//airTemp = dht.readTemperature();
//airHum = dht.readHumidity();
//DS18B20.requestTemperatures();
//soilTemp = DS18B20.getTempCByIndex(0); // Sensor 0 will capture Soil Temp in Celcius
light = map(analogRead(ldrPIN), 1023, 0, 0, 100); //LDRDark:0 ==> light 100%
soilHum = map(analogRead(soilHumPIN), 1023, 0, 0, 100);
}
/********* Conexao com TCP com Thingspeak *******/
void writeThingSpeak(void)
{
startThingSpeakCmd();
// preparacao da string GET
String getStr = "GET https://api.thingspeak.com/update?api_key=";
getStr += statusChWriteKey;
getStr +="&field1=";
getStr += String(light); //PUMP
getStr +="&field2=";
getStr += String(soilHum); //LAMP
//getStr +="&field3=";
//getStr += String(airTemp);
//getStr +="&field4=";
//getStr += String(airHum);
//getStr +="&field5=";
//getStr += String(soilTemp);
//getStr +="&field6=";
//getStr += String(soilHum);
//getStr +="&field7=";
//getStr += String(light);
//getStr +="&field8=";
//getStr += String(spare);
getStr += "\r\n\r\n";
sendThingSpeakGetCmd(getStr);
}
/********* Reset ESP *************/
void EspHardwareReset(void)
{
Serial.println("Reseting.......");
digitalWrite(HARDWARE_RESET, LOW);
delay(500);
digitalWrite(HARDWARE_RESET, HIGH);
delay(8000);//Tempo necessário para começar a ler
Serial.println("RESET");
}
/********* Start communication with ThingSpeak*************/
void startThingSpeakCmd(void)
{
EspSerial.flush();//limpa o buffer antes de começar a gravar
String cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += "api.thingspeak.com"; // api.thingspeak.com
cmd += "\",80";
EspSerial.println(cmd);
Serial.print("enviado ==> Start cmd: ");
Serial.println(cmd);
if(EspSerial.find("Error"))
{
Serial.println("AT+CIPSTART error");
return;
}
}
/********* send a GET cmd to ThingSpeak *************/
String sendThingSpeakGetCmd(String getStr)
{
String cmd = "AT+CIPSEND=";
cmd += String(getStr.length());
EspSerial.println(cmd);
Serial.print("enviado ==> lenght cmd: ");
Serial.println(cmd);
if(EspSerial.find((char *)">"))
{
EspSerial.print(getStr);
Serial.print("enviado ==> getStr: ");
Serial.println(getStr);
delay(500);//tempo para processar o GET, sem este delay apresenta busy no próximo comando
String messageBody = "";
while (EspSerial.available())
{
String line = EspSerial.readStringUntil('\n');
if (line.length() == 1)
{ //actual content starts after empty line (that has length 1)
messageBody = EspSerial.readStringUntil('\n');
}
}
Serial.print("MessageBody received: ");
Serial.println(messageBody);
return messageBody;
}
else
{
EspSerial.println("AT+CIPCLOSE"); // alert user
Serial.println("ESP8266 CIPSEND ERROR: RESENDING"); //Resend...
spare = spare + 1;
error=1;
return "error";
}
}
Kód: Egész kijelölése
Reseting.......
RESET
enviado ==> Start cmd: AT+CIPSTART="TCP","api.thingspeak.com",80
enviado ==> lenght cmd: AT+CIPSEND=85
ESP8266 CIPSEND ERROR: RESENDING
<<<< ERROR >>>>