цифровая электроника
вычислительная техника
встраиваемые системы

 


Используем ESP8266 с платформой Thingspeak

Автор: Mike(admin) от 17-09-2021, 05:55

ThingSpeak представляет собой платформу Интернета вещей, которая позволяет агрегировать, визуализировать и анализировать потоки данных в реальном времени в облаке. Вы можете отправлять данные в ThingSpeak со своих устройств, создавать мгновенную визуализацию данных в реальном времени и отправлять оповещения.


Используем ESP8266 с платформой Thingspeak

В данном проекте мы попытаемся подружить ESP8266 с платформой Thingspeak. Мы подключим ESP8266 к DHT11 и отправим данные о температуре и влажности с помощью MQTT на платформу Thingspeak через Интернет.


Платформа в первую очередь нацелена на проекты Интернета вещей и аналитику данных с использованием визуальных элементов. Чтобы начать пользоваться бесплатными услугами Thingspeak, вам сначала необходимо зарегистрироваться, используя свой идентификатор электронной почты, как только это будет сделано вы увидите следующую страницу.


Используем ESP8266 с платформой Thingspeak

Теперь рассмотрим некоторые термины, которые могут помочь вам лучше понять принципы Thingspeak и сделать вашу работу с такими веб-серверами более удобной.


Ключ API: для обеспечения безопасности данных и предотвращения случайного чтения/записи данных кем-либо на ваш сервер должен быть какой-то тип защиты/пароля, и ключ API предназначен для этого. Ключ API – это длинный буквенно-цифровой ключ, который необходим для чтения/передачи данных на сервер.


Канал: канал в Thingspeak – это программный аналог аппаратного устройства IoT, которое вы подключаете к Thingspeak, в нашем случае ESP8266 будет использовать один весь канал нашей полосы пропускания. В бесплатном аккаунте Thingspeak у вас может быть максимум 4 канала.


Поле: каждый канал имеет 8 полей. Поле является переменной и хранит/разделяет тип данных, например, когда мы отправляем температуру и влажность с нашего устройства на сервер, оба параметра будут использовать по одному полю для каждого канала.


Скопируйте и сохраните ключ API записи, он понадобится нам позже при тестировании связи с Thingspeak.


Используем ESP8266 с платформой Thingspeak

Для организации связи нам также потребуется MQTT. MQTT – это облегченный протокол передачи данных, который мы можем использовать для тех же целей, для которых мы используем Thingspeak. Mosquitto – это организация, бесплатно предоставляющая сервер/брокер MQTT для тестовых целей. Больше информации можно найти на Mosquitto.org. В данной статье мы не будем углубляться в принципы работы MQTT.


Используем ESP8266 с платформой Thingspeak

Теперь перейдем непосредственно к тестированию.


Подключите DHT11 к выводе D0 модуля ESP8266, не забудьте и про линии питания. После этого с помощью Arduino IDE загрузите следующий код для записи информации в thingspeak.



#include <dht.h>
#include <ESP8266WiFi.h>

String api_key = "YOUR API KEY";     //  Введите свой ключ API записи из ThingSpeak
const char *ssid =  "YOUR WIFI SSID";     // замените на ваш Wi-Fi ssid и ключ wpa2
const char *pass =  "YOUR WIFI PASSWORD"; // замените на ваш пароль Wi-Fi
const char* server = "api.thingspeak.com";

#define DHTPIN 0
dht DHT;

WiFiClient client;
 
void setup() 
{
       Serial.begin(115200);
       delay(10);
       pinMode(2, OUTPUT);
       digitalWrite(2, 0);
       Serial.println("Connecting to ");
       Serial.println(ssid);
 
       WiFi.begin(ssid, pass);
 
      while (WiFi.status() != WL_CONNECTED) 
     {
            delay(500);
            Serial.print(".");
     }
      Serial.println("");
      Serial.println("WiFi connected");
 
}
 
