Статьи про электронику и технологии

Записываем данные в облако с помощью Arduino

Нет комментариев

Рассмотрим процесс записи данных в облако ThingSpeak с использованием платы Arduino, датчика DHT22 и ESP8266. Также затронем отправку и построение графиков данных в ThingSpeak, настройку триггеров и действий.

Облако

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

Не так давно жесткие диски, компакт-диски и дискеты были основными устройствами хранения данных. Однако это было невыгодно по нескольким причинам.

Во-первых, для резервного копирования данных нужно было покупать много внешних устройств, что приводило к дополнительным затратам. Во-вторых, увеличение объема данных, генерируемых пользователями, требует большей вычислительной мощности, что обходится дороже и требует затрат на обслуживание и ремонт.

С другой стороны, облако приходит на помощь, так как состоит из сбора центров обработки данных, доступ к которым можно получить через интернет. Они предлагают такие услуги, как электронная почта, хранение данных, обработка и извлечение данных, которые могут быть выполнены из любой точки мира.

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

На диаграмме выше показана концепция облака для Интернет Вещей (IoT).

Как правило, вычисления, хранение и базы данных обрабатываются сторонними сервисами на удаленных дата-центрах вместо пользовательских устройств или пользовательской инфраструктуры.

Доступ к одним и тем же файлам можно получить с любого устройства через Интернет. Кроме того, пользователям разрешено создавать и управлять своими учетными записями. К лучшим облачным платформам, доступным сегодня на рынке, относятся:

  1. Amazon Web Services
  2. Google Cloud Platform
  3. Microsoft Azure
  4. IBM Bluemix
  5. Alibaba

Интернет вещей (IoT)

Это подводит нас к другой интересной теме - "Интернет вещей", широко известной как просто IoT.

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

Для передачи данных с устройств через Интернет облачные вычисления обеспечивают инфраструктуру, позволяющую этим данным отправляться по назначению. На протяжении многих лет поставщики создали множество подключенных устройств, и в том же ключе было разработано множество облачных платформ IoT.

Примерами облачных платформ IoT являются ThingsBoard, ThingWorx, IBM Watson IoT, Node-RED, Thinger и ThingSpeak.

В этой статье мы остановимся на ThingSpeak.

ThingSpeak

ThingSpeak - это IoT и "облачная" платформа, позволяющая вещам или физическим устройствам подключаться к "облаку". Протоколы связи HTTP и MQTT обеспечивают связь между вещами и "облаком".

Платформа позволяет зарегистрированным пользователям собирать, отображать, анализировать, делать выводы и делать какие-то действия с данными.

ThingSpeak была выпущена на рынок ioBridge, и теперь она имеет поддержку MATLAB, таким образом, предоставляя пользователю доступ к передовым инструментам анализа данных.

Пользователи могут визуализировать данные своих датчиков с помощью нескольких встроенных графиков MATLAB или отображать данные в виде датчиков, диаграмм или настраиваемых графиков.

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

То есть для интеграции, преобразования, расчета новых данных и разработки приложений IoT. Дополнительные инструменты позволяют обмениваться данными между ThingSpeak и веб-приложениями или платформами социальных сетей.

Подключаем Arduino к ThingSpeak

В этом уроке мы будем использовать WiFi модуль ESP8266 для подключения Arduino к Интернету. Но прежде чем это сделать, мы должны убедиться, что наша WiFi-плата работает хорошо, и нет лучшего способа проверить это, чем традиционная программа "Hello World".

ESP8266 “HELLO WORLD”

Этот шаг необходим, чтобы проиллюстрировать, как работает процесс программирования ESP8266, и убедиться, что чип работает правильно. Для этой задачи нам потребуются следующие компоненты:

  1. Arduino Nano
  2. ESP8266 WiFi модуль
  3. Коммутационная плата ESP
  4. Перемычки
  5. Блок питания макетной платы (3,3 В и 5 В)
  6. Аккумулятор 9 В постоянного тока
  7. Резисторы на 100 и 250 Ом (делитель напряжения для понижения линии 5 В до 3 В)

