I have the following things
DHT 22
Rain sensor
MQ 135
I want help creating a Weather Station with these
I have the following things
DHT 22
Rain sensor
MQ 135
I want help creating a Weather Station with these
My code
#include <WiFiS3.h>
#include <Arduino_LED_Matrix.h>
#include <DHT.h>
// ------------------- WiFi Credentials -------------------
char ssid[] = "ssid"; // your WiFi SSID
char pass[] = "passwoerd"; // your WiFi password
// ------------------- Pins -------------------
#define DHT_SENSOR_PIN 2
#define MQ135_PIN A0
#define RAIN_SENSOR_PIN A1
// ------------------- Objects -------------------
DHT_Unified dht(2, DHT22);
WiFiServer server(80);
ArduinoLEDMatrix matrix;
// ------------------- Timing -------------------
unsigned long lastSensorUpdate = 0;
unsigned long lastWiFiCheck = 0;
// ------------------- Variables -------------------
float temperature = 0.0;
float humidity = 0.0;
int airQuality = 0;
int rainValue = 0;
// ------------------- Matrix Icons -------------------
const uint32_t no_wifi[] = {
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
};
const uint32_t wifi_connected[] = {
0x3C,0x42,0x81,0xA5,0x81,0x99,0x42,0x3C
};
// ------------------- Functions -------------------
void wifi_connect() {
if (WiFi.status() == WL_NO_MODULE) {
Serial.println("WiFi module not detected!");
matrix.loadFrame(no_wifi);
while (true); // halt
}
Serial.print("Connecting to WiFi: ");
Serial.println(ssid);
matrix.loadSequence(LEDMATRIX_ANIMATION_WIFI_SEARCH);
matrix.play(true);
while (WiFi.begin(ssid, pass) != WL_CONNECTED) {
Serial.print(".");
delay(1000);
}
matrix.loadFrame(wifi_connected);
Serial.println("\nConnected to WiFi!");
// give DHCP some breathing room
delay(2000);
IPAddress ip = WiFi.localIP();
Serial.print("DHCP IP Address: ");
Serial.println(ip);
// if still invalid, fallback to static IP
if (ip == IPAddress(0, 0, 0, 0)) {
Serial.println("⚠ DHCP failed. Assigning static IP...");
IPAddress local_IP(192, 168, 1, 177); // pick unused IP
IPAddress gateway(192, 168, 1, 1); // your router IP
IPAddress subnet(255, 255, 255, 0);
WiFi.config(local_IP, gateway, subnet);
WiFi.begin(ssid, pass);
delay(2000); // wait for connection again
ip = WiFi.localIP();
Serial.print("Static IP Address: ");
Serial.println(ip);
}
server.begin();
}
void read_sensor_data() {
sensors_event_t event;
dht.temperature().getEvent(&event);
if (!isnan(event.temperature)) {
temperature = event.temperature;
}
dht.humidity().getEvent(&event);
if (!isnan(event.relative_humidity)) {
humidity = event.relative_humidity;
}
airQuality = analogRead(MQ135_PIN);
rainValue = analogRead(RAIN_SENSOR_PIN);
// Print to Serial Monitor
Serial.println("---- Sensor Data ----");
Serial.print("Temperature: "); Serial.print(temperature); Serial.println(" °C");
Serial.print("Humidity: "); Serial.print(humidity); Serial.println(" %");
Serial.print("Air Quality (MQ135): "); Serial.println(airQuality);
Serial.print("Rain Sensor: "); Serial.println(rainValue);
Serial.println("---------------------");
}
void run_local_webserver() {
WiFiClient client = server.available();
if (!client) return;
while (!client.available()) delay(1);
// simple HTTP response
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<h1>Arduino UNO R4 Weather Station</h1>");
client.print("<p>Temperature: "); client.print(temperature); client.println(" °C</p>");
client.print("<p>Humidity: "); client.print(humidity); client.println(" %</p>");
client.print("<p>Air Quality (MQ135): "); client.print(airQuality); client.println("</p>");
client.print("<p>Rain Sensor: "); client.print(rainValue); client.println("</p>");
client.println("</html>");
}
// ------------------- Setup -------------------
void setup() {
Serial.begin(115200);
matrix.begin();
dht.begin();
wifi_connect();
}
// ------------------- Loop -------------------
void loop() {
unsigned long currentMillis = millis();
// Update sensors every 2s
if (currentMillis - lastSensorUpdate >= 2000) {
read_sensor_data();
lastSensorUpdate = currentMillis;
}
// Check WiFi status every 10s
if (currentMillis - lastWiFiCheck >= 10000) {
if (WiFi.status() != WL_CONNECTED) {
wifi_connect();
}
lastWiFiCheck = currentMillis;
}
// Handle client requests
run_local_webserver();
}
start by testing each device in a separate program
when you know they work start building your weather station
do a web search for examples and libraries which support the devices, e.g. arduino-dht22
I mean they are working but i want a better code
Which is good
Better in what respect, faster, uses less memory, easy to understand?
easy to understand fast