Компактная метеостанция: Arduino Nano + ESP8266, BMP280, OLED / Nokia 5110 LCD
Компоненты и материалы
| Arduino Nano R3 | 1 шт. |
| Барометрический датчик BMP280 (I2C) | 1 шт. |
| LCD Nokia 5110 (84×48) | 1 шт. |
| NodeMCU 1.0 (ESP-12E модуль) | 1 шт. |
| OLED-дисплей 128×64 (I2C/SPI) | 1 шт. |
Инструменты
- Паяльник
О проекте
Устройство объединяет в одном корпусе два независимых блока:
Блок 1: Барометр на Arduino Nano + BMP280 + Nokia 5110
Показывает текущее абсолютное и относительное атмосферное давление (с поправкой на высоту — переменная druck_offset в коде), а также изменение давления за последние 1 и 3 часа (разница с сохранёнными в EEPROM значениями). Это полезно для краткосрочного прогноза погоды. Также выводится температура сенсора. Код основан на материалах shelvin.de с адаптацией под BMP280 (в оригинале BMP180). Энергопотребление минимизировано: Arduino спит 54 секунды из 60 (watchdog + power-down), просыпается, измеряет, пишет в EEPROM, обновляет экран, снова спит.
Блок 2: Прогноз погоды на ESP8266 + OLED
NodeMCU подключается к Wi-Fi, запрашивает 3-дневный прогноз с OpenWeatherMap (нужен API-ключ) и выводит на OLED 128×64. Подробная инструкция по установке библиотек и прошивке ESP8266: PDF-гайд.
Оба блока питание от общего источника (5 В → LDO на Nano и NodeMCU).
Код для Arduino Nano (барометр + Nokia 5110)
// Барометр с BMP180/280 + Nokia 5110 + EEPROM logging + sleep
// Matthias Busse, адаптация под BMP280
#include <Wire.h>
#include <avr/sleep.h>
#include <EEPROM.h>
int eepromAdresse=0, eepromMax=1023;
int eepromOldAdr, eepromDif1=60, eepromDif3=180; // минуты назад
#define I2C_ADDRESS 0x77
const unsigned char oversampling_setting = 3;
const unsigned char pressure_waittime[4] = {5,8,14,26};
int ac1,ac2,ac3,b1,b2,mb,mc,md; unsigned int ac4,ac5,ac6;
int temp=20, temp_mittel=200; long druck=1013, druck_mittel=101300;
float t, temp_offset=0.0, d, dAlt, dDiff, druck_offset=2.0;
int zeitabgl=0, mitteln=5; char tstring[5], dstring[7];
volatile int sleepcounter = 0;
// Шрифт 5×7 для Nokia 5110
static const byte ASCII[][5] = { /* ... таблица символов ... */ };
#define RST 12 #define CE 11 #define DC 10 #define DIN 9 #define CLK 8
void setup(){
for(int i=0;i800){ LcdXY(27,2); if(dDiff<0) LcdWriteString("-"); else LcdWriteString("+"); if(dDiff<0) dDiff=-dDiff; LcdXY(34,2); LcdWriteString(dtostrf(dDiff,4,2,dstring)); }
LcdXY(60,2); LcdWriteString("hPa");
eepromOldAdr = eepromAdresse - (eepromDif3*4);
if(eepromOldAdr<0) eepromOldAdr = eepromMax+1+eepromOldAdr;
dAlt = (float)eepromReadLong(eepromOldAdr)/100.0; dDiff = d-dAlt;
LcdClearLine(3); LcdXY(8,3); LcdWriteString("3h:");
if(dAlt>800){ LcdXY(27,3); if(dDiff<0) LcdWriteString("-"); else LcdWriteString("+"); if(dDiff<0) dDiff=-dDiff; LcdXY(34,3); LcdWriteString(dtostrf(dDiff,4,2,dstring)); }
LcdXY(60,3); LcdWriteString("hPa");
LcdClearLine(5); LcdXY(8,5); LcdWriteString("Temp. "); LcdXY(43,5); LcdWriteString(dtostrf(t,4,1,tstring)); LcdXY(73,5); LcdWriteString("C");
eepromAdresse += 4; if(eepromAdresse>eepromMax) eepromAdresse=0;
pwrDown(54); // спать 54 сек
}
// --- вспомогательные функции: EEPROM, LCD, BMP180/280, sleep, watchdog ---
// (полный код см. в оригинале; здесь приведён основной цикл)
Код для ESP8266 (NodeMCU + OLED + OpenWeatherMap)
См. оригинальный проект и PDF-гайд по ссылке выше. Основные шаги:
1. Установить библиотеки: ESP8266WiFi, ArduinoJson, OLED (SSD1306Wire), TimeLib.
2. Вставить свой API-ключ OpenWeatherMap и Wi-Fi credentials.
3. Прошить через Arduino IDE (плата: NodeMCU 1.0).
Схема подключения
См. раздел «Schematics» оригинала: два отдельных раздела питания и I2C/SPI для каждого блока.
Производственный процесс
- Казу: от древнего мирлитона к современной пластиковой игрушке — история, производство и будущее
- Устранение перемычек: Как BreadShield соединяет Arduino напрямую с макетными платами
- Giftduino: идеальный набор Arduino для подарков — проект для хоббистов и педагогов
- Вывод данных BME280 (температура, влажность, давление) на сенсорный экран Nextion
- Высокопроизводительный регистратор данных для метеозонда на Arduino
- Портативная метеостанция на Arduino Nano за $10: DHT22, BMP180 и LCD
- eDOT: точные Arduino-часы и метеостанция с встроенным ИК-пультом
- Метеостанция на Arduino и ThingSpeak: температура и влажность в облаке
- Мониторинг давления в реальном времени с MKR GSM, Arduino Cloud и Google Sheets
- Надежная погодная станция на Arduino с датчиками DHT