Внешний источник питания необходим, потому что он обеспечивает необходимую мощность, необходимую для работы ESP8266 WiFi. Согласно таблице данных, IC ESP8266EX требует около 140 мА для передачи, что, к сожалению, Arduino Nano не может обеспечить.

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

Программируем Ардуино

Сначала загрузите пустой скетч на Arduino. В этом уроке мы используем Nano. Поэтому нам нужно выбрать правильную плату и принять к сведению правильный последовательный порт, прежде чем загружать минимальный эскиз. Это для того, чтобы убедиться, что ни одна программа не запущена на нашем Нано.

void setup() 
{

}
 
void loop() 
{

}

Во-вторых, загрузить прошивку команды AT на WiFi-модуль ESP8266. Данный шаг необходим в том случае, если при тестировании модуля на ESP8266 была загружена другая прошивка.

Данная прошивка позволяет передавать AT-команды на WiFi-модуль, а модуль, в свою очередь, отвечает необходимым выводом. Для подключения микросхемы мы подключаем наше аппаратное обеспечение, как показано на схеме выше.

Обратите внимание, что RST-контакт Arduino подключен к земле. Это для того, чтобы убедиться, что мы программируем ESP вместо этого.

Программируем ESP8266

Ниже скачайте инструмент для прошивки ESP8266 и прошивку AT. Распакуйте zip-файл и запустите исполняемый файл esp8266_flasher.exe.

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

После успешной записи прошивки AT-команд откройте последовательный порт Arduino и отправьте команду AT. Если всё в порядке, модуль ответит статусом ОК. Также можно отправить команду AT+GMR для запроса версии прошивки модуля. Полный список AT-команд доступен по этой ссылке.

После успешного тестирования ESP8266 следующим шагом будет подключение Arduino к ThingSpeak:

  1. Зарегистрируйтесь и создайте учетную запись на ThingSpeak. В качестве альтернативы вы можете использовать свои существующие учетные данные для входа в MATLAB, если вы используете MATLAB.
  2. Поскольку мы собираемся регистрировать данные о температуре и влажности, создайте новый канал с двумя полями - Температура и Влажность.
  3. Получите ключ API WRITE. Он нам понадобится для записи данных в наш канал ThingSpeak.

Отправляем данные датчика в ThingSpeak

Отправить данные датчика на наш канал ThingSpeak относительно легко - все, что нам нужно, это ключ записи API WRITE нашего канала и значения датчиков.

В этом руководстве, поскольку мы собираемся отправить две переменные (температуру и влажность), нам нужно иметь два поля - field1 и field2.

Затем инкапсулируйте все эти переменные в один URL-адрес, который мы можем отправить себе, набрав в веб-браузере:

https://api.thingspeak.com/update?api_key=drminls2dn88g1ez&field1=4&field2=4.

Другой способ отправки этого URL-адреса - через устройства, которые могут использовать AT-команды.

Это инструкции, которые микроконтроллеры или любые встроенные устройства используют для управления любым AT-совместимым трансивером.

Строим график данных датчика на ThingSpeak

Мы упоминали выше, что можем использовать ThingSpeak для сбора, визуализации и анализа данных наших датчиков. Теперь, когда мы собрали данные с датчика DHT22, нам нужно их визуализировать.

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

Чтобы отобразить данные наших датчиков на ThingSpeak, щелкните вкладку визуализации MATLAB и выберите настраиваемую (без стартового кода) радиокнопку. Вы будете перенаправлены к онлайн-редактору. Скопируйте и вставьте код MATLAB ниже, чтобы создать настраиваемый график визуализации.

readChannelID = 1109284;
fieldID1 = 1;
fieldID2 = 2;
readAPIKey = 'BYW217LCLBT8UCSA';

