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 зламати не складно), тоді зловмисник зможе щось учудити. Тому слід подбати про хоч якесь шифрування даних.Успіхів.
Недавні записи
- DShot receiver on STM32
- CRSF to PWM
- U-FOC PC Monitor для Chrome browser
- Фільтрація Back-EMF. Безсенсорні BLDC мотори
- Text to speech. Українська мова
- LCD Display ST7567S (IIC)
- Розпізнавання мови (Speech recognition)
- Selenium
- Комп'ютерний зір (Computer Vision)
- Деякі думки про точність вимірювань в електроприводі
Tags
bldc timer eeprom dht11 soldering stm32 html meteo avr rtc battery hih-4000 foc gps sensors dma mpu-6050 flask nodemcu st-link docker git esp8266 tim bkp eb-500 motor mongodb ssd1306 bluetooth pwm adc sms smd brushless css java-script pmsm rfid displays mpx4115a atmega barometer remap capture servo led web programmator uart 3d-printer encoder examples gpio books websocket wifi i2c watchdog solar usart piezo ngnix ssd1331 options nvic raspberry-pi bme280 usb lcd flash max1674 exti python mpu-9250 dc-dc ethernet bmp280 rs-232
Архіви