@ -10,94 +10,46 @@ This project implements a real-time temperature and humidity monitoring system u
## 🧠 System Architecture
## 🧠 System Architecture
The system is designed using a **layered architecture**, where each component has a specific responsibility. This separation improves maintainability and clarity.
The system is structured as a simple data pipeline that connects the sensor, processing logic, and web interface. Data flows continuously from the physical environment to the user in a clear and modular way.
---
---
### 🔹 1. Hardware Layer (Sensor)
### 🔹 Hardware and Communication Layer
The **HTU21D sensor** measures temperature and humidity and communicates using the **I2C protocol**.
The HTU21D sensor measures temperature and humidity and communicates with the Raspberry Pi using the I2C protocol. This allows the Raspberry Pi to request and receive raw data from the sensor.
* The Raspberry Pi acts as the **master**
* The sensor acts as the **slave**
* Data is transmitted over SDA (data) and SCL (clock)
---
### 🔹 2. Data Acquisition Layer (C Program)
A program written in C interacts directly with the I2C interface:
* Opens the I2C device (`/dev/i2c-1`)
* Sends commands to the sensor
* Reads raw data
* Converts it into human-readable values (°C and %)
👉 Output is formatted as a JSON file:
```json
{ "temperature": 23.9, "humidity": 57.4 }
```
---
---
### 🔹 3. Data Persistence Layer (JSON File)
### 🔹 Data Processing Layer
The JSON file acts as an **intermediate data layer**:
* Stores the latest sensor reading
A C program interacts with the I2C interface to read the sensor data. It converts the raw binary values into human-readable units such as degrees Celsius and percentage humidity, and formats the result as JSON.
* Decouples backend (C) from frontend (JavaScript)
* Enables simple data exchange without a database
---
---
### 🔹 4. Web Server Layer (Nginx)
### 🔹 Data Storage Layer
Nginx serves static files:
* HTML (interface)
* JavaScript (logic)
* JSON (sensor data)
👉 It acts as the **bridge between the system and the user’s browser**
The JSON file stores the latest sensor readings. It acts as an intermediate layer, separating the data acquisition process from the web interface.
---
---
### 🔹 5. Presentation Layer (Frontend)
### 🔹 Web Server Layer
The browser executes JavaScript:
Nginx serves the JSON file and the web page over HTTP. It allows other devices on the network to access the system through a browser.
* Uses `fetch()` to request the JSON file
* Updates the DOM dynamically
* Displays values in real time
---
---
### 🔄 Data Flow Summary
### 🔹 Presentation Layer
```text
The web page uses JavaScript to periodically request the JSON file and update the displayed values dynamically, enabling near real-time visualization.
Sensor → I2C → C Program → JSON → Nginx → Browser → User Interface
```
---
---
### 🧠 Key Design Decisions
### 🔄 Overall Flow
* **Use of JSON:** lightweight and easy to parse
Data is captured by the sensor, processed by the C program, stored as JSON, served by Nginx, and displayed in the browser. This structure keeps the system simple, modular, and easy to maintain.