Метеостанція на ESP8266


08.11.2017

Метеостанція зібрана на базі модуля ESP8266. Працює через WiFi, має web-інтерфейс, дисплей і можливість надсилати дані у мережу Інтернет. Реалізована можливість публікувати погодні графіки і інформаційні блоки на власному сайті або використовувати службу thingsspeak.com. Все це можна зробити своїми руками всього за один вечір із загальнодоступних модулів.

Можливості метеостанції

  • Датчик BME280 дозволяє вимірювати температуру, атмосферний тиск і відносну вологість повітря
  • Накопичує дані за останні кілька днів, показує дані у вигляді графіків на Web-інтерфейсі
  • Дисплей для перегляду поточної температури, тиску і вологості
  • Метеостанція підключається до домашнього WiFi. Перегляд даних на метеостанції можливий з будь-якого персонального комп`ютера, або мобільного пристрою, підключеного до домашньої мережі WiFi
  • Метеостанція може публікувати дані у мережі Інтернет (надсилати дані на власний сайт або thingspeak.com)
  • Web інтерфейс для налаштування метеостанції і перегляду погодних даних. Для налаштування метеостанції, за для безпеки, використовується власна WiFi точка доступу
Посилання для завантаження файлів необхідних для відтворення метеостанції: https://github.com/avislab/NodeMCUExamples/tree/master/WeatherStation Приклад використання thingspeak.com: https://thingspeak.com/channels/260722

Необхідні компоненти

  • модуль ESP-12 (плата NodeMCU v3) (можливо використовувати ESP-01 з Flash пам`яттю об’ємом 4 Мб)
  • датчик BME280
  • дисплей SSD1306 з інтерфейсом I2C
  • система живлення

Схема метеостанції

Схема для ESP-12. Живлення від спеціальної плати: Схема для ESP-12. Живлення через USB шнур від плати модуля ESP12: Схема для модернізованого ESP-01 (4 Мб Flash): Примітка: * Для модуля ESP-01 потрібно замінити файл meteo_main.lua файлом з директорії: https://github.com/avislab/NodeMCUExamples/tree/master/WeatherStation/esp-01-files * У цій схемі використовується модернізований модуль ESP-01 з пам`яттю 4Мб. Модуль з пам`яттю 512Кб не підходить. Як модернізувати модуль ESP-01 я розповідав тут: ESP-01 (ESP8266) upgrade flash memory to 4MB

Програмне забезпечення

Програмне забезпечення розроблене для Framework NodeMCU на мові програмування LUA. Код доступний у відкритому вигляді. Зкачати можна тут: https://github.com/avislab/NodeMCUExamples/tree/master/WeatherStation Спочатку потрібно завантажити у ESP модуль Framework NodeMCU з потрібними модулями. Зкачати його можна тут: https://github.com/avislab/NodeMCUExamples/tree/master/WeatherStation/firmware). Завантажити можна за допомогою ESP8266Flasher.exe або esptool Команда для завантаження з допомогою esptool:

 sudo python esptool.py --port COM10 write_flash 0x0 nodemcu-meteo.bin 0x3fc000 esp_init_data_default.bin
Потім зкачати і закачати в файлову систему NodeMCU всі файли з цієї директорії: https://github.com/avislab/NodeMCUExamples/tree/master/WeatherStation/esp-12-files завантажити можна за допомогою ESPlorer або nodemcu-uploader. Команда для завантаження за допомогою nodemcu-uploader:

sudo python nodemcu-uploader.py --port COM10 upload *
Після перезавантаження метеостанція готова до роботи.

Налаштування метеостанції

