Передача данных на сервер ThingSpeak, строим графики температуры и влажности используя микроконтроллера ESP8266.

В данном уроке, мы с Вами подключимся к серверу ThingSpeak и передадим ему наши данные с датчика DHT22.

Для начало необходимо зайти на сайт  ThingSpeak.com и зарегистрироваться.  После регистрации Вам нужно будет создать новый канал:

После нажатия кнопки Вы попадете в настройки канала:

Вам нужно будет написать имя канала, не обязательно но лучше заполнить поле «Описание», а так же для нашего примера поставить галочку напротив «Поле 1» и  «Поле 2». После чего дать имя данным полям, так как мы будем мерять температуру и влажность, у меня поля называются «T» и » Н» :

После создания канала, у Вас будет Ваш ID и станет доступна закладка ключи API. Нам нужно будет скопировать API ключ который идет на запись, так как мы будем записывать свои данные.
Так же очень Важно, что бы данные которые мы отсылаем приходили с паузами минимум в 20 секунд, иначе система их будет игнорировать. В нашей программе мы сделаем паузу в 30 секунд между отправками данных.

Для подключения к системе ThingSpeak мы используем библиотеку ThingSpeak.h, которую можно установить в Arduino IDE:

Программный код обычный: подключение к WiFi (Урок №2) и подключение датчика HDT22(Урок №3). 

Единственно, что у нас добавляется новенького, это функция:

ThingSpeak.writeField(myChannelNumber, 1,H, myWriteAPIKey), где:
myChannelNumber — номер ID
1 — номер поля.
Н — имя поля
myWriteAPIKey — API ключ

Программный код:

#include<ESP8266WiFi.h>
#include"ThingSpeak.h"
#include"DHT.h"

#define Ssid "rozkov"
#define PASS "a80523538024"
#define CH_ID 1438365
#define WRITE_APIKEY "FV60RRDZL0TZ90XZ"

unsigned long myChannelNumber = CH_ID;
const char * myWriteAPIKey = WRITE_APIKEY;
const char * ssid = Ssid;
const char * pass = PASS;

WiFiClient client;

// DHT22
#define DHTPIN 14 // номер ножки куда подключать датчик D5
#define DHTTYPE DHT22 //определяем тип датчика

float temperature=0;
float humidity=0;

// Инициализируем DHT сенсор.
DHT dht(DHTPIN, DHTTYPE, 5);

int n=0; // счетчик подключений

void setup() {
delay(1000);
Serial.begin(115200);
WiFi.mode(WIFI_STA);
dht.begin();
ThingSpeak.begin(client);
}

void loop() {
//Читаем температуру и давление
humidity = dht.readHumidity();
temperature = dht.readTemperature();

Serial.print("H=");Serial.println(humidity);
Serial.print("T=");Serial.println(temperature);

while (WiFi.status() != WL_CONNECTED) {
WiFi.begin(ssid, pass);// старт подключения
delay(1000);
n++;
if(n>=10)break;
}
n=0;

int httpCode1 = ThingSpeak.writeField(myChannelNumber, 1,humidity, myWriteAPIKey);
delay(21000);// Wait 30 seconds to update the channel again
int httpCode2 = ThingSpeak.writeField(myChannelNumber, 2,temperature, myWriteAPIKey);
delay(21000);
if((httpCode1 == 200)and (httpCode2 == 200)){
Serial.println("Channel write succeful");
}
else{
Serial.println("No write to channel");
}
}
В данной программе функция ThingSpeak() возвращает код ошибки, который мы помещаем в переменную httpCode1 и httpCode2. Если мы получаем код 200 — это означает, что данные успешно переданы и получены. При желании можно вывести код ошибок в мониторинг порта, добавив в блок else строки:
Serail.println(httpCode1);
Serail.println(httpCode2);