void loop() 
{
      int chk = DHT.read11(DHTPIN);
      float h = DHT.humidity;
      float t = DHT.temperature;
      
              if (isnan(h) || isnan(t)) 
                 {
                     Serial.println("Failed to read from DHT sensor!");
                      return;
                 }

               if (client.connect(server,80))   //   "184.106.153.149" или api.thingspeak.com
            {  
                   String data_to_send = api_key;
                    data_to_send += "&field1=";
                    data_to_send += h;
                    data_to_send += "&field2=";
                    data_to_send += t;
                    data_to_send += "\r\n\r\n";

                   client.print("POST /update HTTP/1.1\n");
                   client.print("Host: api.thingspeak.com\n");
                   client.print("Connection: close\n");
                   client.print("X-THINGSPEAKAPIKEY: " + api_key + "\n");
                   client.print("Content-Type: application/x-www-form-urlencoded\n");
                   client.print("Content-Length: ");
                   client.print(data_to_send.length());
                   client.print("\n\n");
                   client.print(data_to_send);
                   delay(1000);
                   Serial.print("Temperature: ");
                   Serial.print(t);
                   Serial.print(" degrees Celcius, Humidity: ");
                   Serial.print(h);
                   Serial.println("%. Send to Thingspeak.");
              }
          client.stop();
 
          Serial.println("Waiting...");
  
  delay(10000);
}

Не забудьте внести в код API платформы. Теперь после успешной загрузки кода в последовательном мониторе вы получите сообщения, как на следующем изображении. Модуль сначала подключается к Wi-Fi, а затем отправляет данные на сервер после чтения параметров из DHT11.


Используем ESP8266 с платформой Thingspeak

На странице Thingspeak вы сможете увидеть записи, как на следующем изображении.


Используем ESP8266 с платформой Thingspeak

Если вы хотите пойти другим путем и управлять вещами из Thingspeak с помощью ESP8266 и читать данные сервера, вы можете использовать следующий код.



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

const char* ssid     = "SSID";  // Замените на имя своего Wi-Fi
const char* password = "PASSWORD;   // Замените своим паролем Wi-Fi
unsigned long channel =742359;  // Замените на свой собственный идентификатор канала учетной записи ThingSpeak
//1,2 и 3 - поля каналов. Вам не нужно ничего менять, если вы следуете этому руководству. Однако вы можете изменить это в соответствии с вашим приложением
unsigned int led1 = 1;
unsigned int led2 = 2;
unsigned int led3 = 3;
WiFiClient  client;
void setup() {
  Serial.begin(115200);
  delay(100);
  
  pinMode(D1, OUTPUT);
  pinMode(D2, OUTPUT);
  pinMode(D3, OUTPUT);
  digitalWrite(D1, 0);
  digitalWrite(D2, 0);
  digitalWrite(D3, 0);
 
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
 
  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  Serial.print("Netmask: ");
  Serial.println(WiFi.subnetMask());
  Serial.print("Gateway: ");
  Serial.println(WiFi.gatewayIP());
  ThingSpeak.begin(client);
}
void loop() {
 
  int led_1 = ThingSpeak.readFloatField(channel, led1);
  int led_2 = ThingSpeak.readFloatField(channel, led2);
  int led_3 = ThingSpeak.readFloatField(channel, led3);
 
  if(led_1 == 1){
    digitalWrite(D1, 1);
    Serial.println("D1 is On..!");
  }
  else if(led_1 == 0){
    digitalWrite(D1, 0);
    Serial.println("D1 is Off..!");
  }
 
  if(led_2 == 1){
    digitalWrite(D2, 1);
    Serial.println("D2 is On..!");
  }
  else if(led_2 == 0){
    digitalWrite(D2, 0);
    Serial.println("D2 is Off..!");
  }
 
  if(led_3 == 1){
    digitalWrite(D3, 1);
    Serial.println("D3 is On..!");
  }
  else if(led_3 == 0){
    digitalWrite(D3, 0);
    Serial.println("D3 is Off..!");
  }
    
  Serial.println(led_1);
  Serial.println(led_2);
  Serial.println(led_3);
  delay(5000);
 
}



© digitrode.ru


Теги: ESP8266, Thingspeak, датчик температуры, датчик влажности, MQTT, Интернет вещей




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий