Въведение
До сега в тази статия видяхме как може да се покажат данни от сензорите на борда на серийната конзола. Но това не е особено удобно или полезно за повечето приложения. Много по-полезно би било, ако записваме тези стойности на външна платформа, до която винаги имаме достъп, можем да обработваме данните и можем да ги визуализираме. Една от тези платформи е ThingSpeak. Но какво е това?
ThingSpeak – платформа за IoT
ThingSpeak е онлайн платформа за съхранение, анализ и визуализация на данни от интернет на нещата (IoT). Тази услуга предоставя мощни възможности за събиране и обработка на данни от различни IoT устройства, като сензори, микроконтролери и други.
Една от ключовите предимства на ThingSpeak е нейната лесна интеграция с различни IoT устройства и платформи. Потребителите могат да изпращат измерените стойности към ThingSpeak, използвайки HTTP или MQTT протоколи. Това прави платформата достъпна за широк кръг от устройства и приложения.
Основната функционалност на ThingSpeak включва възможността за съхранение на данни, визуализация на данни в реално време и изграждане на графики за анализ. Потребителите могат да конфигурират графики и диаграми в зависимост от определени условия. Също така платформата предлага и безплатна интеграция с MATLAB от MathWorks, без да е необходим лиценз. Този аспект прави ThingSpeak подходящо решение за мониторинг, управление на IoT устройства и анализ на събраните от тях стойности.
Платформата също така предоставя възможности за изпращане на известия и автоматизирани действия, които се активират при постигане на определени условия. Това може да бъде полезно за реагиране на събития в реално време и за управление на системи .
От гледна точка на сигурността, ThingSpeak има възможности за управление на достъпа и защита на данните. Потребителите могат да настройват права за достъп и да използват кодиране на данните, което осигурява високо ниво на сигурност при обработката и съхранението на информацията.
Основната идея, която следва платформата е:
- Събиране на данни от множество възможни източници (сензори, датчици, състояние на системите или външни събития)
- Анализ на данните посредством математически анализи и алгоритми
- Реакция на определени резултати, които са в следствие на анализа
Но колко струва платформата? В страницата й можем да намерим отговора:
Като търговските потребител можем да се регистрират веднъж за ограничено време и безплатна ползване през това време за да проверим възможностите на платформата. Всички други търговски употреби изискват стандартен търговски лиценз. Нетърговските потребители могат да използват ThingSpeak безплатно при спазване на определени ограничения. Потребителите с безплатно ползване ще бъдат ограничени да изпращат не повече от 3 милиона съобщения годишно (към 8200 съобщения на ден) към платформата и 4 канала. Интервалът на актуализиране на съобщенията остава ограничен на 15 секунди. Съобщението се определя като запис с до 8 полета с данни в един канал. Например канал, представляващ метеорологична станция, може да включва следните 8 полета с данни: температура, влажност, барометрично налягане, скорост на вятъра, посока на вятъра, валежи, ниво на батерията и ниво на осветеност. Всяко съобщение не може да надвишава 3000 байта. Също така като пример на съобщенията може да имаме:
- Запис към канала с помощта на REST API или специфични за целта библиотеки на ThingSpeak
- Запис към канала чрез MQTT
- Запис към канала ThingSpeak от MATLAB с помощта на thingspeakwrite или REST API
- Запис към канала в от ThingSpeak към ThingSpeak с помощта на приложенията MATLAB Analysis или MATLAB Visualizations
- Всички записи в ThingSpeak, задействани от React или Timecontrol
- Запис в канал за изображения в ThingSpeak. Всеки успешен запис в канал за изображения консумира 100 съобщения
По-подробна информация може да се намери на тяхната страница.
Малко практически примери
Това прави ThingSpeak идеална платформа за ползване при малък IoT проект в дома. Но нека да се опитаме да имплементираме малко код и да използваме някои от предимствата на платформата. Така ще получим по-добра представа, как се ползва и какво може да прави.
От менюто на Arduino IDE 1.8.x изберете File->Examples->WiFi->WiFiClient