Після ввімкнення метеостанції виконується пауза 10 секунд, після чого на дисплеї повинна з’явитися інформація з поточними погодними даними. Модуль налаштовує Wi-Fi точку з ім`ям Meteostation та паролем 1234567890 (в налаштуваннях можна змінити). Саме через підключення до цієї точки і виконується налаштування метеостанції. Це робиться з метою безпеки. Підключіться до цієї Wi-Fi точки і за допомогою браузера зайдіть за наступним посиланням: http://192.168.4.1/ Ви повинні побачити наступну форму налаштувань: Примітка: * Внутрішня Wi-Fi точка для налаштування вимикається через 5 хвилин після увімкнення живлення метеостанції. Вважається, що 5 хвилин достатньо для виконання всіх налаштувань.

Опис налаштувань

Wi-Fi Options

SSID — домашня мережа Wi-Fi до якої метеостанція має підключатися для комунікації із зовнішнім світом. Password - пароль домашньої мережі Wi-Fi.

Own Wi-Fi AP

SSID — власний Wi-Fi який метеостанція створює самостійно для доступу до її налаштувань. Password - пароль до власної Wi-Fi. Примітка: * Wi-Fi для налаштування вмикається після подачі живлення і вимикається через 5 хвилин. Вважається, що 5 хвилин достатньо для того, щоб зробити всі необхідні налаштування.

Cron

Mask - маска планувальника завдань. Задає період збереження даних і надсилання даних у мережу Інтернет. За замовчуванням це виконується кожні 15 хвилин. Як налаштовується маска Cron можна прочитати тут: https://en.wikipedia.org/wiki/Cron#Overview

Data storage

Filename - Ім`я файлу в якому зберігається інформація про погоду (при необхідності файл можна завантажити з метеостанції за посиланням вигляду: http://IP/filename, наприклад, http://192.168.0.100/log.txt). Max File size - Максимальний розмір файлу при досягненні якого запускається процедура зменшення його розміру (видаляються старі дані). Store last lines when file reduce - Кількість записів (рядків) у файлі, яку процедура зменшення розміру файлу залишить. Інші, старіші записи, будуть видалені.

Send to Web

URL - Посилання для надсилання даних на свій сайт. (Див. Відправлення даних на сайт) ID - ідентифікатор пристрою, що відправляє дані (встановлюється довільно). Якщо у майбутньому передбачається відправляти дані з декількох пристроїв, за ідентифікатором можна буде дізнатися від якого саме пристрою були отримані дані. Key - Ключ для ідентифікації (запобігає підміні даних). Цим ключем шифрується частина даних, яка після отримання перевіряється на сайті з використанням такого ж ключа. Queue filename - Файл черги. Використовується для зберігання даних в черзі у разі виникнення тимчасових проблем під час надсилання даних на сайт. Дані з черги будуть відправлені після відновлення зв`язку. Це запобігає втраті даних. Enable / Disable - вмикає або вимикає надсилання даних на сайт.

Send to thingsspeak.com

thingsspeak.com - служба яка надає можливість (безкоштовно, якщо даних небагато) зберігати і аналізувати дані отримані з будь-яких пристроїв або сервісів. Є можливість побудови графіків і багато іншого. З моменту як я його почав використовувати цей сервіс трохи розширив свій функціонал. Описувати детально не буду, заходите і дивіться самі. Для того щоб Ви змогли користуватися послугою thingsspeak.com потрібно пройти процедуру реєстрації. Server name - сервер thingshspeak.com на який надсилаються дані. API Key - Write API Key який видає thingsspeak.com. Без нього надсилання даних не відбудеться. Enable / Disable - вмикає або вимикає надсилання даних на сайт thingshspeak.com.

Як працює метеостанція

Старт

Відразу після старту виконується скрипт init.lua Скрипт виконує паузу тривалістю 10 секунд після чого запускає скрипт meteo_main.lua. Цей скрипт виконує стартові налаштування. А саме ініціалізацію налаштувань, WiFi, шини I2C, датчика BME280, дисплея SSD1306, налаштовує і запускає таймер опитування датчика, налаштовує планувальник для збереження і надсилання даних в Інтернет, запускає web-інтерфейс, запускає синхронізацію часу через Інтернет.

Опитування датчика, робота дисплея

За таймером раз на 10 секунд запускається скрипт для опитування датчика BME280_read.lua і скрипт для відображення даних на дисплеї display_show.lua

Збереження даних, формування Json файлів для графіків, надсилання даних на сайт

Згідно налаштувань планувальника (за замовчуванням один раз на 15 хвилин) запускається скрипт schedule.lua. Скрипт опитує датчик і зберігає дані у файл - сховище (за замовчуванням - log.txt), відправляє дані в Інтернет (якщо ввімкнено у налаштуваннях) і запускає формування JSON файлів, які містять дані для графіків. Примітка: збереження даних і надсилання у Інтернет відбувається лише після синхронізації часу.

Відправлення даних на сайт. Налаштування для надсилання даних на сайт

Якщо Ви бажаєте щоб інформація про погоду публікувалася на Вашому сайті, потрібно налаштувати надсилання даних на сайт. Перш за все потрібно закачати на сайт скрипт, який буде приймати дані. В директорії https://github.com/avislab/NodeMCUExamples/tree/master/WeatherStation/website знаходиться файл meteo.php, який реалізує необхідний функціонал. Перш ніж заливати скрипт на сайт відкрийте його і відредагуйте $key. Ключ обов`язково має бути довжиною 16 символів і складатися з літер та цифр. Такий самий ключ потрібно буде вказати в налаштуваннях метеостанції. При необхідності змініть інші налаштування. Тепер можна закачати скрипт на сайт. Після чого в налаштуваннях метеостанції у розділі Send to Web вкажіть шлях до скрипту, ключ і ввімкніть надсилання даних на сайт (Enable). Збережіть налаштування метеостанції і перезавантажте її. Дані будуть відправлятися на сайт з періодичністю згідно налаштувань Cron. За замовчуванням скрипт meteo.php зберігає дані в файл meteo.txt.

Відображення даних на сайті

Приклад відображення погодних даних знаходяться у файлах insex.html, weather.js, date.format.js. Погодні дані можуть відображатися у вигляді інформера або у вигляді графіків.

Контейнер для датчика

На період випробувань датчик був виставлений за вікно у поліетиленовому пакетику :). Потім для нього був зроблений контейнер з підручних матеріалів. У кришку пластикової банки вклеєні магніти. Вони потрібні для закріплення контейнера на металевому відливу за вікном. У самій банці вирізані вентиляційні отвори. Для захисту від опадів вся ця конструкція накривається пластиковим циліндром трохи більшого діаметру. Таким чином, датчик захищений від опадів, прямих сонячних променів і при цьому не погано вентилюється. Посилання для завантаження необхідних даних: https://github.com/avislab/NodeMCUExamples/tree/master/WeatherStation Ця проста метеостанція зроблена як приклад до статей присвячених ESP8266 та NodeMCU. Усі програми доступні у відкритому вигляді. Ви можете зкачати та модифікувати їх на свій розсуд. У цьому прикладі продемонстровані різні можливості ESP8266 та використані різні модулі та функції Framework NodeMCU. А саме робота з датчиком та дисплеем по шині I2C, WEB інтерфейс побудований на використанні TCP сервера, робота з налаштуваннями, яка базується на використанні файлової системи NodeMCU, робота з WiFi у режимі кліента та у режимі точки доступу, робота з таймерами, планувальником задач Cron, протоколом синхронизації часу через Інтернет NTP, реалізована передача даних за допомогою http клієнта, та через TCP підключення з використанням модуля NET. Продемонстровані початкові прийоми побудови Web додатків та методи комунікації Ваших саморобних пристроїв зі зовнішнім світом через мережу Інтернет. Бажаю успіхів. UPD: 30.11.2017. Додана можливість відключити дисплей. Виправлені помилки.

