Метеостанція або метеодатчик на ESP8266 з передачею даних на APRS-IS або любий сервер

 

 

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

Розглянемо приклад конфігурації безкоштовної прошивки ESP Easy з можливістю передачі даних в на карту APRS. Це метод не є повністю ідеальним та досконалим, але для простих задач підходить, та свою функцію виконує.

Датчик з’єднується по wifi. Якщо в даний момент часу з’єднання відсутнє або не налаштоване, модуль створює власну точку доступу, до якої треба з'єднатись за допомогою мобільного телефону.

Пароль для підключення до АР – configesp

Після підключення до АР модуля потрібно зайти на сторінку в браузері телефону 192.168.4.1 і налаштувати підключення до вашого WIFI.

Введіть SSID (назву) wifi і пароль до нього. Натисніть кнопку SUBMIT

Далі трохи зачекавши ви на телефоні можете знайти ІР адресу, яку отримав модуль в домашній мережі, наприклад 192.168.1.96 (залежить від налаштувань DHCP вашого роутера).

За цією ІР адресою ви можете зайти з браузера скажімо комп'ютера і змінювати налаштування модуля.

Отже у нас вже є готовий модуль з правильно підключеними давачами температури, вологості, тиску і т. д. Для повноцінної підтримки рекомендую прошивати останню версію не обрізаної мега, скажем ESP_Easy_mega_20210114_normal_ESP8266_1M.bin на флеш 1Мб або ESP_Easy_mega_20210114_normal_ESP8266_4M1M.bin на флеш 4Мб розміру.

Прошивки можна завантажити з гітхабу проекту https://github.com/letscontrolit/ESPEasy

Пристрій опитує датчики температури, вологості (у нас DHT11 та DS18), тощо кожні декілька секунд, та оновлює їх значення на сторінці DEVICES. Також ми бачимо системні датчики типу uptime, rssi та останній блок – фіктивний прилад.

Фіктивний прилад (dummy device) не є безпосередньо датчиком, а емулює його та виступає в ролі буферного давача математично розрахованих або перерахованих параметрів. Наприклад у нас є Температура точки роси у °С та темп. Точки роси в °F. а також темепратура в °F.

Такі сервери як APRS, weather underground та інші родом з Британії та США використовують в основі старі британські міри. Також, якщо говорити про ряд інших параметрів, то їх можна подавати та передавати різними мірами — атмосферний тиск в mBar, hPa, дюйми рт. ст. чи привичні нам мм рт.ст.; освітленість в Люксах або Ватах/м квадратний. Швидкість вітру в км/год, м/с, knot, милі за годину, шкалі Бофорта і тп і тд…

Отже вам прийдеться відкрити довідник по перерахунку цих значень, та вписати формули у розділі Rules.

Для цього вписуємо правила з аналогією у моєму прикладі:

 

on DHT11#Temperature do