За наше огромно щастие в този пример вече е вграден изпращането на данни към ThingSpeak. За да го ползваме, трябва да направим няколко неща предварително.
- Трябва да се регистрираме или логнем на страницата
- Трябва да създадем канал. Това става като:
Отидем на My Channels

И когато сме там да създадем канал, като кликнем на „New Channel“
На следващото меню можем да попълним няколко стойности

И да натиснем “Save Channel”
Нека сега да попълним няколко стойности в кода.
- Въведете името и паролата на WiFi мрежата си. Те се заместват в полетата ssid и password на местата на „your-ssid“ и „your-password“.
- След като сме готови с това, нека да заместим и стойностите на channelID, writeApiKey и readApiKey. Тези ключове можем да намерим в ThingSpeak

- Нека да променим кода по следният начин:
#include
#include "driver/temp_sensor.h"
const char* ssid = "An****"; // Change this to your WiFi SSID
const char* password = "******"; // Change this to your WiFi password
const char* host = "api.thingspeak.com"; // This should not be changed
const int httpPort = 80; // This should not be changed
const String channelID = "23*****"; // Change this to your channel ID
const String writeApiKey = "WZ**********"; // Change this to your Write API key
const String readApiKey = "E5**********"; // Change this to your Read API key
int numberOfResults = 3; // Number of results to be read
int fieldNumber = 1; // Field number which will be read out
void initTempSensor(){
temp_sensor_config_t temp_sensor = TSENS_CONFIG_DEFAULT();
temp_sensor.dac_offset = TSENS_DAC_L2;
temp_sensor_set_config(temp_sensor);
temp_sensor_start();
}
void setup()
{
Serial.begin(115200);
initTempSensor();
while(!Serial){delay(100);}
// We start by connecting to a WiFi network
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());
}
void readResponse(WiFiClient *client){
unsigned long timeout = millis();
while(client->available() == 0){
if(millis() - timeout > 5000){
Serial.println(">>> Client Timeout !");
client->stop();
return;
}
}
// Read all the lines of the reply from server and print them to Serial
while(client->available()) {
String line = client->readStringUntil('\r');
Serial.print(line);
}
Serial.printf("\nClosing connection\n\n");
}
void loop(){
WiFiClient client;
String footer = String(" HTTP/1.1\r\n") + "Host: " + String(host) + "\r\n" + "Connection: close\r\n\r\n";
// WRITE --------------------------------------------------------------------------------------------
if (!client.connect(host, httpPort)) {
return;
}
float result = 0;
temp_sensor_read_celsius(&result);
client.print("GET /update?api_key=" + writeApiKey + "&field1=" + result + footer);
readResponse(&client);
// READ --------------------------------------------------------------------------------------------
String readRequest = "GET /channels/" + channelID + "/fields/" + fieldNumber + ".json?api_key=" + writeApiKey + "&results=" + numberOfResults + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n";
if (!client.connect(host, httpPort)) {
return;
}
client.print(readRequest);
readResponse(&client);
// -------------------------------------------------------------------------------------------------
delay(10000);
}
Към кода от примера добавих и кода от тази статия. Целта на програмата е освен да пише стойности в ThingSpeak, тези стойности да не са безразборни числа, а да имат някакъв смисъл. По този начин записваме в платформата температурата на самата платка. Но нека погледнем какво ще се изпише в серийната конзола:
******************************************************
Connecting to A********
.................................................................................................................................
WiFi connected
IP address:
192.168.25.226
HTTP/1.1 200 OK
Date: Thu, 30 Nov 2023 20:40:50 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 2
Connection: close
Status: 200 OK
Cache-Control: max-age=0, private, must-revalidate
Access-Control-Allow-Origin: *
Access-Control-Max-Age: 1800
X-Request-Id: add4611d-0b16-4645-be57-bc5f64e1fa54
Access-Control-Allow-Headers: origin, content-type, X-Requested-With
Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS, DELETE, PATCH
ETag: W/"98a3ab7c340e8a033e7b37b6ef942875"
X-Frame-Options: SAMEORIGIN
79
Closing connection
HTTP/1.1 200 OK
Date: Thu, 30 Nov 2023 20:40:52 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Connection: close
Status: 200 OK
Cache-Control: max-age=7, private
Access-Control-Allow-Origin: *
Access-Control-Max-Age: 1800
X-Request-Id: a9c8c4ab-ea9d-47dc-acab-80e68e24053b
Access-Control-Allow-Headers: origin, content-type, X-Requested-With
Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS, DELETE, PATCH
ETag: W/"06693d374f4a0be260f2834b6fe7be04"
X-Frame-Options: SAMEORIGIN
1c6
{"channel":{"id":2******,"name":"ThingSpeak","description":"ThingSpeak demo channel","latitude":"0.0","longitude":"0.0","field1":"Internal temp","created_at":"2023-11-18T14:20:41Z","updated_at":"2023-11-18T14:20:41Z","last_entry_id":79},"feeds":[{"created_at":"2023-11-28T20:47:03Z","entry_id":77,"field1":"40.35"},{"created_at":"2023-11-28T20:47:29Z","entry_id":78,"field1":"39.04"},{"created_at":"2023-11-30T20:40:50Z","entry_id":79,"field1":"37.72"}]}
0
Closing connection
Може да видим, че измерванията се изпращат и платформата ни връща последните 2 резултата.
Но нека погледнем какво се случва в канала на платформата.
На страницата можем да видим следната графика:

