Метеостанція на ESP8266
Метеостанція зібрана на базі модуля ESP8266. Працює через WiFi, має web-інтерфейс, дисплей і можливість надсилати дані у мережу Інтернет. Реалізована можливість публікувати погодні графіки і інформаційні блоки на власному сайті або використовувати службу thingsspeak.com. Все це можна зробити своїми руками всього за один вечір із загальнодоступних модулів.
Можливості метеостанції
- Датчик BME280 дозволяє вимірювати температуру, атмосферний тиск і відносну вологість повітря
- Накопичує дані за останні кілька днів, показує дані у вигляді графіків на Web-інтерфейсі
- Дисплей для перегляду поточної температури, тиску і вологості
- Метеостанція підключається до домашнього WiFi. Перегляд даних на метеостанції можливий з будь-якого персонального комп`ютера, або мобільного пристрою, підключеного до домашньої мережі WiFi
- Метеостанція може публікувати дані у мережі Інтернет (надсилати дані на власний сайт або thingspeak.com)
- Web інтерфейс для налаштування метеостанції і перегляду погодних даних. Для налаштування метеостанції, за для безпеки, використовується власна WiFi точка доступу
Необхідні компоненти
- модуль 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#OverviewData 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 NodeMCU Перше знайомство. Робимо WiFi розетку
- ESP8266 NodeMCU. PWM
- ESP8266 NodeMCU. ADC
- ESP8266 NodeMCU. timer, rtc, SNTP, cron
- ESP8266 NodeMCU. файлова система, SD Card
- ESP8266 NodeMCU. UART
- GPS-трекер на базі ESP8266
- GPS-трекер + Дисплей SSD1306
- ESP8266 NodeMCU. SSD1306. U8G
- ESP-01 (ESP8266) upgrade flash memory to 4MB
- ESP8266 NodeMCU. I2C. BME280/
- Метеостанція на ESP8266
Правильно ли я понимаю, что файл nodemcu-meteo.bin нужно залить по адресу 0x00000, а файл esp_init_data_default.bin по адресу 0x3FC000 установив соответствующие адреса в закладке "Config" программы ESP8266Flasher?
Да, все в соответствии с документацией: 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
Ок, спасибо, идем дальше. 1. Прошивку залил 2. Закачал в файловую систему NodeMCU все файли из директорії .../WeatherStation/esp-12-files После перезагрузки появилась сеть MeteoStation, запросила пароль и .... почему-то не получается к ней подключиться.
Не получается подключиться к самой сети MeteoStation? или когда пытаетесь зайти браузером ?
Не получается подключиться к самой сети MeteoStation.
Попробовал сегодня залить все заново в новый модуль 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 доходит.
Могу предположить, что питание модуля слабоватое и Wifi постоянно отваливается. У меня такое было пока не стал использовать более мощный блок питания.
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), указываю точку доступа, остальные настройки не трогаю - что-то написало о не всех заполненных полях - и дальше никак. Проект очень похож по оформлению на распбери такой был, в Вашем испонении - все просто и красиво, его я повторил без проблем. (еще единственное - экрана у меня нет, может в этом загвоздка?!?) ???
Добрый день. Загвоздка именно в отсутствии дисплея. Скрипт пытается отправлять на дисплей информацию и не может... Я буду у себя убирать дисплей (он мне не особо нужен) и переделывать, чтобы была опция в настройках (есть/нет дисплей). Буквально через пару дней будет обновление.
Сегодня залил снова (подсмотрел на гитхабе что обновили). Все файлы залились ( лог.тхт уже нормально влился). Но... Снова не могу вписать свою точку доступа, меняю сид и пароль - ошибка 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 На сколько я понял - ему тут не нравится отсутствие нтп сервера т.к. он не получил время с инета с неподключенной точкой доступа, но по логике - должен был запуститься с своим сид? ( напрашивается в меню на такой случай - время мануал?!?) Уж прошу помочь с этим
У меня все заработало. Ну, кроме конфигурирования ESP через web интерфейс. Я тоже получил сообщение, что "... не заполнены все поля", и поэтому сконфигурировал руками непосредственно в конфигурационом файле. А не запускалась станция изначально потому, что я вместо BMP/E280 поставил BMP180. Он разные и поэтому пришлось переделать прошивку, добавить в нее модуль BMP085 и поправить инициализацию и чтение датчика BMP180.
Я еще не все поправил. Как закончу сообщу.
Подкорректировал файлы. На GitHub можно скачать. Теперь есть настройка, которая позволяет отключить дисплей, если Вы не собираетесь его использовать. И сделал не такую строгую валидацию формы настроек.
не работает и комментарии уже оставить нельзя
(пишет - PANIC: unprotected error in call to Lua API (make_json.lua:19: attempt to compare number with nil)
Сделал все по инструкции, все заработало. Спасибо за труд. Одно но – на дисплее неправильно отображаются пиктограммы температуры, давления, и влажности. Вместо них – кракозябры. Как их изменить или убрать?
Дякую за інформацію та патріотичний ресурс. Успіхів!
Подскажите пожалуйста чайнику как залить в файловую систему NodeMCU файлы из директории…/WeatherStation/esp-12-files
Александр, файлы из директории…/WeatherStation/esp-12-files заливаются программой ESPlorer через кнопку "Upload" (внизу). Выбираете сразу все файлы и заливаете за один раз.
Отличный проект, автору большое Спасибо за труд! Легко шьётся, отличная визуализация на дисплее. Было-бы хорошо добавить отправку данных на narodmon.ru и добавить ещё один датчик DS18B20 для мониторинга. О-о-о-о-ченно нужно!
Для narodmon.ru уже есть множество проектов с DS18B20. Второй датчик температуры в этом проекте будет явно лишним.
andre говорить: 22.02.2018 в 08:09 Для narodmon.ru уже есть множество проектов с DS18B20. Второй датчик температуры в этом проекте будет явно лишним. Я Вас услышал! Есть "множество проектов"! Ваш проект очень удачный и продуманный даже в том плане, что есть jотличная визуализация показаний датчика BME280. Я имел ввиду к датчику BME280(на улице) прикрутить ещё DS18B20 (по возможности) для контроля температуры в помещении. Но не это самое главное. Если у Вас есть время и возможности дополнить этот проект отправкой данных на "narodmon.ru" - это будет "Отлично!!!". Там больше возможностей мониторинга и управления домашними устройствами. Я пожилой человек, и учится программированию микроконтроллеров уже "тяму" не хватает. Если Вы можете добавить передачу данных на "Народный мониторинг", я думаю многие люди будут Вам благодарны. Лично я могу немножко и финансово отблагодарить.
Ваш проект мной осуществлён в 2-х экземплярах. Один работает в квартире, второй на даче. Единственное отличие состоит в том, что я иcпользую дисплей OLED 1.3" CH1106.
Всім привіт! MQTT було б СУПЕР. Дякую за гарну роботу!
Дякую за гарну роботу! Ще б MQTT і було б СУПЕР!
Недавні записи
- 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
Архіви