Angolo del Geek: Arduino + Temperatura + WiFi ESP8266 + Thingspeak
Qualche esperimento con Arduino Uno e la scheda Wifi ESP8266 da 5 euro.
Ho scaricato la libreria per ESP8266 , ho collegato la scheda Wifi stando accorto di mettere i due PIN VCC e CH_PD al 3.3V della scheda arduino (altrimenti seguite questi schemi di collegamento se avete solo il +5v), ho collegato un sensore di temperatura (quello incluso nello starterkit Arduino oppure uno da 2 euro. 3 Pin di cui il centrale è analogico e l’ho collegato all’entrata A0 dell’Arduino Uno.
Poi mi sono fatto account gratuito su thingspeak e ho generato la API Key da inserire nel codice di Arduino.
#include < stdlib.h>
#include < SoftwareSerial.h>
#define SSID "" // inserire qui SSID
#define PASS "" // inserire qui Password WiFi
#define IP "184.106.153.149" // thingspeak.com
#define HOST_PORT (80)
const int sensorPin= A0;
//const float baselineTemp = 25.5; // per test
#include "ESP8266.h"
SoftwareSerial monitor(3,2); // RX, TX
ESP8266 wifi(monitor);
void setup()
{
Serial.begin(9600);
Serial.println(wifi.getVersion().c_str());
if (wifi.createTCP(IP, HOST_PORT)) {
Serial.print("create tcp ok\r\n");
delay(2000);
} else {
Serial.print("create tcp err\r\n");
delay(10000);
setup();
}
}
void loop(){
int sensorVal=analogRead(sensorPin);
float voltage = (sensorVal/1024.0)*5.0;
float temperature = (voltage - .5)*100;
httpRequest(String(temperature));
delay(5*60000); //aggiornamento ogni 2 minuti
}
void httpRequest(String tenmpF) {
wifi.releaseTCP();
uint8_t buffer[128] = {0};
if (wifi.createTCP(IP, HOST_PORT)) {
String prova="GET /update?key=
int str_len = prova.length() + 1;
// Preparo il character array (buffer)
char hello[str_len];
prova.toCharArray(hello, str_len);
Serial.print(hello);
wifi.send((const uint8_t*)hello, strlen(hello));
uint32_t len = wifi.recv(buffer, sizeof(buffer), 10000);
Serial.print((char)buffer[4]);
}
else {
Serial.println("connection failed");
Serial.println("disconnecting.");
Serial.print("release tcp err\r\n");
wifi.releaseTCP();
}
}
Ecco il risultato aggiornato ogni 2 minuti (finchè non lo toglierò 🙂 :