Archived educational project (2024). This repository is preserved as a historical portfolio artifact and is not actively maintained. It was designed for local/LAN experimentation—not for deployment on the public internet.
Weather Watch is an end-to-end IoT weather station built around an ESP32 Wrover and DHT11 sensor. The microcontroller sends temperature and humidity readings to a PHP application, which stores them in MySQL and presents current and historical measurements in a browser dashboard.
- ESP32 firmware and DHT11 sensor integration
- Periodic HTTP ingestion protected by a shared sensor key
- PHP/MySQL storage and historical aggregation
- Docker Compose packaging for the web application, database, and phpMyAdmin
- A responsive dashboard for current, minimum, maximum, and average readings
ESP32 + DHT11
│ HTTP POST over the local network
▼
PHP/Apache ingestion endpoint
│
▼
MySQL ─────────► Weather Watch dashboard
This is educational code rather than production infrastructure. It uses a static key over plain HTTP and includes database/query patterns that should not be exposed to untrusted networks. Keep the stack on a trusted local network, use unique local credentials, and do not expose phpMyAdmin publicly.
- ESP32 Wrover development board
- DHT11 temperature/humidity sensor
- 10 kΩ resistor
- Four male-to-male jumper wires
- A computer running Docker and the Arduino IDE
These instructions are retained for historical reproduction. Current upstream images or libraries may behave differently than they did in 2024.
cp .env.sample .envEdit .env and replace every CHANGE_ME value. Use a long, random SENSOR_API_KEY; the same value must be used as SECRET_APIKEY in the Arduino configuration.
Start the stack:
docker compose up --buildThe historical application is then available at:
- Dashboard: http://localhost:8080/esp-weather-station.php
- phpMyAdmin: http://localhost:8081 — local administration only
Stop the stack with:
docker compose downTo also remove the local database volume:
docker compose down -v- Install the ESP32 board support package in the Arduino IDE using:
https://dl.espressif.com/dl/package_esp32_index.json - Copy
arduino/weather-watch/arduino_secrets.h.sampletoarduino/weather-watch/arduino_secrets.h. - Set:
SECRET_SSIDto the local Wi-Fi name;SECRET_PASSWORDto its password;SECRET_LASTOCTETto the last octet of the computer hosting Weather Watch;SECRET_SERVERPORTto the dashboard port fromdocker-compose.yml(the provided default is8080);SECRET_APIKEYto the same value asSENSOR_API_KEYin.env.
- Optionally adjust
sensorName,sensorLocation, andtimerDelayinweather-watch.ino. - Select ESP32 Wrover Module in the Arduino IDE and upload the sketch.
The ESP32 and Docker host must be on the same trusted local network.
- No automated test suite or hardware CI is included.
- Container images and Arduino dependencies are not pinned to immutable versions.
- Sensor authentication is a static shared key sent over plain HTTP.
- The stack is intended for a classroom/local-network demonstration, not production deployment.
If manage_db.sh reports $'\r': command not found or an unexpected end of file, configure the file to use LF rather than CRLF line endings.
Weather Watch was built collaboratively as an educational project by @itsreverence, @carlosgothub, @Comiserif, and @limon-nawaj.
The project was based in part on Rui Santos's Cloud Weather Station ESP32/ESP8266 tutorial. See the repository history for the preserved implementation and collaboration record.
Weather Watch is licensed under the GNU Affero General Public License v3.0 or later.


