Czym jest IoT? Z pewnością większość z Was zna to pojęcie: “Internet Rzeczy” (Internet of Things). W dużym skrócie to: czujniki, sensory, detektory lub ogólnie urządzenia tworzące środowisko zbierające i przetwarzające (często!) mnóstwo informacji oraz komunikujące się między sobą bez ingerencji człowieka. Czy jest jakiś sposób, aby połączyć ze sobą dwa światy: CCTV i IoT – inaczej kamery i sensory? Oczywiście! Zapraszam do lektury nowego wpisu!
What is IoT? Probably most of you know this term very well: it’s “Internet of Things”. In short: sensors, detectors or in general smart devices that create an environment that collects and processes (often!) a lot of information and communicates with each other without human interference. Is there any way to connect two worlds: CCTV and IoT – cameras and sensors? Of course! I invite you to read my new post!
English version below.
Aby nieco bardziej zagmatwać temat: tak naprawdę kamery to też pewnego rodzaju czujniki i mogą one należeć do świata IoT. A więc o co tu chodzi?! Najważniejsze: pamiętajcie czym jest kamera – jest to żródło informacji WIZYJNEJ – a więc przetwarzając w odpowiedni sposób informację z tych urządzeń możemy uzyskać odpowiednie/interesujące dla nas dane. Prywatnie zawsze powtarzam, że kamery to niejako “oczy” systemów IoT 🙂 Dlaczego zatem zamierzam “miksować” te systemy? Po to, aby były bardziej funkcjonalne i mogły wnieść potrzebne/ciekawe żródło informacji dla np. operatora lub na potrzeby nagrań i późniejszej analizy.
Podany poniżej przykład to tylko wstęp/zaczątek tego co można zrobić na bazie tego co prezentuje. Ogranicza nas tylko wyobraźnia i… liczba sensorów. Niebawem rozwinę opis o kolejne czujniki oraz przesyłanie danych przez LAN, ale zacznijmy od początku.
Na wstępie zaznaczam, że nie będę opisywał zupełnych podstaw: każdy z Was może/powinien odnaleźć mnóstwo informacji na temat obsługi ESP8266, pracy z Arduino IDE, itp. – postaram się tutaj ograniczyć do naprawdę skrótowych opisów.
Do rzeczy:
Proponowane rozwiązanie opiera się na wysyłaniu informacji z czujników temperatury (tutaj: DS18B20) poprzez interfejs RS-232 i nanoszeniu jej w formie tekstowej bezpośrednio na obraz z kamery (opcja POS). Rozwiązanie bazujące na POS można znaleźć w jednym z moich wcześniejszych wpisów.
Korzyści z takiego rozwiązania:
- niska cena – wszystkie elementy (poza oczywiście NVR czy kamerą) to max. koszt ok. 40-50 zł
- możliwość natychmiastowej obserwacji zmian np. sensorów temperatury: powietrza, cieczy, obiektów, etc. – zarówno w trybie na żywo jak i przy wykorzystaniu odtwarzania przy jednoczesnym nadzorze wizyjnym (w tym przypadku najtańsza opcja w porównaniu do kamery termowizyjnej 🙂
- istnieje możliwość wykorzystania innych sensorów i naniesienie wyników ich pomiarów na ekran/nagranie
- wyszukiwanie nagrań po określonym parametrze (proszę pamiętać, że naniesione dane są wartościami tekstowymi i możliwe jest przeszukiwanie informacji jak zwykłego tekstu)
Co potrzebujemy – przykładowa lista:
- ESP8266 – polecam świetne rozwiązanie bazujące na płytce NodeMCU v3
- Konwerter RS232-TTL
- Czujnik temperatury – najprostszy, a zarazem wystarczająco precyzyjny: 1-wire DS18B20
- Rejestrator z opcją POS/portem RS-232 (np. Hikvision seria 7700) – thanks Inter-Comp.pl for sample!
Opis połączeń:
- Konwerter RS232-TTL <-> NodeMCU (PIN: RX/TX/GND/VIN-5V)
- 1-wire DS18B20 (rezystor podciągający 4.7kOhm pomiędzy pinem zasilania a danymi DQ) <-> NodeMCU (PIN: 3.3V/GND/D4)
- Konwerter RS232-TTL <-> NVR Hikvision – połączenie szeregowe: kabel RS-232 (możliwość przedłużenia linii z wykorzystaniem skrętki)
Software:
Głównie NodeMCU (czyli nasz ESP8266). Tutaj w grę wchodzi dogranie czy też załadowanie programu do pamięci urządzenia (polecam Arduino IDE). Kod poniżej – prosta wersja (nie zawiera konfiguracji WiFi), naturalnie zachęcam do modyfikacji i dostosowania do swoich potrzeb.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#include <OneWire.h> #include <DallasTemperature.h> const int oneWireBus = 2; //czujnik DS18B20 podłączamy do D4 OneWire oneWire(oneWireBus); DallasTemperature sensors (&oneWire); void setup() { //Ustawiamy prędkość portu szeregowego Serial.begin(9600); sensors.begin(); } void loop() { //Odczyt temperatury sensors.requestTemperatures(); //Odczyt w stopniach celsjusza float temperatureC = sensors.getTempCByIndex(0); //Odczyt w stopniach Farenheita float temperatureF = sensors.getTempFByIndex(0); //Wypisanie danych do konwertera szeregowego RS-TTL Serial.print("Zmierzona temperatura: "); Serial.print(temperatureC); Serial.println("°C"); Serial.print("Current temperature: "); Serial.print(temperatureF); Serial.println("°F"); //Odczyt temperatury co 1 sekunde delay(1000); } |
Na koniec konfiguracja rejestratora (aktywowanie opcji POS na rejestratorze) – dokładne ustawienia można znaleźć na poniższej prezentacji praktycznego działania całego rozwiązania:
Baner stworzony przez moją córkę – All Rights Reserved 🙂
English version
To make this topic more complicated: IP camera is a kind of sensor and can be a part of IoT world! So what’s going on here?! Note: output from the cameras is a source of VISUAL information – so by properly processing information from these devices, we can obtain relevant / interesting data for us. Personally I always say that cameras are the “eyes” of IoT systems 🙂 So why am I going to “mix” these systems? The reason is very simple: make them more functional to bring a needed / interesting source of information for e.g. the operator or for the purposes of recordings and further analysis.
The example given below is only an introduction / baseline of what can be done based on this project. We are limited only by our imagination (sky is the limit 🙂 and … the number of sensors. Soon I will expand the description with more sensors and data transfer via LAN, but let’s start from the beginning.
At the beginning, I would like to emphesize that I will try to avoid complete basics: each of you can / should find a lot of information on how to use ESP8266, work with the Arduino IDE, etc. – I will try to limit this to really short descriptions.
To the point:
Solution is based on sending information from temperature sensors (here: DS18B20) via the RS-232 interface and applying it in text form directly to the image from the camera (POS option). You can find a POS based solution in one of my previous posts.
Advantages:
- low price – all parts (of course except NVR or the camera) are max. 10 EURO
- possibility of immediate changes observation of , e.g. temperature sensors: air, liquid, objects, etc. – both: in live mode and with the use of playback (this is the cheapest option compared to a thermal camera 🙂
- it is possible to use other sensors and also transfer the results directly to the screen
- search for recordings by a specific parameter (please note that the data are the text values and it is possible to search the information as in plain text)
What we need – examples:
- ESP8266 – fully recomend project based on NodeMCU v3
- Converter RS232-TTL
- Temperature sensor – simple but enough acuratelly: 1-wire DS18B20
- NVR with POS option (port RS-232) – e.g. Hikvision series 7700) – thanks Inter-Comp.pl for sample!
Connections:
- Converter RS232-TTL <-> NodeMCU (PIN: RX/TX/GND/VIN-5V)
- 1-wire DS18B20 (pull-up resistor 4.7kOhm between PLUS and Data PIN) <-> NodeMCU (PIN: 3.3V/GND/D4)
- Converter RS232-TTL <-> NVR Hikvision – serial connection: RS-232 cable (possibility to extend the line using a twisted pair)
Software:
Mainly NodeMCU (which is our ESP8266). In short: you need to load program to the device memory (I recommend Arduino IDE). Below code is a realy simple version (does not include WiFi configuration) and I encourage you to modify and adapt to your needs.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#include <OneWire.h> #include <DallasTemperature.h> const int oneWireBus = 2; // sensor DS18B20 connecting to D4 OneWire oneWire(oneWireBus); DallasTemperature sensors (&oneWire); void setup() { //Set serial port speed Serial.begin(9600); sensors.begin(); } void loop() { //Temp measure sensors.requestTemperatures(); //Celc float temperatureC = sensors.getTempCByIndex(0); //Odczyt w stopniach Farenheita float temperatureF = sensors.getTempFByIndex(0); //Wypisanie danych do konwertera szeregowego RS-TTL Serial.print("Zmierzona temperatura: "); Serial.print(temperatureC); Serial.println("°C"); Serial.print("Current temperature: "); Serial.print(temperatureF); Serial.println("°F"); //Odczyt temperatury co 1 sekunde delay(1000); } |
Last but not least: configuration of NVR (POS activation) – the exact settings can be found in the following presentation (entire solution in practice).
Banner created by my daughter – All Rights Reserved 🙂