Esp8266:примеры/температурный датчик ds18b20, передающий данные на easyiot cloud
Содержание
- 1 Загрузка кода на ESP8266
- 2 Display DS18B20 Temperature Readings on Web Server
- 3 Detailed Code Explanation
- 4 OWEN.
- 5 Wrapping Up
- 6 Что нового
- 7 Беспроводной термостат POER PTC10/PTR10 c WiFi шлюзом.
- 8 Покупка устройств
- 9 Преимущества беспроводных дистанционных датчиков температуры
- 10 Prerequisites
- 11 Схемы подключения терморегуляторов.
- 12 Установка библиотек
- 13 Резюме
- 14 Почему FreeRTOS и Arduino Core
Загрузка кода на ESP8266
Далее кликаем в IDE Arduino на Плата > Инструменты > Generic ESP8266 Module (Board > Tools > Generic ESP8266 Module). Вместо «Generic ESP8266 Module» также может быть вариант «ESP-12E».
1 /********* 2 Руи Сантос (Rui Santos) 3 Более подробно о проекте на: http://randomnerdtutorials.com 4 *********/ 5 6 // подключаем библиотеку «ESP8266WiFi»: 7 #include <ESP8266WiFi.h> 8 #include <OneWire.h> 9 #include <DallasTemperature.h> 10 11 // вписываем здесь SSID и пароль для вашей WiFi-сети: 12 const char* ssid = "REPLACE_WITH_YOUR_SSID"; 13 const char* password = "REPLACE_WITH_YOUR_PASSWORD"; 14 15 // контакт для передачи данных подключен к D1 на ESP8266 12-E (GPIO5): 16 #define ONE_WIRE_BUS 5 17 18 // создаем экземпляр класса oneWire; с его помощью 19 // можно коммуницировать с любыми девайсами, работающими 20 // через интерфейс 1-Wire, а не только с температурными датчиками 21 // от компании Maxim/Dallas: 22 OneWire oneWire(ONE_WIRE_BUS); 23 24 // передаем объект oneWire объекту DS18B20: 25 DallasTemperature DS18B20(&oneWire); 26 char temperatureCString6]; 27 char temperatureFString6]; 28 29 // веб-сервер на порте 80: 30 WiFiServer server(80); 31 32 // блок setup() запускается только один раз – при загрузке: 33 void setup() { 34 // инициализируем последовательный порт (для отладочных целей): 35 Serial.begin(115200); 36 delay(10); 37 38 DS18B20.begin(); // по умолчанию разрешение датчика – 9-битное; 39 // если у вас какие-то проблемы, его имеет смысл 40 // поднять до 12 бит; если увеличить задержку, 41 // это даст датчику больше времени на обработку 42 // температурных данных 43 44 // подключаемся к WiFi-сети: 45 Serial.println(); 46 Serial.print("Connecting to "); // "Подключаемся к " 47 Serial.println(ssid); 48 49 WiFi.begin(ssid, password); 50 51 while (WiFi.status() != WL_CONNECTED) { 52 delay(500); 53 Serial.print("."); 54 } 55 Serial.println(""); 56 Serial.println("WiFi connected"); // "Подключение к WiFi выполнено" 57 58 // запускаем веб-сервер: 59 server.begin(); 60 Serial.println("Web server running. Waiting for the ESP IP..."); 61 // "Веб-сервер запущен. Ожидание IP-адреса ESP..." 62 delay(10000); 63 64 // печатаем IP-адрес ESP: 65 Serial.println(WiFi.localIP()); 66 } 67 68 void getTemperature() { 69 float tempC; 70 float tempF; 71 do { 72 DS18B20.requestTemperatures(); 73 tempC = DS18B20.getTempCByIndex(); 74 dtostrf(tempC, 2, 2, temperatureCString); 75 tempF = DS18B20.getTempFByIndex(); 76 dtostrf(tempF, 3, 2, temperatureFString); 77 delay(100); 78 } while (tempC == 85.0 || tempC == (-127.0)); 79 } 80 81 // блок loop() будет запускаться снова и снова: 82 void loop() { 83 // начинаем прослушку входящих клиентов: 84 WiFiClient client = server.available(); 85 86 if (client) { 87 Serial.println("New client"); // "Новый клиент" 88 // создаем переменную типа «boolean», 89 // чтобы определить конец HTTP-запроса: 90 boolean blank_line = true; 91 while (client.connected()) { 92 if (client.available()) { 93 char c = client.read(); 94 95 if (c == '\n' && blank_line) { 96 getTemperature(); 97 client.println("HTTP/1.1 200 OK"); 98 client.println("Content-Type: text/html"); 99 client.println("Connection: close"); 100 client.println(); 101 // веб-страница с данными о температуре: 102 client.println("<!DOCTYPE HTML>"); 103 client.println("<html>"); 104 client.println("<head></head><body><h1>ESP8266 - Temperature</h1><h3>Temperature in Celsius: "); 105 client.println(temperatureCString); 106 client.println("*C</h3><h3>Temperature in Fahrenheit: "); 107 client.println(temperatureFString); 108 client.println("*F</h3></body></html>"); 109 break; 110 } 111 if (c == '\n') { 112 // если обнаружен переход на новую строку: 113 blank_line = true; 114 } 115 else if (c != '\r') { 116 // если в текущей строчке найден символ: 117 blank_line = false; 118 } 119 } 120 } 121 // закрываем соединение с клиентом: 122 delay(1); 123 client.stop(); 124 Serial.println("Client disconnected."); 125 // "Клиент отключен." 126 } 127 }
Display DS18B20 Temperature Readings on Web Server
Now that you know how to get temperature and humidity from DS18B20 sensors, we’ll display the readings on a web server that you can access on your local network.
For this example, you need two files:
- boot.py: runs when the device starts and sets up several configuration options like your network credentials, importing libraries, setting the pins, etc.
- main.py: this is the main script where we’ll handle the web server. It executes immediately after the boot.py.
Note: it is a good practice to include the boot.py and main.py files. However, if you prefer, you can include all the code in the main.py file.
boot.py (DS18B20 web server)
Create a new file in your IDE called boot.py and copy the following code.
This file imports the required libraries, sets up the DS18B20 sensor and connects to your network.
Here, we’re setting the DS18B20 data pin on GPIO 4 but you can use any other suitable pin:
You should insert your network credentials in the following variables so that the ESP is able to connect to your network.
main.py (DS18B20 web server)
In the main.py file is where we’ll create the web server and handle the requests. Copy the following code to your main.py file.
Reading the DS18B20 Sensor
The code starts by creating a function called read_ds_sensor() that gets the temperature from the DS18B20 temperature sensor. If you’ve followed the previous section, you should be familiar with the methods used here.
Web Page
The web_page() function returns the HTML page with the latest temperature readings.
We’ve built a similar web page on a previous tutorial. So, if you want to learn how this HTML works, you can read this article: MicroPython: ESP32/ESP8266 with DHT11/DHT22 Web Server.
Creating the web server
After that, make the usual procedures to create a socket server.
For an in-depth explanation of this procedure, refer to this tutorial.
Basically, when the ESP receives a request, we send the web page with the latest readings as a response:
Detailed Code Explanation
The sketch starts by including following libraries.
- ESP8266WebServer.h library provides ESP8266 specific WiFi methods we are calling to connect to network. It also has some methods available that will help us setting up a server and handle incoming HTTP requests without needing to worry about low level implementation details.
- DallasTemperature.h library is a hardware-specific library which handles lower-level functions. It needs to be paired with One Wire Library, in order to make it work.
- OneWire.h library communicates with any one-wire device not just DS18B20.
Next we create the instances needed for the temperature sensor and variables to store temperature readings. The temperature sensor is connected to GPIO D2.
Next, we enter the addresses that are found previously for each temperature sensor. In our case, we have the following.
As we are configuring ESP8266 in Station (STA) mode, it will join existing WiFi network. Hence, we need to provide it with your network’s SSID & Password. Next we start web server at port 80.
Inside Setup() Function
Inside Setup() Function we configure our HTTP server before actually running it. First of all, we initialize serial communication with PC and initialize DallasTemperature object using function. It initializes the bus and detects all the DS18B20s present on it. Each sensor is then assigned with an index and set bit resolution to 12-bit.
Now, we need to join the WiFi network using function. The function takes SSID (Network Name) and password as a parameter.
While the ESP8266 tries to connect to the network, we can check the connectivity status with function.
Once the ESP8266 is connected to the network, the sketch prints the IP address assigned to ESP8266 by displaying value on serial monitor.
In order to handle incoming HTTP requests, we need to specify which code to execute when a URL is hit. To do so, we use on method. This method takes two parameters. First one is a URL path and second one is the name of function which we want to execute when that URL is hit.
The code below indicates that when a server receives an HTTP request on the root () path, it will trigger the function. Note that the URL specified is a relative path.
We haven’t specified what the server should do if the client requests any URL other than specified with . It should respond with an HTTP status 404 (Not Found) and a message for the user. We put this in a function as well, and use to tell it that it should execute it when it receives a request for a URL that wasn’t specified with
Now, to start our server, we call the begin method on the server object.
Inside Loop() Function
To handle the actual incoming HTTP requests, we need to call the method on the server object.
Next, we need to create a function we attached to root (/) URL with Remember?
At the start of this function, we get the temperature reading from each sensor. In order to respond to the HTTP request, we use the send method. Although the method can be called with a different set of arguments, its simplest form consists of the HTTP response code, the content type and the content.
In our case, we are sending the code 200 (one of the HTTP status codes), which corresponds to the OK response. Then, we are specifying the content type as “text/html“, and finally we are calling custom function which creates a dynamic HTML page containing temperature readings.
Likewise, we need to create a function to handle 404 Error page.
Displaying the HTML Web Page
function is responsible for generating a web page whenever the ESP8266 web server gets a request from a web client. It merely concatenates HTML code into a big string and returns to the function we discussed earlier. The function takes temperature readings as a parameter to dynamically generate the HTML content.
The first text you should always send is the <!DOCTYPE> declaration that indicates that we’re sending HTML code.
Next, the <meta> viewport element makes the web page responsive in any web browser, while title tag sets the title of the page.
Styling the Web Page
Next, we have some CSS to style the web page appearance. We choose the Helvetica font, define the content to be displayed as an inline-block and aligned at the center.
Following code then sets color, font and margin around the body, H1 and p tags.
Displaying Temperature readings on Web Page
To dynamically display temperature readings, we put those values in paragraph tag. To display degree symbol, we use HTML entity °
OWEN.
ТРМ500-WiFi совсем не комнатный регулятор.
Зато это промышленный терморегулятор с мощным реле, крупным индикатором и прямым доступом к OwenCloud.
Стоит всего 3600р.
Зато функционал обширный, как и положено для промышленного устройства.
Приложение OwenDeviceControl.
Облачный сервис имеет WEB-интерфейс с DEMO входом.
Существует и другой вариант применения устройств промышленной автоматизации OWEN в качестве терморегулятора с Wi-Fi.
Это связка ТРМ200 и ПВ210, стоимостью 3900 + 3900=7800р.
ТРМ200 — двухканальный измеритель с универсальным входом, RS-485 и бытовым дизайном настенного исполнения.
ПВ210 — сетевой шлюз для доступа к сервису OwenCloud RS-485 Wi-Fi.
Но это уже автоматизация совсем другого уровня.
Wrapping Up
MQTT is a great communication protocol to exchange small amounts of data between devices. In this tutorial you’ve learned how to publish DS18B20 temperature readings with the ESP8266 on an MQTT topic. Then, you can use any device or home automation platform to subscribe to that topic and receive the readings.
Instead of a DS18B20, you can use any a different sensor:
- ESP8266 MQTT – Publish BME280 Temperature, Humidity and Pressure Readings
- ESP8266 MQTT – Publish DHT11/DHT22 Temperature and Humidity Readings
We hope you’ve found this tutorial useful. If you want to learn more about the ESP8266, take a look at our resources:
- Home Automation using ESP8266
- MicroPython Programming with ESP32 and ESP8266
- More ESP8266 NodeMCU Projects…
Что нового
- 20.08.20 — Обновлена библиотека GPRS на ESP32. Добавлена поддержка SIM7600
- 15.08.20 — Обновлен SDK на чипе ESP32
- 20.05.20 — Добавлена отправка изображения с esp32 cam в ICQ
- 20.05.20 — Добавлена поддержка управления через ICQ
- 10.05.20 — Добавлена опция BT HUB на ESP32 для чтения Bluetooth датчиков и других устройств
- 02.05.20 — У TFT добавлен поворот на 180 и поддержка нескольких разрешений дисплеев
- 30.04.20 — Добавлена поддержка нескольких MCP23017
- 07.04.20 — Добавлена поддержка ICQ в RTOS прошивках
- 29.02.20 — Добавлен метеосервис OpenWeatherMap
- 22.02.20 — Добавлены новые параметры i и m в опции ModBus мастер
- 18.02.20 — Рефакторинг опции LCD дисплея. Добавлен русский язык и перенос по enter
- 15.02.20 — У датчиков DS18B20 увеличено количество знаков после запятой на esp8266
- 15.02.20 — Крупный рефакторинг кода на esp8266 — возможны ошибки
- 09.02.20 — У датчиков DS18B20 увеличено количество знаков после запятой на RTOS прошивках
- 09.02.20 — Крупный рефакторинг кода на RTOS прошивках — возможны ошибки
- 01.02.20 — Датчик DS18B20 сейчас может работать через I2C конвертер DS2482
- 26.01.20 — Добавлена отправка изображения с esp32 cam в Telegram
- 19.01.20 — Добавлена возможность отправки изображения на сервер из esp32 cam
- 20.12.19 — Lora Node: Сейчас шаблон отправки задается на вкладке lora
- 04.12.19 — На RTOS прошивках имеются небольшие изменение в интерфейсе настройки и добавлена поддержка ОТАА и плана частот
- 02.11.19 — Добавлена поддержка «не съезжающих» настроек на esp8266
- 19.10.19 — Добавлен экспорт/импорт настроек ESP32 и ESP8266 RTOS
- 12.10.19 — Добавлено «не съезжающее» хранение настроек ESP32 и ESP8266 RTOS
- 03.10.19 — Добавлен новый вариант веб сервера на ESP32 и ESP8266 RTOS
- 25.07.19 — Добавлены логические выражения в текстовых опциях
- 20.07.19 — Добавлена поддержка ModBus на ESP8266
- 09.05.19 — Добавлены датчики HDC1080(влажность) и PMS5003 (пыль)
- 24.01.19 — Исправление опции Narodmon.ru get связанное с большими числами ID
- 04.01.19 — Добавлена опция ModBus master с базовыми функциями на ESP32
- 17.12.18 — Добавлена опция энкодера с базовыми функциями
- 17.11.18 — Значительно расширены возможности Interpreter до версии 2
- 04.11.18 — На опции GPIO Keys сейчас доступна ручная установка полярности
- 03.11.18 — Добавлена поддержка EEPROM в проект
- 28.10.18 — Добавлена поддержка MAX31865 для подключения аналоговых датчиков pt100/pt1000
- 09.10.18 — Прошивку на Nextion сейчас можно загружать через веб интерфейс ESP32
- 07.10.18 — Значительно расширен функционал работы дисплеев Nextion
- 14.09.18 — Добавлена опция UART HTTP bridge для подключения внешнего м/к с пробросом веб, датчиков и gpio
- 19.08.18 — Добавлена опция GPIO Keys для управления через кнопки, в том числе и через долгое нажатие
- 15.07.18 — Исправлена работа опции Gismeteo на ESP8266
- 10.06.18 — Добавлена поддержка NetBIOS, MDNS и СaptiveРortal на модулях ESP32
- 10.03.18 — Добавлена поддержка LoRa на модулях ESP8266, идет отладка
- 19.02.18 — Добавлена поддержка вывода названия текущего трека в опции интернет радио
- 19.02.18 — Добавлена поддержка сервоприводов через ШИМ PCA9685
- 18.02.18 — Добавлена поддержка 16 канального ШИМ PCA9685
- 15.02.18 — Добавлен одно-канальный i2C ЦАП MCP4725
- 08.02.18 — MP3/WAV плеер выделен в отдельную опцию
- 06.02.18 — TFT дисплей на ESP32 сейчас может выводить JPG и BMP картинки
- 05.02.18 — В опции Sonoff POW появилась калибровка напряжения и тока
Беспроводной термостат POER PTC10/PTR10 c WiFi шлюзом.
Стоит комплект 5300р на AliExpress.
Термостат состоит из программируемого передающего устройства (PTC10), принимающего исполнительного реле (PTR10) и подключаемого в сеть 220V шлюза Poer WiFi. Между собой связь осуществляется по радиоканалу 433/868 МГц, а шлюз с роутером по WiFi.
К одному шлюзу можно подключить несколько термостатов.
Приложение Poer Smart home получило много оценок — им реально пользуются. Много низких, но это детали — где вы видели положительные оценки в GooglePlay?
Есть вход в демо-аккаунт облачного сервиса.
К слову сказать, в официальном магазине POER на AliExpress есть single-изделие — термостат POER PTC20 без радио и шлюза. Подробное описание этого термостата рекомендую читать тут «POER термостат (thermostat, терморегулятор) с управлением через интернет — честный обзор» и тут «Термостат комнатный POER — Ужасное по качеству со сплошным браком изделие с Алиэкспресс».
Статьи сразу же отбивают охоту купить облачный терморегулятор с Wi-Fi на AliExpress.
Отмечу только наличие двух каналов управления:
Покупка устройств
Автор Chillichump в своем видео использует датчик AM2302 и Arduino совместимое устройство Wemos D1 Mini.
- Датчик — https://ru.aliexpress.com/item/1086124515.html (покупал за $2.44 за штуку)
- Компьютер на базе ESP8266 со встроенным WiFi — https://ru.aliexpress.com/item/32958591238.html (покупал за $2.35 за штуку)
Заказал и оплатил на сайте 13 августа, а 2 сентября я забрал посылку с почты (вообще пришло чуть раньше).
Буду считать что пришло за 20 дней.
Я не заказывал, но вообще для сборки датчика нужны еще компоненты:
- Резистор на 10 кОм
- Провод Micro USB
- USB блок питания
И еще нужны расходники — монтажные провода, припой. Из инструментов нужен как минимум паяльник и кусачки.
Преимущества беспроводных дистанционных датчиков температуры
Хорошие продажи в Москве и множество положительных отзывов от покупателей говорят о том, что дистанционный датчик температуры действительно очень удобен и практичен.
Вот некоторые его достоинства:
-
Радиодатчик температуры легко подключить даже там, где невозможно установить другие каналы связи и провести кабель для подключения к электросети.
-
Удаленный датчик температуры может дистанционно сообщать пользователю информацию о климате в помещении, даже когда он находится далеко. Современный Wi-Fi датчик температуры использует для этих целей специальное мобильное приложение.
-
Высокая чувствительность сенсора и тонкая настройка параметров измерения температуры.
-
Wi-Fi датчики температуры, как правило, обладают высокой мобильностью. Благодаря малым габаритам их легко переносить с одного места на другое.
- Разные варианты конфигурации прибора. Например, это может быть беспроводной термометр с внешним датчиком наружной температуры. Технология беспроводного Wi-Fi датчика температуры применима в самых разных вариантах.
В нашем интернет магазине можно купить удаленные Wi-Fi датчики температуры с различными функциональными особенностями для разных сфер применения. Всю важную информацию легко узнать из описания товара на его странице в интернет магазине. После оплаты заказа, Wi-Fi датчик температуры будет доставлен по указанному адресу в ближайшее время.
Где еще используют это оборудование:
- Беспроводной дистанционный (wifi) датчик температуры
- Цифровой датчик температуры с сигналом
- Электронный компактный датчик температуры
Prerequisites
Before proceeding with this tutorial, make sure you check the following prerequisites.
Arduino IDE
We’ll program the ESP8266 using Arduino IDE, so make sure you have the ESP8266 add-on installed.
Installing ESP8266 Board in Arduino IDE (Windows, Mac OS X, Linux)
MQTT Broker
To use MQTT, you need a broker. We’ll be using Mosquitto broker installed on a Raspberry Pi. Read How to Install Mosquitto Broker on Raspberry Pi.
You can use any other MQTT broker, including a cloud MQTT broker. We’ll show you how to do that in the code later on.
If you’re not familiar with MQTT make sure you read our introductory tutorial: What is MQTT and How It Works.
MQTT Libraries
To use MQTT with the ESP8266 we’ll use the Async MQTT Client Library.
Installing the Async MQTT Client Library
- Click here to download the Async MQTT client library. You should have a .zip folder in your Downloads folder
- Unzip the .zip folder and you should get async-mqtt-client-master folder
- Rename your folder from
async-mqtt-client-masterto async_mqtt_client - Move the async_mqtt_client folder to your Arduino IDE installation libraries folder
- Finally, re-open your Arduino IDE
Alternatively, you can go to Sketch > Include Library > Add . ZIP library and select the library you’ve just downloaded.
Installing the ESPAsync TCP Library
To use MQTT with the ESP, you also need the ESPAsync TCP library.
- Click here to download the ESPAsync TCP client library. You should have a .zip folder in your Downloads folder
- Unzip the .zip folder and you should get ESPAsyncTCP-master folder
- Rename your folder from
ESPAsyncTCP-masterto ESPAsyncTCP - Move the ESPAsyncTCP folder to your Arduino IDE installation libraries folder
- Finally, re-open your Arduino IDE
Alternatively, you can go to Sketch > Include Library > Add . ZIP library and select the library you’ve just downloaded.
DS18B20 Temperature Sensor Libraries
To interface with the DS18B20 temperature sensor, you need to install the One Wire library by Paul Stoffregen and the Dallas Temperature library. Follow the next steps to install those libraries.
1. Open your Arduino IDE and go to Sketch > Include Library > Manage Libraries. The Library Manager should open.
2. Type “onewire” in the search box and install OneWire library by Paul Stoffregen.
3. Then, search for “Dallas” and install DallasTemperature library by Miles Burton.
After installing the libraries, restart your Arduino IDE.
To learn more about the DS18B20 temperature sensor, read our guide: ESP8266 DS18B20 Temperature Sensor with Arduino IDE (Single, Multiple, Web Server)
Parts Required
For this tutorial you need the following parts:
- ESP8266 (read Best ESP8266 development boards comparison)
- DS18B20 Temperature Sensor – DS18B20 with ESP8266 Guide
- 4.7k Ohm resistor
- Raspberry Pi board (read Best Raspberry Pi Starter Kits)
- MicroSD Card – 16GB Class10
- Raspberry Pi Power Supply (5V 2.5A)
- Jumper wires
- Breadboard
You can use the preceding links or go directly to MakerAdvisor.com/tools to find all the parts for your projects at the best price!
Схемы подключения терморегуляторов.
Однозначное представление о назначении терморегулятора дает схема его подключений.
Рассмотрим несколько терморегуляторов одной модели различного исполнения.
Схемы подключения терморегулятора MOES BHT-002.
В паспорте терморегулятора найдем схемы подключения.
Из схем подключения видно, что бывают несколько исполнений этой модели терморегулятора: GA, GB, GC.
GA — для водяных теплых полов.
GB — для водяных теплых полов.
GC — для котла.
Инструкция по эксплуатации на русском POER PTC10.
Несколько пополнений одной модели:
Дешевые терморегуляторы.
Это терморегуляторы без нормального корпуса, стоимостью до 200р.
Стоит иметь ввиду что они бывают двух видов: с выходными сухими контактами реле и с выходом 220В.
Вот схемы некоторых с виду похожих терморегуляторов.
Разница видна только при изучении схемы из документации.
Держа в руках сам терморегулятор сложно понять какого он исполнения.
Перед использованием необходимо убедиться что терморегулятор имеет именно то исполнение, которое предполагается.
Терморегуляторы с двумя управляющими выходами.
Выпускаются терморегуляторы с двумя выходами для управления двумя различными устройствами, которые могут управлять и котлом при помощи сухого контакта и актуатором при помощи слаботочного высоковольтного выхода.
Второй канал управления появляется в ущерб клеммам выносного датчика.
А выносной датчик и не нужен при управлении водяным теплым полом.
AliExpress.com Product — BEOK Programmable Gas Boiler Heating Temperature Regulator APP Controls WIFI Thermostat & Hand Control Thermostat with Kid Lock | HESSWAY 3A TUYA refrigerator temperature controller wifi thermostat for 2 in 1 Linkage Gas Boiler&Dry contact NC/NO |
Необычные по схемам подключения терморегуляторы.
Модели с 4-7 канальным управлением.
Предназначены для управления централизованным кондиционированием. Для этого необходимо управлять вентилятором сплит системы и краном подачи охлаждающей жидкости.
AliExpress.com Product — 95~240VAC Two Pipe LCD Weekly Programmable Central Air Conditioning Room Fan Coil Thermostat | AliExpress.com Product — HESSWAY 2P4P cool heat wifi touch screen room thermostat Google Home,Amazon Echo,Tmall Genie, IFTTT for fan valve control |
Схемы соединения этих терморегуляторов тоже достойны пополнить коллекцию схем соединения. Можно выбрать модель с возможностью управления двумя или тремя устройствами.
Установка библиотек
Для этого проекта нам понадобятся библиотеки «OneWire» и «DallasTemperature».
Чтобы установить библиотеку «OneWire», проделайте следующее:
- Распакуйте этот архив. В результате у вас должна появиться папка «OneWire-master».
- Переименуйте ее на «OneWire».
- Переместите переименованную папку в папку «libraries» IDE Arduino.
- Перезапустите IDE Arduino.
Чтобы установить библиотеку «DallasTemperature», проделайте следующее:
- Распакуйте этот архив. В результате у вас должна появиться папка «Arduino-Temperature-Control-Library-master».
- Переименуйте ее на «DallasTemperature».
- Переместите переименованную папку в папку «libraries» IDE Arduino.
- Перезапустите IDE Arduino.
Резюме
Получилось отлично. Сенсор очень просто сделать. Компоненты дешевые, работает отлично.
Код программы доступен. Сенсор можно заинтегрировать куда угодно.
Но мое решение больше похоже на прототип чем на настоящий продукт. Вот несколько вещей что
хотелось бы сделать иначе:
- Устройство — это микросхема из которой торчат провода. Нужно все это облагородить. Запихнуть
все это в красивый корпус. - Для того чтобы настроить подключение к WiFi нужно подключить устройство по USB к ноутбуку,
в код программы вставить название точки доступа и пароль, скомпилировать и залить программу на
устройство. Хотелось бы иметь возможность настраивать устройство без необходимости подключать
к ноутбуку со специальным софтом. Например, устройство могло бы работать так. Дополнительно
на устройстве есть кнопка. Зажимаешь ее на 5 секунд, устройство переходит в режим настройки.
Оно становится WiFi точкой доступа к которой можно подключиться. Имя точки доступа — это ее MAC
адрес (написан на устройстве). Пароль — серийный номер (тоже написан на устройстве). Подключился
к этой точке, заходишь на адрес 192.168.1.1 — там простой веб интерфейс, где выставляешь настройки.
Сохраняешь — устройство переходит в рабочий режим, подключается к указанной точке и два раза
в минуту отправляет данные. Возможно еще было бы неплохо иметь на устройстве светодиод, разные
цвета и разные паттерны моргания означают разные ошибки/состояния. - Работа устройства зависит от доступности сервера на которое устройство отправляет данные.
Если к этому серверу нельзя подключиться (например, нет интернета), то замеры теряются. Возможно
если нет доступа до сервера, то имеет смысл сохранять замеры в специальный буфер, а когда
доступ к серверу возобновляется, то отправятся все сохраненные замеры. - Протокол взаимодействия с сервером — HTTP и все работает без необходимости указывать логин/пароль
или токен. Возможно что стоит использовать специальный протокол MQTT, но если продолжать
использовать HTTP, то нужно переходить на https с авторизацией по токену. Так что тут
очень актуальна шутка что в слове IoT буква S означает Security.
Иван Бессарабовivan@bessarabov.ru
7 октября 2019
Почему FreeRTOS и Arduino Core
На Arduino написаны куча библиотек, в частности тот же самый Blynk, поэтому от Arduino Core особо то и не уйдёшь.
FreeRTOS потому что позволяет организовать работу маленькой железки похожей на работу полноценного промышленного контроллера. Каждую задачу можно вынести в свою таску, останавливать её, запускать, создавать когда надо, удалять — всё это намного гибче, чем написание длинной портянки Arduino кода, когда в итоге всё выполняется по очереди в функции loop.
При использовании FreeRTOS каждый таск выполнится в строго заданное время, лишь бы хватило мощности процессора. Напротив, в Arduino весь код выполняется в одной функции, в одном потоке, если что то притормозило — остальные задачи выполнятся с задержкой. Особенно это заметно при управлении быстрыми процессами, в этом проекте это мигание фонарём и гудки сиреной, будут рассмотрены ниже.