Дивись також:

ESP8266
Коментарі:
Дмитрий говорить:
18.11.2017 21:45
Правильно ли я понимаю, что файл nodemcu-meteo.bin нужно залить по адресу 0x00000, а файл esp_init_data_default.bin по адресу 0x3FC000 установив соответствующие адреса в закладке "Config" программы ESP8266Flasher?

andre говорить:
18.11.2017 22:23
Да, все в соответствии с документацией: https://nodemcu.readthedocs.io/en/master/en/flash/
ОБРАТИТЕ ВНИМАНИЕ, что 0x3FC000 - это адрес для модулей с 4 MB Flash (ESP-12). Вот полный список из документации:

0x7c000 for 512 kB, modules like most ESP-01, -03, -07 etc.
0xfc000 for 1 MB, modules like ESP8285, PSF-A85, some ESP-01, -03 etc.
0x1fc000 for 2 MB
0x3fc000 for 4 MB, modules like ESP-12E, NodeMCU devkit 1.0, WeMos D1 mini
0x7fc000 for 8 MB
0xffc000 for 16 MB, modules like WeMos D1 mini pro

Дмитрий говорить:
19.11.2017 22:19
Ок, спасибо, идем дальше.

1. Прошивку залил
2. Закачал в файловую систему NodeMCU все файли из директорії .../WeatherStation/esp-12-files

После перезагрузки появилась сеть MeteoStation, запросила пароль и .... почему-то не получается к ней подключиться.