TaskValueSet,4,1,[DS18#temp]-(100-[DHT11#Humidity])/5

TaskValueSet 4,2,[DS18#temp]*1.8+32

TaskValueSet,4,3,([DS18#temp]-(100-[DHT11#Humidity])/5)*1.8+32

endon

 

Вданому випадку при кожній зміні (опитувані) датчика DHT11 (стовпчик name вкладки пристрої) значення температури (стовпчик values) будуть виконуватись:

Встановити значення 4,1 – фіктивний пристрій (task 4, рядок 1 вкладки  пристрої ) перший параметр dewpc (точка роси в °С згідно формули: ТЕМЕРАТУРА <датчик DS18 параметр temp> – (100– ВОЛОГІСТЬ <DHT11#Humidity> )/5

Або, в нашому випаду, точка роси = 19,3-(100-72)/5=-5,6°С

 

Два наступні рядки це перерахунок в Фаренгейти і точку роси в Фаренгейтах та записують у 4,2, та 4,3.

 

Після успішного та уважного налаштування перевірте правильність усіх показів.

 

Наступним кроком буде встановлення правила передачі даних на сервери. Вписуємо в 2 вкладці правил наступне:

 

On System#Boot do    //When the ESP boots, do

  timerSet,1,10     //Set Timer 1 for the next event in 10 seconds

endon

 

On Rules#Timer=1 do  //When Timer1 expires, do

  SendToHTTP narodmon.com,80,/get?ID=ESP******ESPEASY&T1=[DHT11#Temperature]&H1=[DHT11#Humidity]&T2=[DS18#temp]&RSSI=[info#rssi]&UPT=[info#uptime]&DEWP=[math#dewpc]

  SendToHTTP flash.denied.org.ua,80,/updateweatherstation.php?ID=UR4PXH&PASSWORD=ESP*****&dateutc=now&tempc=[DS18#temp]&humidity=[DHT11#Humidity]&indoortempc=[DHT11#Temperature]&dewptc=[math#dewpc]&rssi=[info#rssi]&uptime=[info#uptime]

  SendToUDP 89.185.8.55,8080,"user UR3PDA pass ***** vers ESPEasyWX%LF%UR4PXH-13>APRS,TCPIP*:!5111.49N/02333.50E_.../...g...t[math#tempf#D3]r...p...P...h[DHT11#Humidity] ESPEasyWX by UR3PDA"

  SendToHTTP weatherstation.wunderground.com,80,/weatherstation/updateweatherstation.php?ID=INOVOV3&PASSWORD=********&dateutc=now&tempf=

timerSet,1,361      //Resets the Timer 1 for another 360 seconds

endon

 

Розглянемо рядки SendTo.

1.       Перший рядок передає дані на сервер narodmon. Принцип підстановки даних замість символічних посилань типу [DHT11#Temperature] тут теж працює. Вам слід придумати власний унікальний ID і вписати його замість ESP******ESPEASY.

2.       Другий рядок передає покази на мій власний сервер по протоколу weather underground. На сервері лежить скрипт, який конвертує отримані дані в JSON файл для подальшої обробки та використання https://github.com/ccgruber/updateweatherstation/blob/master/updateweatherstation.php В даному випадку вам слід вивчити які дані можна перекинути скриптом, та всисати свої  будь-які ID та пароль.

 

{"ID":"UR4PXH","PASSWORD":"ESP","dateutc":"2021-02-04T13:36:31Z","tempc":"0.4","humidity":"70","indoortempc":"4","dewptc":"-5.6","rssi":"-72","uptime":"4199","baromhpa":0,"absbaromhpa":0}

 

3.       Саме цікаве – передача в APRS мережу. Тут використовується UDP протокол з портом 8080. UR3PDA замінюєте на ваш позивний а пароль ***** - це ваш так званий passcode. Координати 5111.49N/02333.50E  замінюєте на свої, відповідно до формату сервера (можна визначити через google maps у форматі цілих градусів мінут та секунд, не десяткові!!) Далі йде пакет у вигляді WX звіту згідно специфікації APRS. УВАГ. Для правильної обробки даних відкрийте специфікацію! В пакеті має бути чітке представлення одиниць та кількість значущих цифр в числі. Скажем температура подається як 031 градус фаренгейта а не 31. Також є ряд інших нюансів. Ці нюанси не дозволяють повноцінно реалізувати правильну передачу показів. В даному випадку для передачі температури слід використовувати форматування чисел #D3 - t[math#tempf#D3] що означає передачу температури трьома цифрами у числі. Оскільки така подача буде працювати лише при додатніх значеннях, то правильна пеердача буде лише від температури 000 градусів Фаренгейта (-17,77 °С). при від’ємних наченнях Фаренгейта -001 наприклад уже не підходить, на потрібно дві значущі цифри та символ -. Будь ласка вивчіть http://aprs.org/doc/APRS101.PDF сторінка 62 і далі. Те ж саме стосується інших величин, зокрема атмосферного тиску, освітленості… Іншою проблемою також є неможливість пеердачі дробних значень. Всі значення повинні бути цілі ! це також можна зробити тут шляхом форматування значення, АБО в розділі Devices, для цього в настройках слід вказати скільки використовувати цифр після коми. Можна просто в самому датчику зробити виведення цілого числа. Якщо у вас немає атмосферного тиску чи швидкості вітру як у мене – передавате крапки замість чисел. Не слід укорочувати пакет шляхом видалення цих частин, так як це призведе до неправильної його обробки. ESPEasyWX by UR3PDA – це коментар. Якщо у вас є датчики які не підтримуються пакетом, скажем дачик газу чи пилу, його слід передавати телеметрією. В даному прикладі це не показано, але суть буде аналогічна, хоч і ще складніша.

4.       І заключне четверте правило – передача на сервер https://www.wunderground.com . Ви можете зареєструватись на їхньому сайті, створити пристрій у своєму регіоні, а ID та пароль замінити на свої в рядку.

 

Будь який з цих рядків можна видалити за непотрібності. Передача даних на сервери проводиться кожні 6 хвилин (360 сек). Я не рекомендую зменшувати цей інтервал, оскільки сервери будуть блокувати ваш пристрій за флуд та надмірну передачу. Краще навіть збільшити цей інтервал до 10 або 15 хвилин, такої точності буде достатньо.

 

РЕКОМЕНДАЦІЇ ПО ВСТАНОВЛЕННЮ МЕТЕОДАТЧИКА

Датчик слід встановити з північної сторони будівлі або в тіні. Ідеально уникати стін та дахів споруди, які прогріваються на сонці. Рекомендується вибрати провітрюване місце та там, де менше опадів (якесь накриття, під дашок), оскільки при сильних зливах є ризик залити датчик.

Встановлений над дахом чи біля стіни в сонячну погоду буде завищувати покази на 2-3°. Встановлений на сонці може завищувати на 5-10°.

Якщо не можливо встановити з північної сторони, надайте перевагу східній стороні. Якщо не обійтись без стін, то постарайтесь віддалити від стіни на 0,5м чи більше.

Уникайте довгих та високих ліній живлення. Статичні заряди під час грози можуть пошкодити пристрій, або призводити до зависання.