[data1, time1] = thingSpeakRead(readChannelID, 'Field', fieldID1, 'NumPoints', 30, 'ReadKey', readAPIKey);
[data2, time2] = thingSpeakRead(readChannelID, 'Field', fieldID2, 'NumPoints', 30, 'ReadKey', readAPIKey);

yyaxis left;
plot(time1, data1,'-*','LineWidth',2)
ytickformat('%.2f')
ylabel('Temperature [^0C]')
xlabel('Date')

yyaxis right;
plot(time2, data2,'-o','LineWidth',2);
ytickformat('%.2f')
ylabel('Humidity [%]')
legend({'Temperature','Humidity'},'Location', 'northwest')
grid on

Давайте немного разберем код MATLAB, который выше:

  1. В коде MATLAB для визуализации данных наших датчиков первое, что нам нужно, - это прочитать данные из нашего канала. Итак, для этого нам нужно передать идентификатор канала нашей программе readChannelID = 1109284.
  2. Затем мы передаем ключ API чтения нашей программе readAPIKey = 'BYW217LCLBT8UCSA'. Этот ключ API позволяет нашей программе считывать данные о температуре из нашего канала.
  3. Затем мы пишем функцию, которая получает данные из нашего канала и сохраняет эту информацию в двух переменных: переменной температуры (data1) и переменной даты (time1). Эта функция называется thingSpeakRead(), и она принимает четыре параметра: идентификатор канала, идентификатор поля, количество точек и ключ API чтения. [data1, time1] = thingSpeakRead (readChannelID, 'Поле', fieldID1, 'NumPoints', 30, 'ReadKey', readAPIKey).
  4. Наконец, мы строим график зависимости температуры от даты на двухмерном графике, используя функцию MATLAB plot(time1, data1,'-*','LineWidth',2). Остальная часть кода - это просто визуальные улучшения, которые мы используем, чтобы наши графики выглядели лучше.

Результат будет выведен в таком виде:

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

Устанавливаем пороговые значения и отправляем e-mail

Мы также можем установить условия для запуска различных реакций при превышении установленных пороговых значений.

Одним из них является срабатывание электронной почты, когда данные нашего датчика выходят за пределы определенного порогового уровня. Мы попытаемся отправить сообщение по электронной почте, когда температура превысит 30°С.

Чтобы включить оповещения по электронной почте на нашем канале, мы делаем следующее:

  1. Получите ключ API оповещений ThingSpeak (AlertsAPI key), щелкнув вкладку учетной записи, а затем щелкнув «Мой профиль» (My Profile).
  2. Создайте новый анализ, щелкнув MATLAB analysis, а затем создайте новый анализ.
  3. Выберите пустой шаблон и вставьте следующий код. Обратите внимание на необходимость заменить Alert API Key на API своего канала.
alert_body = 'Room temperature too high, consider reducing it...';
alert_subject = 'Room temperature';alert_api_key = 'TAK5NZV7NM4NUW27B1XG';alert_url= "https://api.thingspeak.com/alerts/send";jsonmessage = sprintf(['{"subject": "%s", "body": "%s"}'], alert_subject,alert_body);options = weboptions("HeaderFields", {'Thingspeak-Alerts-API-Key', alert_api_key; 'Content-Type','application/json'});result = webwrite(alert_url, jsonmessage, options);

Затем мы создаем Реакцию (React), которая будет подключена к анализу, который мы создали выше. Ниже представлена форма, которую мы используем для создания новой Реакции (React).

Когда все настроено правильно, мы должны получить уведомление по электронной почте, когда температура выйдет за определенный уровень:

Пример оповещения по E-mail

Пример проекта

Теперь давайте объединим то, что мы сделали до сих пор, чтобы создать проект, который регистрирует данные датчиков в облаке с помощью модуля Wi-Fi Arduino Nano, DHT22 и ESP8266.

Соединяем компоненты:

Затем мы используем следующий код для Arduino, чтобы отправить данные датчика в облако с помощью модуля ESP8266 WiFi.

#include <SoftwareSerial.h>
#define RX 2
#define TX 3
#include "DHT.h"
#define DHTPIN 6   
#define DHTTYPE DHT22 