Тук виждаме графиката на последните 10 резултата.
А да изпратим Имейл?
Но нека да направим примера още малко по-практичен. Да си представим, че трябва да наблюдаваме температурата и да реагираме, когато тя стане висока, примерно да изключим борда. Това е една от стандартните функции на платформата. Тя може да ни извести чрез емайл, когато се случи нещо със стойностите. Примерно температурата достигне 40 градуса. Нека видим как става това.
Логнете се на страницата на ThingSpeak. За да продължим напред ни трябва API кода за изпращане на съобщения. Него може да го намерим като отидем на иконата на профила и кликнем върху “My profile.


Той започва с TAK. Копирайте го, защото той ще ни трябва за да пратим мейл.
След това отидете на Apps -> MATLAB Analysis. Там натиснете бутона “New”. За следващата стъпка ще ни трябва API Key-а от горе.

Тук изберете “Custom (no starter code)” и натиснете “Create”.

В полето MATLAB Code трябва да попълним следният код и да заместим „alert_api_key “ с ключа от по-нагоре:
alert_body = 'This is the text that will be emailed';
alert_subject = 'This will be the subject of the email';
alert_api_key = 'TAK**************';
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);
ето така:

И да натиснем Save.
Нека сега създадем и React

И да го настроим по следният начин

Като резултат ще получим следните две неща


Нека сега стартираме борда и видим резултата.
Когато температурата надвиши 40 градуса, се получава следният Имейл:

В имейла са темплетираните стойности, които могат да се заменят с текс, така че по-точно да описват алармата и значението и. Те тук са оставени така, за да се получи по-ясна представа кой текст къде се показва.
Резултатите в таблицата изглеждат така:

Тук ясно се вижда, че стойностите са надвишили границата от 40 градуса многократно.
Кратко заключение
Както виждате платформата ThingSpeak е мощен инструмент за IoT. В нея може да се съхранява информация, да се обработва и да се реагира спрямо определени стойност или резултати. Тя може да ни помогне при автоматизацията на различни неща. В нея могат също така да се визуализират и следят различни стойности като температура, налягане, влажност или потребление на ток. Платформата предлага безплатно ползване и мощни инструменти за автоматизация. Мисля че днес се запознахме с още една малка част на домашната автоматизация.
Весело програмиране!