Imported from GitHub: Gleb-Vlasov/WeatherStation · commit f9105a6 · license MIT
Description
WiFi-connected weather station on a custom ESP32 PCB — BME280 sensor, modular display, USB-C. Built from scratch in KiCad.
README
📖 Overview
This is a fully custom weather station PCB designed around the ESP32-WROOM-32. Unlike a typical breadboard prototype, every component here sits on a purpose-built board — from the USB-to-UART bridge to the power regulation, sensor interface, and a modular display connector.
The device measures the local environment with an on-board BME280 sensor (temperature, humidity, and barometric pressure) and, thanks to the ESP32's built-in WiFi, can pull live weather data from the internet and display it on an attached screen. Four navigation buttons let you move through screens and menus directly on the device — no computer required after flashing.
Because the heart of the board is a full ESP32 with WiFi, this is far more than a thermometer. It's an open, programmable platform: you can extend it to show forecasts, multiple cities, air-quality indices, sunrise/sunset times, alerts — essentially anything available from a weather API — and control all of it with the four on-board buttons.
✨ Key Features
- 📡 WiFi-connected — the ESP32 connects to any 2.4 GHz network, opening the door to live online weather data, forecasts, and remote APIs.
- 🌡️ On-board BME280 sensor — measures local temperature, humidity, and atmospheric pressure, placed away from heat-generating components for accurate readings.
- 🖥️ Modular display — a 7-pin SPI header lets you plug in a TFT screen. Swap or upgrade the display without redesigning the board.
- 🎛️ Four-button control — UP / DOWN / OK / BACK buttons provide full on-device menu navigation. No serial console needed to interact with the device.
- 🔌 USB-C + auto-flash — a CP2102 USB-to-UART bridge with a transistor-based auto-reset circuit means you can flash firmware over USB-C with a single click — no manual button presses.
- 🛡️ ESD protection — a USBLC6-2SC6 protects the USB data lines from electrostatic discharge.
- ⚡ Clean power — an AMS1117-3.3 LDO supplies a stable 3.3 V rail to the ESP32, sensor, and display.
- 🧩 Infinitely extensible — every free GPIO is available for future modules: extra sensors, LEDs, buzzers, relays, and more.
🔧 How It Works
- Power & programming arrive over a single USB-C cable. The 5 V line feeds the AMS1117 regulator (which generates the 3.3 V rail for everything) and the CP2102 bridge.
- The CP2102 translates USB into UART so the ESP32 can be flashed. Two transistors driven by the bridge's DTR/RTS lines form an auto-reset circuit, putting the ESP32 into bootloader mode automatically during upload.
- The ESP32 runs the firmware. It reads the BME280 over I²C for local conditions and connects over WiFi to fetch online weather data.
- Everything is rendered on a TFT display (connected via the SPI header), and the user navigates with the four control buttons.
🖼️ Gallery
Assembled Board — Front
Assembled Board — Back
PCB Layout
Schematic
🧠 Hardware Blocks
| Block | Component | Purpose |
|---|---|---|
| MCU | ESP32-WROOM-32 | Main processor with WiFi & Bluetooth |
| USB-UART | CP2102-GM | USB-to-serial bridge for flashing & debug |
| Auto-reset | 2× SS8050 (NPN) | Automatic bootloader entry during upload |
| Power | AMS1117-3.3 | 5 V → 3.3 V linear regulator |
| Sensor | BME280 | Temperature, humidity, pressure (I²C) |
| ESD | USBLC6-2SC6 | USB data line surge protection |
| Display | 7-pin SPI header | Modular TFT screen connection |
| Input | 4× tactile buttons | On-device menu navigation |
| Connector | USB-C (USB 2.0) | Power + data |
📌 GPIO Map
| Function | ESP32 Pin | Notes |
|---|---|---|
| UART TX | GPIO1 | To CP2102 |
| UART RX | GPIO3 | From CP2102 |
| I²C SDA | GPIO21 | BME280 |
| I²C SCL | GPIO22 | BME280 |
| Display SCK | GPIO18 | SPI clock (VSPI) |
| Display MOSI | GPIO23 | SPI data (VSPI) |
| Display CS | GPIO5 | Chip select |
| Display DC | GPIO16 | Data/command |
| Display RST | GPIO4 | Reset |
| Button UP | GPIO32 | Internal pull-up |
| Button DOWN | GPIO33 | Internal pull-up |
| Button OK | GPIO25 | Internal pull-up |
| Button BACK | GPIO26 | Internal pull-up |
🚀 Getting Started
Flashing
- Connect the board via USB-C.
- Open the Arduino IDE or PlatformIO and select an ESP32 Dev Module board profile.
- Hit Upload — the auto-reset circuit handles bootloader entry automatically. (If needed, hold BOOT and tap EN to enter bootloader manually.)
Required Libraries (example)
- `Adafruit BME280` + `Adafruit Unified Sensor` — for the on-board sensor
- A TFT driver matching your display controller (e.g. `TFT_eSPI` / `Adafruit GFX`)
- `WiFi` (built into the ESP32 core) — for online weather data
💡 The firmware is up to you. The hardware gives you a full WiFi-enabled ESP32 with a sensor, a screen, and four buttons — what it displays and how it behaves is entirely programmable.
📂 Repository Structure
``` WeatherStation/ ├── WeatherStation.kicad_pro # KiCad project ├── WeatherStation.kicad_sch # Schematic ├── WeatherStation.kicad_pcb # PCB layout ├── WeatherStation.csv # Bill of Materials ├── libs/ # Local symbols & footprints │ ├── symbols/ │ └── footprints/ ├── Gerber/ # Manufacturing files └── docs/ └── images/ # Renders & screenshots ```
🏭 Manufacturing
- Layers: 2
- Thickness: 1.6 mm
- Copper: 1 oz (35 µm)
- Min track / clearance: 0.25 mm / 0.2 mm
- Designed to be produced by any standard fab (e.g. JLCPCB) from the included Gerber files.
📜 License
This project is released under the MIT License — free to use, study, modify, and distribute. See the LICENSE file for the full text.
📖 О проекте
Это полностью самостоятельная плата метеостанции на базе ESP32-WROOM-32. В отличие от обычного прототипа на макетке, здесь каждый компонент расположен на специально спроектированной плате — от моста USB-UART до стабилизации питания, интерфейса датчика и модульного разъёма для дисплея.
Устройство измеряет локальную обстановку встроенным датчиком BME280 (температура, влажность и атмосферное давление), а благодаря встроенному WiFi в ESP32 может получать актуальные данные о погоде из интернета и выводить их на подключённый экран. Четыре кнопки навигации позволяют переключать экраны и перемещаться по меню прямо на устройстве — компьютер после прошивки не нужен.
Поскольку в основе платы лежит полноценный ESP32 с WiFi, это намного больше чем просто термометр. Это открытая программируемая платформа: её можно расширить для показа прогнозов, нескольких городов, индексов качества воздуха, времени восхода и заката, оповещений — по сути всего что доступно из любого погодного API, и управлять всем этим четырьмя встроенными кнопками.
✨ Ключевые возможности
- 📡 Подключение по WiFi — ESP32 соединяется с любой сетью 2.4 ГГц, открывая доступ к актуальным онлайн-данным о погоде, прогнозам и удалённым API.
- 🌡️ Встроенный датчик BME280 — измеряет локальную температуру, влажность и атмосферное давление, размещён вдали от греющихся компонентов для точности показаний.
- 🖥️ Модульный дисплей — 7-пиновый SPI-разъём позволяет подключить TFT-экран. Можно менять или обновлять дисплей без переделки платы.
- 🎛️ Управление четырьмя кнопками — кнопки ВВЕРХ / ВНИЗ / OK / НАЗАД обеспечивают полную навигацию по меню прямо на устройстве. Для взаимодействия не нужна консоль.
- 🔌 USB-C + автопрошивка — мост USB-UART CP2102 с транзисторной схемой автосброса позволяет прошивать устройство по USB-C одним нажатием — без ручного зажима кнопок.
- 🛡️ Защита от ESD — микросхема USBLC6-2SC6 защищает линии данных USB от электростатических разрядов.
- ⚡ Чистое питание — LDO-стабилизатор AMS1117-3.3 выдаёт стабильные 3.3 В для ESP32, датчика и дисплея.
- 🧩 Безграничная расширяемость — все свободные GPIO доступны для будущих модулей: дополнительных датчиков, светодиодов, зуммеров, реле и не только.
🔧 Как это работает
- Питание и прошивка поступают по единственному кабелю USB-C. Линия 5 В питает стабилизатор AMS1117 (который формирует шину 3.3 В для всего остального) и мост CP2102.
- CP2102 переводит USB в UART, чтобы ESP32 можно было прошить. Два транзистора, управляемые линиями DTR/RTS моста, образуют схему автосброса — она автоматически переводит ESP32 в режим загрузчика во время прошивки.
- ESP32 выполняет прошивку. Он считывает BME280 по I²C для локальных показаний и подключается по WiFi для получения онлайн-данных о погоде.
- Всё отображается на TFT-дисплее (подключённом через SPI-разъём), а пользователь перемещается по меню четырьмя кнопками управления.
🖼️ Галерея
Собранная плата — лицевая сторона
Собранная плата — обратная сторона
Разводка платы
Схема
🧠 Функциональные блоки
| Блок | Компонент | Назначение |
|---|---|---|
| Микроконтроллер | ESP32-WROOM-32 | Основной процессор с WiFi и Bluetooth |
| USB-UART | CP2102-GM | Мост USB-в-serial для прошивки и отладки |
| Автосброс | 2× SS8050 (NPN) | Автоматический вход в загрузчик при прошивке |
| Питание | AMS1117-3.3 | Линейный стабилизатор 5 В → 3.3 В |
| Датчик | BME280 | Температура, влажность, давление (I²C) |
| Защита ESD | USBLC6-2SC6 | Защита линий данных USB от разрядов |
| Дисплей | 7-пиновый SPI-разъём | Подключение модульного TFT-экрана |
| Ввод | 4× тактовые кнопки | Навигация по меню на устройстве |
| Разъём | USB-C (USB 2.0) | Питание + данные |
📌 Карта выводов (GPIO)
| Функция | Вывод ESP32 | Примечание |
|---|---|---|
| UART TX | GPIO1 | К CP2102 |
| UART RX | GPIO3 | От CP2102 |
| I²C SDA | GPIO21 | BME280 |
| I²C SCL | GPIO22 | BME280 |
| Дисплей SCK | GPIO18 | Тактирование SPI (VSPI) |
| Дисплей MOSI | GPIO23 | Данные SPI (VSPI) |
| Дисплей CS | GPIO5 | Выбор чипа |
| Дисплей DC | GPIO16 | Данные/команда |
| Дисплей RST | GPIO4 | Сброс |
| Кнопка ВВЕРХ | GPIO32 | Внутренняя подтяжка |
| Кнопка ВНИЗ | GPIO33 | Внутренняя подтяжка |
| Кнопка OK | GPIO25 | Внутренняя подтяжка |
| Кнопка НАЗАД | GPIO26 | Внутренняя подтяжка |
🚀 Начало работы
Прошивка
- Подключи плату по USB-C.
- Открой Arduino IDE или PlatformIO и выбери профиль платы ESP32 Dev Module.
- Нажми Upload — схема автосброса сама переведёт чип в режим загрузчика. (При необходимости зажми BOOT и кратко нажми EN, чтобы войти в загрузчик вручную.)
Необходимые библиотеки (пример)
- `Adafruit BME280` + `Adafruit Unified Sensor` — для встроенного датчика
- Драйвер TFT под контроллер твоего дисплея (например `TFT_eSPI` / `Adafruit GFX`)
- `WiFi` (встроена в ядро ESP32) — для онлайн-данных о погоде
💡 Прошивка — за тобой. Железо даёт полноценный ESP32 с WiFi, датчиком, экраном и четырьмя кнопками. Что именно оно показывает и как себя ведёт — полностью программируется.
📂 Структура репозитория
``` WeatherStation/ ├── WeatherStation.kicad_pro # Проект KiCad ├── WeatherStation.kicad_sch # Схема ├── WeatherStation.kicad_pcb # Разводка платы ├── WeatherStation.csv # Перечень компонентов (BOM) ├── libs/ # Локальные символы и посадочные места │ ├── symbols/ │ └── footprints/ ├── Gerber/ # Производственные файлы └── docs/ └── images/ # Рендеры и скриншоты ```
🏭 Производство
- Слоёв: 2
- Толщина: 1.6 мм
- Медь: 1 oz (35 мкм)
- Мин. дорожка / зазор: 0.25 мм / 0.2 мм
- Плата рассчитана на изготовление любым стандартным заводом (например JLCPCB) из приложенных Gerber-файлов.
📜 Лицензия
Проект распространяется под лицензией MIT — можно свободно использовать, изучать, изменять и распространять. Полный текст — в файле LICENSE.