DHT dht(DHTPIN, DHTTYPE);

String AP = "AndroidAP_7822";       
String PASS = "485088c2825f"; 
String API = "DRMINLS2DN88G1EZ"; 
String HOST = "api.thingspeak.com";
String PORT = "80";
String field1 = "field1";
String field2 = "field2";
int countTrueCommand;
int countTimeCommand; 
boolean found = false; 
float TempSensor = 1;
float HumidSensor = 1;
SoftwareSerial esp8266(RX,TX); 
 
  
void setup() {
  Serial.begin(9600);
  esp8266.begin(9600);
  dht.begin();
  delay(1000);
  sendCommand("AT",5,"OK");
  sendCommand("AT+CWMODE=1",5,"OK");
  sendCommand("AT+CWJAP=\""+ AP +"\",\""+ PASS +"\"",20,"OK");
}

void loop() {
 TempSensor = getTempData();
 HumidSensor = getHumidData();
 String getData = "GET /update?api_key="+ API +"&"+ field1 +"="+String(TempSensor)+"&"+ field2 +"="+String(HumidSensor);
sendCommand("AT+CIPMUX=1",5,"OK");
 sendCommand("AT+CIPSTART=0,\"TCP\",\""+ HOST +"\","+ PORT,15,"OK");
 sendCommand("AT+CIPSEND=0," +String(getData.length()+4),4,">");
 esp8266.println(getData);delay(1500);countTrueCommand++;
 sendCommand("AT+CIPCLOSE=0",5,"OK");
}

float getTempData(){
    delay(2000);
    float t = dht.readTemperature();
    if (isnan(t)) {
      Serial.println("Failed to read from DHT sensor!");
      return 0;
    }
    return t; 
}
float getHumidData(){
    delay(2000);
    float h = dht.readHumidity();
    if (isnan(h)) {
        Serial.println("Failed to read from DHT sensor!");
        return 0;
    }
    return h; 
}

void sendCommand(String command, int maxTime, char readReplay[]) {
  Serial.print(countTrueCommand);
  Serial.print(". at command => ");
  Serial.print(command);
  Serial.print(" ");
  while(countTimeCommand < (maxTime*1))
  {
    esp8266.println(command);//at+cipsend
    if(esp8266.find(readReplay))//ok
    {
      found = true;
      break;
    }
  
    countTimeCommand++;
  }
  
  if(found == true)
  {
    Serial.println("OK");
    countTrueCommand++;
    countTimeCommand = 0;
  }
  
  if(found == false)
  {
    Serial.println("Fail");
    countTrueCommand = 0;
    countTimeCommand = 0;
  }
  
  found = false;
 }

Немного разберем код выше:

1. Вот этот код:

sendCommand("AT",5,"OK");
sendCommand("AT+CWMODE=1",5,"OK");
sendCommand("AT+CWJAP=\""+ AP +"\",\""+ PASS +"\"",20,"OK");

Инициируются Arduino для команды ESP8266 для входа в режим станции (AT + CWMODE = 1) и подключения к точке доступа и паролю.

2. Вот это:

TempSensor = getTempData();
HumidSensor = getHumidData();

Функции для запроса DHT22 информации о температуре и влажности.

3. И наконец:

String getData = "GET /update?api_key="+ API +"&"+ field1 +"="+String(TempSensor)+"&"+ field2+"="+String(HumidSensor);

Arduino приказывает модулю ESP отправить этот URL:

https://api.thingspeak.com/update?api_key=drminls2dn88g1ez&field1=4&field2=4

Результат показан ниже.

На этом всё. Теперь вы знаете как можно работает и как можно использовать облако ThingSpeak.

Оригинал

Поделиться
2 ноября 2020 в 15:42
Обновлено 19 января 2021 в 01:02 (редакция)
Опубликовано:
Статьи про электронику и технологии,

Добавить комментарий

Ваш E-mail не будет никому виден. Обязательные поля отмечены *