Wi-Fi Метео станція
Чергове радикальне оновлення моєї метеостанції відбулося.
Раніше в мене працювала метеостанція, яку я зробив на базі NETAlarm (я про неї так і не написав). Її задача була досить простою: знімати дані з датчиків атмосферного тиску, вологості і температури і відправляти на сайт. Ця метеостанція досить довго і справно працювала. Та, коли постало питання щодо її подальшого розвитку, з`ясувалося, що у мікроконтролері вже не вистачає пам`яті. Ще одна, досить прикра, особливість - метеостанція повинна одночасно знаходитись у досяжності живлення(220В), комп’ютерної мережі і дротів від датчиків, які знаходяться знадвору. Для того, щоб дотягнути мережу, доводилось використовувати комутатора. До того ж, на час оновлення програмного забезпечення, доводилося її вимикати на тривалий час.
Нова версія метеостанції
Ідея нової метеостанції стала реальною, коли з`явились доступні WiFi модулі ESP8266. За допомогою цього модуля можна підключити до WiFi мережі навіть самого простенького мікроконтролера, обвішаного різноманітними датчиками та виконуючими механізмами. Доступ до такого модуля здійснюється по IP протоколу. Використання ESP8266 розширює можливості розташування датчиків, оскільки тепер немає потреби тягнути інформаційні дроти. Залишаються тільки дроти живлення. Якщо виникає потреба використовувати декілька модулів з датчиками, розташованих на досить великій відстані один від одного, - це теж не проблема.
До того ж автоматично вирішується питання гальванічної розв`язки між датчиком та центральним пристроєм, який збирає показники датчиків. Це дуже актуально, коли постає питання захисту від блискавок та інших перешкод при розташуванні датчиків знадвору на даху будинку, тощо.
Опитування датчиків, попередній аналіз, зберігання та передачу інформації має виконувати мікрокомп’ютер (Raspberry Pi). Ціна мікрокомп’ютерів на сьогодні досить демократична і оскільки мікрокомп`ютер використовується для рішення інших побутових питань, таке технічне рішення цілком виправдане. Мікрокомп’ютер також підключається до комп’ютерної мережі за допомогою WiFi. Тобто його розташування не прив`язане до дротів метеостанції та дротів комп`ютерної мережі. Використання бездротових технологій спрощує розташування датчиків. А використання мікрокомп’ютера робить цю задачу тривіальною та дозволяє в подальшому дуже просто і без зайвих зусиль розширювати функціонал системи.
Як це працює
Модулі датчиків підключаються до WiFi мережі. При надходженні до запиту по IP на відповідний порт, надсилається відповідь. Запит може містити команди на перемикання виконуючих приладів. В нашому випадку модуль з датчиками просто надсилає дані з датчиків.Мікрокомп’ютер періодично опитує модулі датчиків, аналізує дані і виконує необхідні дії. В моєму випадку відправляє дані на сайт.
Схема модуля датчиків
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-сервіса, виводити дані на дисплеї, тощо.
Безпека
У цьому простому прикладі інформацію з WiFi meteo може отримати хто завгодно у локальній бездротовій мережі. Та це не становить загрози. Замислитися про безпеку треба, коли аналогічний модуль керує пристроями. Наприклад, годує рибок чи відкриває вікно для вентиляції. Якщо не подбати про безпеку (домашній WiFi зламати не складно), тоді зловмисник зможе щось учудити. Тому слід подбати про хоч якесь шифрування даних.Успіхів.
Недавні записи
- Text to speech. Українська мова
- LCD Display ST7567S (IIC)
- Розпізнавання мови (Speech recognition)
- Selenium
- Комп'ютерний зір (Computer Vision)
- Деякі думки про точність вимірювань в електроприводі
- Датчики Холла 120/60 градусів
- Модуль драйверів напівмосту IGBT транзисторів
- Драйвер IGBT транзисторів на A316J
- AS5600. Варіант встановлення на BLDC мотор
Tags
docker sensors rtc led timer wifi remap sms css websocket mongodb bme280 rfid bluetooth esp8266 nodemcu bkp piezo bmp280 i2c mpu-6050 encoder examples avr brushless ngnix nvic displays bldc java-script pmsm barometer pwm lcd ethernet stm32 raspberry-pi capture usart gpio exti atmega meteo solar smd dma adc eeprom eb-500 flask python ssd1306 uart options flash mpx4115a html gps st-link 3d-printer servo dc-dc foc git books battery hih-4000 watchdog dht11 web tim programmator ssd1331 mpu-9250 usb rs-232 motor max1674 soldering
Архіви