Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Компактная метеостанция: 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 для каждого блока.

Производственный процесс

  1. Казу: от древнего мирлитона к современной пластиковой игрушке — история, производство и будущее
  2. Устранение перемычек: Как BreadShield соединяет Arduino напрямую с макетными платами
  3. Giftduino: идеальный набор Arduino для подарков — проект для хоббистов и педагогов
  4. Вывод данных BME280 (температура, влажность, давление) на сенсорный экран Nextion
  5. Высокопроизводительный регистратор данных для метеозонда на Arduino
  6. Портативная метеостанция на Arduino Nano за $10: DHT22, BMP180 и LCD
  7. eDOT: точные Arduino-часы и метеостанция с встроенным ИК-пультом
  8. Метеостанция на Arduino и ThingSpeak: температура и влажность в облаке
  9. Мониторинг давления в реальном времени с MKR GSM, Arduino Cloud и Google Sheets
  10. Надежная погодная станция на Arduino с датчиками DHT