Wi-Fi Метео станція


30.06.2015

Чергове радикальне оновлення моєї метеостанції відбулося.

OLD_meteo

Раніше в мене працювала метеостанція, яку я зробив на базі NETAlarm (я про неї так і не написав). Її задача була досить простою: знімати дані з датчиків атмосферного тиску, вологості і температури і відправляти на сайт. Ця метеостанція досить довго і справно працювала. Та, коли постало питання щодо її подальшого розвитку, з`ясувалося, що у мікроконтролері вже не вистачає пам`яті. Ще одна, досить прикра, особливість - метеостанція повинна одночасно знаходитись у досяжності живлення(220В), комп’ютерної мережі і дротів від датчиків, які знаходяться знадвору. Для того, щоб дотягнути мережу, доводилось використовувати комутатора. До того ж, на час оновлення програмного забезпечення, доводилося її вимикати на тривалий час.

Нова версія метеостанції

WiFi_meteo

Ідея нової метеостанції стала реальною, коли з`явились доступні WiFi модулі ESP8266. За допомогою цього модуля можна підключити до WiFi мережі навіть самого простенького мікроконтролера, обвішаного різноманітними датчиками та виконуючими механізмами. Доступ до такого модуля здійснюється по IP протоколу. Використання ESP8266 розширює можливості розташування датчиків, оскільки тепер немає потреби тягнути інформаційні дроти. Залишаються тільки дроти живлення. Якщо виникає потреба використовувати декілька модулів з датчиками, розташованих на досить великій відстані один від одного, - це теж не проблема.

До того ж автоматично вирішується питання гальванічної розв`язки між датчиком та центральним пристроєм, який збирає показники датчиків. Це дуже актуально, коли постає питання захисту від блискавок та інших перешкод при розташуванні датчиків знадвору на даху будинку, тощо.

Опитування датчиків, попередній аналіз, зберігання та передачу інформації має виконувати мікрокомп’ютер (Raspberry Pi). Ціна мікрокомп’ютерів на сьогодні досить демократична і оскільки мікрокомп`ютер використовується для рішення інших побутових питань, таке технічне рішення цілком виправдане. Мікрокомп’ютер також підключається до комп’ютерної мережі за допомогою WiFi. Тобто його розташування не прив`язане до дротів метеостанції та дротів комп`ютерної мережі. Використання бездротових технологій спрощує розташування датчиків. А використання мікрокомп’ютера робить цю задачу тривіальною та дозволяє в подальшому дуже просто і без зайвих зусиль розширювати функціонал системи.

Як це працює

Модулі датчиків підключаються до WiFi мережі. При надходженні до запиту по IP на відповідний порт, надсилається відповідь. Запит може містити команди на перемикання виконуючих приладів. В нашому випадку модуль з датчиками просто надсилає дані з датчиків.

Мікрокомп’ютер періодично опитує модулі датчиків, аналізує дані і виконує необхідні дії. В моєму випадку відправляє дані на сайт.

Схема модуля датчиків

circuit

P.S. В схему був добавлений кварц частотою 8 Мгц. Без кварцу схема працювала не стабільно і при перепаді температури інколи некоректно працювала з модулем ESP8266.

Прошивка

Програма для мікроконтролера написана на основі прикладу у статті WiFi модуль ESP8266

При надходженні запиту (любого символу) на порт 88, надсилається відповідь у наступному форматі: P:<тиск>:T:<температура>:H:<вологість повітря>:L:<датчик освітлення>

Приклад можна скачати тут: WiFiMeteo.zip

P.S. У прошивку про всяк випадок добавлена функція перезавантаження мікроконтролера для повторної ініціалізації модулю ESP8266.  Перезавантаження виконується раз на хвилину. Це не обов`язково і було зроблено, коли у схемі не було кварца і зв`язок з модулем ESP8266 інколи глючив через нестабільну частоту мікроконтролера.

Налаштування модуля датчиків та WiFi роутера

Модуль датчиків зроблений таким чином, щоб модуль ESP8266 можна було від’єднати для налаштування. Отже підключаємо ESP8266 до UART-USB перехідника і підключаємо до вашої Wi-Fi мережі (подробиці дивись у статті: WiFi модуль ESP8266). ESP8266 запам`ятає це з’єднання. Тепер вставимо ESP8266 до нашого модуля датчиків і вмикаємо. Модуль підключиться до WiFi мережі. IP адресу йому видасть WiFi роутер. Для того, щоб DHCP сервер завжди видавав одну і ту ж адресу, в налаштуваннях роутера треба "закріпити" IP адресу за MAC адресою модуля ESP8266. У різних моделях роутерів з різними прошивками це робиться по-різному. Тому, як це робити на вашому пристрої, шукайте у Інтернеті.

Налаштування мікрокомп’ютера Raspberry Pi

Тепер, з любого комп’ютера можна отримати інформацію з модулю датчиків, наприклад командою:

telnet <IP> <порт>

або:

wget http://<IP>:<порт>

Я використовую мікрокомп’ютер Raspberry Pi з операційною системою Raspbian. Нас цікавить, як можна отримати інформацію скриптом, розібрати її, обробити та передати далі. Приклад скрипта wifi_weather.py:



import urllib2
import time

counter=0
result=0

# Get data from WiFi meteo
while (result==0):
        try:
                response = urllib2.urlopen(`http://192.168.1.127:88`)
                result=1
        except Exception as e:
                counter+=1;
                if (counter > 3):
                        print "Oops!"
                        quit()
                time.sleep(1)
# Parse data
html = response.read()
value = html.split(":")
s=value[1]+":"+str(int(value[3])/10)+":0:"+value[5].strip()+":"

# Send To site
response = urllib2.urlopen("http://mysite.com.ua/getdata.php?data="+s)

Дописуємо рядок у /etc/crontab : */15    *       *       *       *       root    /usr/bin/python /home/pi/scripts/wifi_weather.py

Тепер скрипт буде запускатися кожні 15 хвилин.

Наведений скрипт виконує прості операції: отримання інформації, її розбір, формування http-запиту на web-сервер, відправка даних. Ви можете доопрацювати скрипта і записувати дані на мікрокомп’ютері, наприклад, у базу даних - на випадок, якщо тимчасово відсутній зв`язок з отримувачем, створити свого web-сервіса, виводити дані на дисплеї, тощо.

IMG_5413 IMG_5411 IMG_5410 IMG_6465 IMG_6466 IMG_6469

Безпека

У цьому простому прикладі інформацію з WiFi meteo може отримати хто завгодно у локальній бездротовій мережі. Та це не становить загрози. Замислитися про безпеку треба, коли аналогічний модуль керує пристроями. Наприклад, годує рибок чи відкриває вікно для вентиляції. Якщо не подбати про безпеку (домашній WiFi зламати не складно), тоді зловмисник зможе щось учудити. Тому слід подбати про хоч якесь шифрування даних.

Успіхів.

Raspberry Pi Схеми і прошивки
Коментарі:
Додати коментар
Code
* - обов'язкові поля

Архіви