owi: Open Weather IoT
Open Weather IoT is an open-source project consisting of a flexible modular framework designed for constructing weather stations using IoT technology. With its adaptable architecture, the project can be easily customized and extended to incorporate a wide range of sensors and components.
The current modules included in the weather station base are:
- 🌡️ Temperature Module (opens in a new tab): PT100 sensor with MAX31685 resistance-to-digital (RTD) converter.
- 💧 Relative Humidity Module (opens in a new tab): HDC1080 sensor.
- ☁️ Atmospheric Pressure Module (opens in a new tab): BME680 sensor.
- 🌬️ Wind Direction Module (opens in a new tab) and Wind Velocity Module (opens in a new tab): Custom-built measurement instruments based on HMC5883L as a Hall effect sensor.
- ⚡ Power Supply Module (opens in a new tab): Internal ADCs of the board for monitoring internal, battery, and solar panel voltages.
These modules serve as a foundation, and the modular design of the project allows for seamless integration of additional sensors and components tailored to specific weather monitoring needs.
The weather stations transmit the measured data at regular intervals to the base station using the LoRaWAN protocol.
Thanks to its modular structure, the project allows for easy addition, replacement, or removal of measurement instruments. Even the communication protocol can be substituted.
All the modules are developed in MicroPython and aim to adhere to the style guide (opens in a new tab) for ease of contribution, integration, and project understanding. Changes to the style guide may be made to improve it or to accommodate specific sensor peculiarities. The final code (opens in a new tab) integrates all the sensors.
The API (opens in a new tab) is developed in NodeJS with TypeScript and utilizes the MongoDB database. It is hosted on the Render (opens in a new tab) service at owi-server.onrender.com (opens in a new tab). Updates to the API repository are automatically reflected on Render within a few minutes.
The API provides a WebSocket-enabled endpoint that allows the integration with Grafana dashboards. By utilizing the API's WebSocket connection, users can create customized Grafana dashboards to visualize and analyze weather station data. This enables real-time monitoring and in-depth analysis of temperature, relative humidity, atmospheric pressure, wind direction, wind velocity, and other sensor readings.
Several client examples (opens in a new tab) have been developed to demonstrate the usage of the data provided by the API in R and Python.
This work was developed during the Experimental Laboratory of the Intelligent Campus course at UNICAMP, under the guidance of Professor @fruett (opens in a new tab). I actively contributed to the design, implementation and integration of the project.
One of my key contributions to the project was the idea of a modular design. Recognizing the need for flexibility and scalability, I proposed the concept of utilizing interchangeable modules that could be easily integrated into the weather station base.
To ensure seamless integration and standardized communication between modules, I introduced the concept of a standardized interface using I2C protocol with IDC connectors (4x2 pin configuration). This standardized interface simplifies the interconnection process and promotes compatibility among different modules, facilitating their integration into the weather station base.