andre говорить:
19.11.2017 22:48
Не получается подключиться к самой сети MeteoStation? или когда пытаетесь зайти браузером ?

Дмитрий говорить:
19.11.2017 23:16
Не получается подключиться к самой сети MeteoStation.

Дмитрий говорить:
21.11.2017 12:32
Попробовал сегодня залить все заново в новый модуль ESP -12. Результат тот-же, а именно сетка MeteoStation появляется, при попытку подключиться к ней запрашивается пароль, после чего комп пытается подключиться к сети и не подключается. Время от времени появляется такая надпись в панели "Сеть" на MacOS --> "Wi-Fi не має IP-адреси, а тому не може під’єднатися до Інтернету."

Спустя какое-то время, комп подключился к сети MeteoStation и в панели "Сеть" появилась такая надпись - "Wi-Fi під’єднаний до MeteoStation і має IP-адресу 192.168.4.2." Тем не менее, зайти по адресу 192.168.4.1 не получается. Пробовал зайти по 192.168.4.2, тоже не получается. К слову, 192.168.4.1 даже не пингуется, в отличии от 192.168.4.2 к которому ping доходит.

andre говорить:
21.11.2017 21:24
Могу предположить, что питание модуля слабоватое и Wifi постоянно отваливается. У меня такое было пока не стал использовать более мощный блок питания.

Александр говорить:
27.11.2017 10:20
nodemcu-meteo.bin - залить по адресу 0x00000
esp_init_data_default.bin - по адресу 0x3FC000
загрузил все файлы из /WeatherStation/esp-12-files (кстати, ошибка загрузки файла log.txt)
включил - появилась сеть - пароль что вы написали, подключился.
Пинги на esp - 5 штук есть, 2 нет - в мониторе порта писалось что-то об ошибке api
Пробовал на nodemcu (12e - 4мБайта) и на wittycloud (4мБайта)
На страницу таки зайти удалось (на esp), указываю точку доступа, остальные настройки не трогаю - что-то написало о не всех заполненных полях - и дальше никак.
Проект очень похож по оформлению на распбери такой был, в Вашем испонении - все просто и красиво, его я повторил без проблем.
(еще единственное - экрана у меня нет, может в этом загвоздка?!?)
???

andre говорить:
27.11.2017 13:58
Добрый день. Загвоздка именно в отсутствии дисплея. Скрипт пытается отправлять на дисплей информацию и не может... Я буду у себя убирать дисплей (он мне не особо нужен) и переделывать, чтобы была опция в настройках (есть/нет дисплей). Буквально через пару дней будет обновление.

Ал говорить:
29.11.2017 18:26
Сегодня залил снова (подсмотрел на гитхабе что обновили).
Все файлы залились ( лог.тхт уже нормально влился). Но...
Снова не могу вписать свою точку доступа, меняю сид и пароль - ошибка
One or more parameters(wifi_ssid)is wrong. Please check form fields.
И так и пробовал в файле прописать точку- никак ( кроме точки доступа и отключения дисплея- ничего не менял в настройках)
Лог с есплорера
NodeMCU custom build by frightanic.com
	branch: master
	commit: 2e67ff5a639a13260fd4fb3c3b627ccdc2845616
	SSL: true
	modules: adc,bme280,cron,crypto,dht,file,gpio,http,i2c,mqtt,net,node,pwm,rtctime,sntp,spi,tmr,u8g,uart,websocket,wifi,tls
 build 	built on: 2017-09-18 15:48
 powered by Lua 5.1.4 on SDK 2.1.0(116b762)
Waiting ...
> print(uart.setup(0, 115200, 8, 0, 1, 1 ))
115200
> 
Communication with MCU..Waiting answer from ESP - Timeout reached. Command aborted.Got answer! Communication with MCU established.
AutoDetect firmware...

