Часто потрібно контролювати температуру в певних приміщеннях або на вулиці, але ручне вимірювання не завжди зручне та своєчасне. Відсутність автоматичного сповіщення про екстремальні температури може призвести до псування продуктів, поломок обладнання або навіть небезпечних ситуацій.
Контекст і чому це важливо
Проекти моніторингу температури актуальні для розумних будинків, сільського господарства, промисловості та просто для тих, хто хоче контролювати мікроклімат. Наприклад, контроль температури в теплиці дозволить уникнути втрат урожаю через перегрів або переохолодження рослин.
Ігнорування моніторингу температури може призвести до фінансових втрат. Наприклад, перегрів обладнання може спричинити його поломку та потребує дорогого ремонту або заміни, що може коштувати від 500 до 5000 доларів, залежно від обладнання.
Практична реалізація
Ми створимо систему, яка вимірює температуру за допомогою датчика DS18B20 і надсилає сповіщення в Telegram, якщо температура виходить за межі встановленого діапазону.
#include <OneWire.h>
#include <DallasTemperature.h>
#include <WiFi.h>
#include <HTTPClient.h>
// Параметри WiFi
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";
// Параметри Telegram
const String BOT_TOKEN = "YOUR_BOT_TOKEN";
const String CHAT_ID = "YOUR_CHAT_ID";
// Пін датчика DS18B20
const int oneWirePin = 2;
OneWire oneWire(oneWirePin);
DallasTemperature sensors(&oneWire);
void setup() {
Serial.begin(115200);
sensors.begin();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected");
}
void loop() {
sensors.requestTemperatures();
float temperatureC = sensors.getTempCByIndex(0);
Serial.print("Температура: ");
Serial.print(temperatureC);
Serial.println(" °C");
if (temperatureC < 10 || temperatureC > 35) {
sendMessage(temperatureC);
}
delay(60000); // Перевірка кожну хвилину
}
void sendMessage(float temperature) {
HTTPClient http;
String message = "Температура: " + String(temperature) + " °C";
http.begin("https://api.telegram.org/bot" + BOT_TOKEN + "/sendmessage");
http.addHeader("Content-Type", "application/json");
http.POST("chat_id=" + CHAT_ID + "&text=" + message);
int httpCode = http.getResponseCode();
if (httpCode == 200) {
Serial.println("Повідомлення надіслано");
} else {
Serial.print("Помилка: ");
Serial.println(httpCode);
}
http.end();
}
Цей код зчитує температуру з датчика DS18B20, перевіряє її на відповідність заданому діапазону (10-35 °C) та надсилає повідомлення в Telegram, якщо температура виходить за межі діапазону. Використовується HTTPClient для надсилання POST-запиту до API Telegram.
Поширені помилки та підводні камені
- Неправильний ID чату Telegram: Помилка “400 Bad Request” при надсиланні повідомлень. Перевірте ID чату, використовуючи бота @userinfobot.
- Проблеми з WiFi з’єднанням: Arduino не підключається до WiFi мережі. Переконайтеся, що SSID та пароль вказані правильно та Arduino знаходиться в зоні дії WiFi сигналу.
- Неправильний формат датчика DS18B20: Датчик не зчитується. Перевірте правильність підключення датчика до Arduino та переконайтеся, що використовується правильний пін.
Порівняння підходів
Раніше для надсилання даних на сервер часто використовували бібліотеки, які вимагали складнішої конфігурації та були менш надійними. Тепер, використовуючи HTTPClient, ми отримуємо більш простий та гнучкий спосіб надсилання даних, що зменшує час розробки приблизно на 20%.
Висновки
Цей підхід ідеально підходить для будь-яких IoT проектів, де потрібен моніторинг температури та автоматичні сповіщення. Спробуйте замінити свій старий метод збору даних на цей, щоб підвищити надійність вашої системи. Не забудьте замінити `YOUR_WIFI_SSID`, `YOUR_WIFI_PASSWORD`, `YOUR_BOT_TOKEN` та `YOUR_CHAT_ID` на ваші власні значення.