Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Arduino UNO Mini-Wetterstation – DIY-Sensor-Hub mit ESP8266 IoT

Komponenten und Zubehör

Software & Cloud

Projektbeschreibung

Eine kompakte Wetterstation, die sieben Umweltparameter misst und per ESP8266 an ThingSpeak sendet. Stromversorgung über USB (PC oder Ladegerät). Kein Gehäuse im Scope – Fokus auf Sensorik & Datenübertragung.

Gemessene Größen & Sensoren

GrößeSensorThingSpeak Feld
Temperatur (°C)DHT22Field 3
Luftfeuchte (%)DHT22Field 2
Atmosphärendruck (hPa)BMP085Field 6
Lichtstärke (analog)Grove LightField 1
UV-IndexGrove UVField 4
Feinstaubkonzentration (pcs/0.01cf)Grove DustField 5
Temperatur 2 (°C)BMP085Field 7

Verdrahtung

Alle Sensoren gemäß Schaltplan auf Proto Shield / Breadboard verdrahten. ESP-01 an SoftwareSerial (Pins 10=RX, 11=TX). Dust-Sensor an Pin 8 (Pulsweitenmessung). I2C-Sensoren (BMP085) an A4/A5. DHT22 an Pin 2.

Arduino UNO Mini-Wetterstation – DIY-Sensor-Hub mit ESP8266 IoT
Verdrahtungsübersicht (Breadboard/Proto Shield)

ThingSpeak Einrichtung

  1. Bei ThingSpeak registrieren → Neuen Channel anlegen.
  2. 7 Felder definieren (Namen wie Tabelle oben).
  3. Write API Key kopieren → in Code als ZZZZZ eintragen.
  4. WLAN-SSID (XXXXX) & Passwort (YYYYY) im Code setzen.
  5. Code hochladen → Station sendet alle 60 s Daten (30 s Messzyklus für Feinstaub).
Arduino UNO Mini-Wetterstation – DIY-Sensor-Hub mit ESP8266 IoT
ThingSpeak Channel mit 7 Feldern

Android-App ThingsView

Arduino-Code (weatherBox.ino)

#include 
#include 
#include 
#include 
#include 
#include 

#define SSID "XXXXX"       // WLAN SSID
#define PASS "YYYYY"       // WLAN Passwort
#define IP "184.106.153.149" // api.thingspeak.com IP
#define DHT22_PIN 2
String GET = "GET /update?key=ZZZZZ&field1="; // Write API Key

SoftwareSerial monitor(10, 11); // RX, TX zu ESP8266
dht DHT;
Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085);

// Pins
int luminancePin = A0;
int uvPin = A1;
int dustPin = 8;

unsigned long duration, starttime;
unsigned long sampletime_ms = 30000; // 30 s Feinstaub-Sampling
unsigned long delay_time = 60000;    // 60 s Sendeintervall
unsigned long lowpulseoccupancy = 0;
float ratio = 0, concentration = 0;

void setup() {
  Serial.begin(9600);
  monitor.begin(9600);
  Serial.println("Initializing...");
  pinMode(dustPin, INPUT);

  // BMP085
  Serial.println("Detecting BMP085...");
  if (!bmp.begin()) {
    Serial.println("BMP085 nicht gefunden! Verkabelung/I2C prüfen.");
    while (1);
  }
  Serial.println("BMP085 OK!");

  // ESP8266 Kommunikation testen
  monitor.flush();
  monitor.println("AT");
  delay(2000);
  if (monitor.find("OK")) Serial.println("ESP8266: OK");
  else Serial.println("ESP8266 ERROR");

  connectWiFi();
  Serial.print("Sampling ("); Serial.print(sampletime_ms/1000); Serial.println("s)...");
  starttime = millis();
}