Can`t autodetect firmware, because proper answer not received (may be unknown firmware). 
Please, reset module or continue.
Ready
HTTP request:	
HTTP request:	style.css
HTTP request:	settings.js
HTTP request:	loadcfg
Dataline:	D:1511966700,T:22.69,P:1009999,H:59.592
JSON is making...
PANIC: unprotected error in call to Lua API (make_json.lua:19: attempt to compare number with nil)

 ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x40100000, len 27984, room 16 
tail 0
chksum 0x80
load 0x3ffe8000, len 2500, room 8 
tail 12
chksum 0x2d
ho 0 tail 12 room 4
load 0x3ffe89c4, len 136, room 12 
tail 12
chksum 0x83
csum 0x83
На сколько я понял - ему тут не нравится отсутствие нтп сервера т.к. он не получил время с инета с неподключенной точкой доступа, но по логике - должен был запуститься с своим сид? ( напрашивается в меню на такой случай - время мануал?!?)
Уж прошу помочь с этим

Дмитрий говорить:
30.11.2017 11:57
У меня все заработало. Ну, кроме конфигурирования ESP через web интерфейс. Я тоже получил сообщение, что "... не заполнены все поля", и поэтому сконфигурировал руками непосредственно в конфигурационом файле. А не запускалась станция изначально потому, что я вместо BMP/E280 поставил BMP180. Он разные и поэтому пришлось переделать прошивку, добавить в нее модуль BMP085 и поправить инициализацию и чтение датчика BMP180.

andre говорить:
30.11.2017 13:21
Я еще не все поправил. Как закончу сообщу.

andre говорить:
01.12.2017 20:38
Подкорректировал файлы. На GitHub можно скачать. Теперь есть настройка, которая позволяет отключить дисплей, если Вы не собираетесь его использовать. И сделал не такую строгую валидацию формы настроек.

Александр говорить:
05.12.2017 16:19
не работает и комментарии уже оставить нельзя

Александр говорить:
05.12.2017 16:21
(пишет - PANIC: unprotected error in call to Lua API (make_json.lua:19: attempt to compare number with nil)

Vavan говорить:
05.01.2018 23:50
Сделал все по инструкции, все заработало. Спасибо за труд.
Одно но – на дисплее неправильно отображаются пиктограммы температуры, давления, и влажности. Вместо них – кракозябры. Как их изменить или убрать?

Володимир говорить:
08.01.2018 00:20
Дякую за інформацію та патріотичний ресурс. Успіхів!

Александр говорить:
15.02.2018 19:01
Подскажите пожалуйста чайнику как залить в файловую систему NodeMCU  файлы из директории…/WeatherStation/esp-12-files

Василий говорить:
22.02.2018 05:52
Александр,  файлы из директории…/WeatherStation/esp-12-files заливаются программой ESPlorer через кнопку "Upload" (внизу). Выбираете сразу все файлы и заливаете за один раз.

Василий говорить:
22.02.2018 06:02
Отличный проект, автору большое Спасибо за труд! Легко шьётся, отличная визуализация на дисплее.
Было-бы хорошо добавить отправку данных на narodmon.ru  и добавить ещё один датчик DS18B20 для мониторинга. О-о-о-о-ченно нужно!

andre говорить:
22.02.2018 08:09
Для narodmon.ru уже есть множество проектов с DS18B20. Второй датчик температуры в этом проекте будет явно лишним.

Василий говорить:
24.02.2018 01:40
andre говорить:
22.02.2018 в 08:09
Для narodmon.ru уже есть множество проектов с DS18B20. Второй датчик температуры в этом проекте будет явно лишним.
Я Вас услышал!
Есть "множество проектов"!  Ваш проект очень удачный и продуманный даже в том плане, что есть jотличная визуализация показаний датчика BME280. Я имел ввиду к датчику BME280(на улице) прикрутить ещё DS18B20 (по возможности) для контроля температуры в помещении. Но не это самое главное. Если у Вас есть время и возможности дополнить этот проект отправкой данных на "narodmon.ru" - это будет "Отлично!!!". Там больше возможностей мониторинга и управления домашними устройствами. Я пожилой человек, и учится программированию микроконтроллеров уже "тяму" не хватает. Если Вы можете добавить передачу данных на "Народный мониторинг", я думаю многие люди будут Вам благодарны. Лично я могу немножко и финансово отблагодарить.

Василий говорить:
24.02.2018 01:47
Ваш проект мной осуществлён в 2-х экземплярах. Один работает в квартире, второй на даче. Единственное отличие состоит в том, что я иcпользую дисплей OLED 1.3" CH1106.

AVL говорить:
09.04.2018 08:10
Всім привіт! MQTT було б СУПЕР. Дякую за гарну роботу!

AVL говорить:
09.04.2018 08:12
Дякую за гарну роботу! Ще б MQTT і було б СУПЕР!

Додати коментар
Code
* - обов'язкові поля

Архіви