сайт для палких паяльників

Метеостанция на ESP8266
(на русском языке)

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

  

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

  • Датчик BME280 дозволяє вимірювати температуру, атмосферний тиск і відносну вологість повітря
  • Накопичує дані за останні кілька днів, показує дані у вигляді графіків на Web-інтерфейсі
  • Дисплей для перегляду поточної температури, тиску і вологості
  • Метеостанція підключається до домашнього WiFi. Перегляд даних на метеостанції можливий з будь-якого персонального комп’ютера, або мобільного пристрою, підключеного до домашньої мережі WiFi
  • Метеостанція може публікувати дані у мережі Інтернет (надсилати дані на власний сайт або thingspeak.com)
  • Web інтерфейс для налаштування метеостанції і перегляду погодних даних. Для налаштування метеостанції, за для безпеки, використовується власна WiFi точка доступу

Посилання для завантаження файлів необхідних для відтворення метеостанції: https://github.com/avislab/NodeMCUExamples/tree/master/WeatherStation

Приклад публікації погодних даних на сайті: http://avislab.com/meteo/

Приклад використання 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 я розповідав тут: http://www.avislab.com/blog/esp-01-upgrade/

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

Програмне забезпечення розроблене для 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. Погодні дані можуть відображатися у вигляді інформера або у вигляді графіків. Робочу версію можна переглянути тут: http://avislab.com/meteo/

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

На період випробувань датчик був виставлений за вікно у поліетиленовому пакетику :). Потім для нього був зроблений контейнер з підручних матеріалів.


У кришку пластикової банки вклеєні магніти. Вони потрібні для закріплення контейнера на металевому відливу за вікном. У самій банці вирізані вентиляційні отвори. Для захисту від опадів вся ця конструкція накривається пластиковим циліндром трохи більшого діаметру. Таким чином, датчик захищений від опадів, прямих сонячних променів і при цьому не погано вентилюється.

Посилання для завантаження необхідних даних:
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. Додана можливість відключити дисплей. Виправлені помилки.

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

15 комментариев: Метеостанція на ESP8266

  • Дмитрий говорить:

    Правильно ли я понимаю, что файл nodemcu-meteo.bin нужно залить по адресу 0x00000, а файл esp_init_data_default.bin по адресу 0x3FC000 установив соответствующие адреса в закладке “Config” программы ESP8266Flasher?

    • andre говорить:

      Да, все в соответствии с документацией: 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, запросила пароль и …. почему-то не получается к ней подключиться.

    • andre говорить:

      Не получается подключиться к самой сети 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 доходит.

    • andre говорить:

      Могу предположить, что питание модуля слабоватое и 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), указываю точку доступа, остальные настройки не трогаю – что-то написало о не всех заполненных полях – и дальше никак.
    Проект очень похож по оформлению на распбери такой был, в Вашем испонении – все просто и красиво, его я повторил без проблем.
    (еще единственное – экрана у меня нет, может в этом загвоздка?!?)
    ???

    • andre говорить:

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

  • Ал говорить:

    Сегодня залил снова (подсмотрел на гитхабе что обновили).
    Все файлы залились ( лог.тхт уже нормально влился). Но…
    Снова не могу вписать свою точку доступа, меняю сид и пароль – ошибка
    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
    На сколько я понял – ему тут не нравится отсутствие нтп сервера т.к. он не получил время с инета с неподключенной точкой доступа, но по логике – должен был запуститься с своим сид? ( напрашивается в меню на такой случай – время мануал?!?)
    Уж прошу помочь с этим

    • andre говорить:

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

  • Дмитрий говорить:

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

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

 
Translate
Архіви

© 2011-2017 Андрій Корягін, Кременчук - Київ, Україна