CCCPaste

Código ThingSpeak

// Thingspeak.ino: comunicacao entre Arduino e a Nuvem!
//
// Baseado no programa esp8266_test de Mahesh Venkitachalam

#include "DHT.h"
#include 
#include 

int pinoLED = 13;
int pinoLDR = A0;
int pinoDHT = 8;
int tipoDHT =  DHT11;

DHT dht(pinoDHT, tipoDHT); // Inicializa o sensor
SoftwareSerial EspSerial(6, 7); // Inicializa a porta de comunicacao com modulo WiFi

// substitua pela chave de leitura do seu canal no Thingspeak
String chaveDeEscrita = "INSIRA_AQUI_SUA_CHAVE_DE_ESCRITA_DO_THINGSPEAK";

void setup() {                
  pinMode(pinoLED, OUTPUT);
  Serial.begin(9600); // Comunicacao com Monitor Serial
  EspSerial.begin(9600); // Comunicacao com Modulo WiFi
  dht.begin();
  EnviarComando("AT+RST", "Ready"); //Reset do Modulo WiFi
}

void loop() {
  float luminosidade = 1024.0f - analogRead(pinoLDR); // valores baixos: luminosidade baixa
  float umidade = dht.readHumidity();
  float temperatura = dht.readTemperature();

  // converte leiturasnpara String
  String strLuminosidade = floatToString(luminosidade);
  String strUmidade = floatToString(umidade);
  String strTemperatura = floatToString(temperatura);
 
  // Conexao com TCP com Thingspeak
  String cmd = "AT+CIPSTART=\"TCP\",\"";
  cmd += "184.106.153.149"; // Endereco IP de api.thingspeak.com
  cmd += "\",80";
  EspSerial.println(cmd);

  if(EspSerial.find("Error")){
    Serial.println("AT+CIPSTART error");
    return;
  }

  // preparacao da string GET
  String getStr = "GET /update?api_key=";
  getStr += chaveDeEscrita;
  getStr +="&field1=";
  getStr += String(strLuminosidade);
  getStr +="&field2=";
  getStr += String(strUmidade);
  getStr +="&field3=";
  getStr += String(strTemperatura);
  getStr += "\r\n\r\n";

  // envia o tamanho dos dados
  cmd = "AT+CIPSEND=";
  cmd += String(getStr.length());
  EspSerial.println(cmd);

  // envia comando de GET
  if(EspSerial.find(">")){
    EspSerial.print(getStr);
  }
  else{
    EspSerial.println("AT+CIPCLOSE");
    // alerta usuario
    Serial.println("AT+CIPCLOSE");
  }

  Serial.println("Comando enviado ao Thingspeak:");
  Serial.println(getStr);

  // pisca o LED a cada envio
  digitalWrite(pinoLED, HIGH);   
  delay(200);               
  digitalWrite(pinoLED, LOW);

  // o thingspeak precisa de pelo menos 16 segundos entre atualizacoes
  delay(16000);  
}

String floatToString(float f) {
  char buf[16];
  return dtostrf(f, 4, 1, buf);
}

boolean EnviarComando(String cmd, String ack){
  EspSerial.println(cmd); // Envia comando "AT+" para o modulo
  if (!echoFind(ack)) // tempo de espera para string de ack
    return true; // ack vazio ou ack encontrado
}

boolean echoFind(String keyword){
 byte current_char = 0;
 byte keyword_length = keyword.length();
 long deadline = millis() + 5000; // Tempo de espera 5000ms
 while(millis() < deadline){
  if (EspSerial.available()){
    char ch = EspSerial.read();
    Serial.write(ch);
    if (ch == keyword[current_char])
      if (++current_char == keyword_length){
       Serial.println();
       return true;
    }
   }
  }
 return false; // Tempo de espera esgotado
}