void loop() {
  // Feinstaub: Low-Pulse-Occupancy messen
  duration = pulseIn(dustPin, LOW);
  lowpulseoccupancy += duration;

  // Alle 30 s Feinstaub berechnen & alle Sensoren senden
  if ((millis() - starttime) >= sampletime_ms) {
    ratio = lowpulseoccupancy / (sampletime_ms * 10.0); // %
    concentration = 1.1*pow(ratio,3) - 3.8*pow(ratio,2) + 520*ratio + 0.62; // Datenblatt-Formel
    lowpulseoccupancy = 0;

    // Andere Sensoren lesen
    char buf[10];
    float luminance = analogRead(luminancePin);
    float uv = analogRead(uvPin) * 0.0049 * 307 / 200; // UV-Index Berechnung

    int chk = DHT.read22(DHT22_PIN);
    float humidity = DHT.humidity;
    float temperature = DHT.temperature;

    sensors_event_t event;
    bmp.getEvent(&event);
    float pressure = 0, temperature1 = 0;
    if (event.pressure) {
      pressure = event.pressure;
      bmp.getTemperature(&temperature1);
    }

    // Strings formatieren (ohne Leerzeichen)
    String luminanceStr = dtostrf(luminance, 4, 1, buf); luminanceStr.replace(" ", "");
    String uvStr = dtostrf(uv, 4, 1, buf); uvStr.replace(" ", "");
    String humidityStr = dtostrf(humidity, 4, 1, buf); humidityStr.replace(" ", "");
    String tempStr = dtostrf(temperature, 4, 1, buf); tempStr.replace(" ", "");
    String dustStr = dtostrf(concentration, 4, 1, buf); dustStr.replace(" ", "");
    String pressureStr = dtostrf(pressure, 4, 1, buf); pressureStr.replace(" ", "");
    String temp1Str = dtostrf(temperature1, 4, 1, buf); temp1Str.replace(" ", "");

    // An ThingSpeak senden
    updateSensors(luminanceStr, humidityStr, tempStr, uvStr, dustStr, pressureStr, temp1Str);

    Serial.print("Wait "); Serial.print(delay_time/1000); Serial.println("s for next sampling");
    delay(delay_time);
    Serial.println(); Serial.print("Sampling ("); Serial.print(sampletime_ms/1000); Serial.println("s)...");
    starttime = millis();
  }
}

void updateSensors(String l, String h, String t, String uv, String d, String p, String t1) {
  String cmd = "AT+CIPSTART=\"TCP\",\""; cmd += IP; cmd += "\",80";
  monitor.println(cmd); delay(2000);

  cmd = GET; cmd += l; cmd += "&field2="; cmd += h; cmd += "&field3="; cmd += t;
  cmd += "&field4="; cmd += uv; cmd += "&field5="; cmd += d; cmd += "&field6="; cmd += p;
  cmd += "&field7="; cmd += t1; cmd += "\r\n";

  delay(1000);
  int len = cmd.length();
  monitor.println("AT+CIPSEND=" + String(len)); delay(2000);
  monitor.print(cmd);
  if (monitor.find("OK")) Serial.println("Transmission OK");
  else Serial.println("Transmission failed!");
}

boolean connectWiFi() {
  Serial.println("Connecting WiFi...");
  monitor.println("AT+CWMODE=1"); delay(2000);
  monitor.flush();
  String cmd = "AT+CWJAP=\""; cmd += SSID; cmd += "\",\""; cmd += PASS; cmd += "\"";
  monitor.println(cmd); delay(5000);
  if (monitor.find("OK")) { Serial.println("WiFi connected!"); return true; }
  else { Serial.println("WiFi failed!"); return false; }
}

Wichtige Hinweise

Herstellungsprozess

  1. Raspberry Pi Wetterstation bauen, die tägliche Wetterdaten per E-Mail sendet
  2. Arduino-Uno-Roboter zur Personenerkennung – Sensorintegration Schritt für Schritt
  3. K30 CO₂-Sensor: Echtzeit-Luftqualitätsmessung mit Arduino
  4. Digitales Stadiometer bauen: Körpergröße messen mit Arduino & Lasersensor VL53L0X
  5. Arduino UNO WiFi Webserver: LED per Browser steuern
  6. Einfacher Taschenrechner mit Arduino UNO – Einsteigerprojekt
  7. Sensorturm mit Arduino Cloud: Temperatur, Bewegung & Gase überwachen
  8. Tragbares Persistence-of-Vision-Display mit Arduino UNO und ATtiny85 bauen
  9. Arduino Nano Wetterstation: Sensor-Kit & OLED-Display
  10. Smart Health Monitoring Station: Arduino, Bluetooth und Sensoren