Bouw een Betrouwbaar Persoonlijk Weerstation met Arduino, ESP8266 en ThingSpeak
Onderdelen en benodigdheden
| Adafruit BMP180 | × | 1 |
| DHT11 Temperatuur & Vochtigheidssensor (4 pinnen) | × | 1 |
| LDR (lichtgevoelige weerstand) | × | 1 |
| Espressif ESP8266 ESP-01 | × | 1 |
| Arduino Nano R3 | × | 1 |
| Weerstand 4.75k ohm | × | 1 |
| Weerstand 51K | × | 1 |
| LM2596 DC-DC Buck Converter Step-Down Voedingsmodule | × | 1 |
| DC-jack | × | 1 |
| Schakelaar | × | 1 |
| 12V-2A wandadapter | × | 1 |
| PCB | × | 1 |
| Mannelijke header 40 positie 1 rij (0.1") | × | 1 |
| Vrouwelijke header 8 positie 1 rij (0.1") | × | 5 |
| Kunststof doos | × | 1 |
Nodige tools en machines
| Draadstripper |
| Lijmpistool (standaard) |
| Solderbout (standaard) |
| Schroevendraaier |
| Vijl (voor handwerk) |
Apps en online diensten
| Arduino IDE |
| ThingSpeak API |
Over dit project
Intro: Maak een Persoonlijk Weerstation
Je zit in je kamer en begint te zweten of je voelt je verkouden; je vraagt je af wat de temperatuur in je kamer is? Of wat de vochtigheid zou zijn? Dit is me een tijd geleden overkomen.
Dit leidde tot de geboorte van het Persoonlijk Weerstation, dat de temperatuur, vochtigheid, luchtdruk en lichtintensiteit van je kamer meet en uploadt naar een privékanaal op thingspeak.com.
Laten we beginnen.
Stap 1: Snelle video
Hier is een korte video die alles in 5 minuten samengevat. Klik hier om te kijken op YouTube.
Stap 2: Elektronische componenten voor het Persoonlijke Weerstation
Beschrijving: We gebruiken de DHT11 voor vochtigheid, de BMP180 voor temperatuur en luchtdruk, en een lichtgevoelige weerstand (LDR) voor een ruime indicatie van lichtintensiteit. De Arduino Nano verzamelt data van deze sensoren en stuurt deze naar de ESP8266 voor upload naar je privékanaal op thingspeak.com. We voeden de Arduino Nano vanuit een 12V-2A wandadapter, sensoren en ESP8266 ontvangen hun spanning van de LM2596 buck converter.

Stap 3: Tools en extra items voor het Persoonlijke Weerstation
Beschrijving: We gebruiken een draadstripper voor het afstippen van draden, een vijl voor het gladmaken van snijden/gaten in de behuizing, een lijmpistool voor het fixeren van componenten in de behuizing, een schroevendraaier om het deksel te sluiten en een solderbout met soldeerdraad om de circuit op een universele printplaat (GCB) te monteren. Een 4x4x2 inch kunststof doos fungeert als behuizing. We hebben ook mannelijke en vrouwelijke bergstrips en vrouwelijke connectors nodig voor een correcte montage op de GCB.

Stap 4: Software-eisen
Beschrijving: Om de sensorwaarden te zien, hebben we een privékanaal op thingspeak.com nodig. We hebben de Arduino IDE nodig om de Arduino-code voor de Arduino Nano te schrijven. (Ik ga ervan uit dat je over een PC/laptop en een WiFi-router met internettoegang beschikt).
- Privékanaal op Thingspeak.com
- Arduino IDE (bij voorkeur laatste versie)
Je kunt de nieuwste versie van de Arduino IDE downloaden van arduino.cc. Nu laten we een privékanaal aanmaken op thingspeak.com.
Stap 5: Privékanaal aanmaken op Thingspeak.com
Volg deze stappen om een privékanaal aan te maken:
- Open je webbrowser, ga naar thingspeak.com en klik op 'Sign Up' rechtsboven (afbeelding 1)
- Vul de gegevens in en klik op 'Create account' (afbeelding 2)
- Klik nu op 'New Channel' (afbeelding 3)
- Vul weer de kanaaldetails in en activeer 4 velden (we sturen 4 sensorwaarden), scroll naar beneden en klik op 'Save Channel' (afbeelding 4/5)
- Op deze pagina klik je op 'API Keys' en noteer je 'Write API Key'






Dat is alles, nu heb je je privékanaal op ThingSpeak.
Stap 6: Schema voor het Persoonlijke Weerstation
Hier is het schema. De verbindingen zijn vrij eenvoudig:
- BMP180 verbindt met de I2C-poort van de Arduino Nano
- LDR is aangesloten in spanningsdeler-configuratie met 51 KOhm-weerstand en het knooppunt verbindt met A1-pin van de Arduino Nano
- DHT11's datapin wordt hoog getrokken met 4.7 KOhm-weerstand en verbindt met A0-pin van de Arduino Nano
- ESP8266's TX en RX verbinden met D10 en D11 van de Arduino Nano respectievelijk. ESP8266's CH_PD verbindt met 3.3V-rail
- Stel de LM2596-module uitgang in op 3.3V door de potentiometer op deze module te draaien. Verbind de uitgang van deze module met Vcc en GND van BMP180, DHT11, LDR en ESP8266's Vcc en GND respectievelijk
- Invoer van LM2596-module komt van 12V-2A wandadapter die ook verbindt met Vin en GND van Arduino Nano

We moeten deze circuit op een universele printplaat (GCB) monteren. Laten we dat doen.
Stap 7: Circuit monteren op Universele Printplaat (GCB)
De hardware-tools en extra items uit stap 3 komen nu aan bod.
- Gebruik vrouwelijke bergstrip voor plaatsing van Arduino Nano en ESP8266 op GCB
- Gebruik solderbout en soldeerdraad om ze elektrisch met de print te verbinden
- Gebruik vrouwelijke connectors om de bereik van alle sensoren en LM2596-module uit te breiden (ze zullen op het deksel en de wand van de behuizing worden geplakt)
- Gebruik mannelijke bergstrip om aansluitpunten te maken voor de vrouwelijke uitbreidingen
- Realiseer het schemaschema op GCB met draden (stip ze met draadstripper), of rail van gesmolten soldeerdraad
- Controleer op kortsluitingen voordat je de circuit onder spanning zet met een multimeter




Stap 8: Code
De code voor het Persoonlijk Weerstation is vrij eenvoudig. Ik heb de code goed gecommentarieerd voor gemakkelijke porteerbaarheid. Voer je de code uit, let dan op het volgende:
- Zorg dat alle bibliotheken geïnstalleerd zijn
- Vervang de streepjes door de SSID van je toegangspunt (WiFi-router) in regel 14 van de code
- Vervang de streepjes door het WACHTWOORD van je WiFi-netwerk in regel 15 van de code
- Vervang de streepjes door je ThingSpeak privékanaal Write API key in regel 17
- Tijdens het programmeren van de Arduino Nano, zorg dat je 12V DC-voeding UIT staat
Hier is de link naar GitHub (Persoonlijk Weerstation) voor het downloaden van de code en bibliotheken die ik gebruikte:
https://github.com/jayraj4021/Personal-Weather-Station-14
Stap 9: Behuizing voorbereiden
Nu moeten we gaten van verschillende vormen en maten maken in de 4x4x2 inch doos. We hebben gaten nodig voor de DC-jack en schakelaar op een willekeurige wand van de behuizing. We hebben ook gaten nodig voor de sensoren op het deksel van de behuizing.

Gebruik een hete mes om door het plastic te snijden. Gebruik een vijl om de gaten glad te maken.




Stap 10: Het deksel sluiten
Plaats je gemonteerde GCB in de behuizing. Plaats schakelaar en DC-jack in de gaten in de wand; sensoren in de gaten van het deksel. Finaliseer hun positie en gebruik de lijmpistool om ze te fixeren. Gebruik ten slotte de schroevendraaier om het deksel te sluiten.
Daar heb je het, je Persoonlijk Weerstation. Schakel de voeding in en bekijk de temperatuur, vochtigheid, luchtdruk en lichtintensiteit van je kamer van overal ter wereld via je smartphone/PC/laptop/tablet op je ThingSpeak privékanaal.
Dat was het voor dit project. Laat een reactie achter bij vragen. Bedankt voor het lezen.
Code
CodeArduino
#include <SoftwareSerial.h>
#include <Wire.h>
#include <dht.h>
#include <Adafruit_BMP085.h>
#define DEBUG 0 // verander naar 1 om debuggen via serial monitor in te schakelen
#define dht_pin A0 // definieer pin A0 voor DHT-sensor
#define lightSensor A1 // definieer pin A1 als invoerpin voor LDR-spanningsdeler
dht DHT;
Adafruit_BMP085 bmp;
SoftwareSerial esp8266Module(10, 11); // RX, TX
String network = "----"; // jouw toegangspunt SSID
String password = "-------------"; // jouw WiFi-toegangspunt wachtwoord
#define IP "184.106.153.149" // IP-adres van thingspeak.com
String GET = "GET /update?key=----------------"; // vervang met jouw kanaalsleutel
void setup() {
if(DEBUG){
Serial.begin(9600);
}
esp8266Module.begin(9600);
if (!bmp.begin()) {
if(DEBUG){
Serial.println("Could not find a valid BMP085 sensor, check wiring!");
}
while (1) {}
}
delay(2000);
}
void loop() {
setupEsp8266();
DHT.read11(dht_pin);
double humi = DHT.humidity;
double bmp_temp = bmp.readTemperature();
double bmp_pressure = bmp.readPressure();
int lightIntensity = analogRead(lightSensor);
updateTemp(String(bmp_temp), String(lightIntensity), String(bmp_pressure), String(humi));
delay(30000);
}
void setupEsp8266() {
if(DEBUG){ Serial.println("Reseting esp8266"); }
esp8266Module.flush();
esp8266Module.println(F("AT+RST"));
delay(7000);
if (esp8266Module.find("OK")) {
if(DEBUG){ Serial.println("Found OK"); Serial.println("Changing espmode"); }
esp8266Module.flush();
changingMode();
delay(5000);
esp8266Module.flush();
connectToWiFi();
} else {
if(DEBUG){ Serial.println("OK not found"); }
}
}
bool changingMode() {
esp8266Module.println(F("AT+CWMODE=1"));
if (esp8266Module.find("OK")) {
if(DEBUG){ Serial.println("Mode changed"); }
return true;
} else if(esp8266Module.find("NO CHANGE")){
if(DEBUG){ Serial.println("Already in mode 1"); }
return true;
} else {
if(DEBUG){ Serial.println("Error while changing mode"); }
return false;
}
}
bool connectToWiFi() {
if(DEBUG){ Serial.println("inside connectToWiFi"); }
String cmd = F("AT+CWJAP=\"");
cmd += network;
cmd += F("\",\"");
cmd += password;
cmd += F("\"");
esp8266Module.println(cmd);
delay(15000);
if (esp8266Module.find("OK")) {
if(DEBUG){ Serial.println("Connected to Access Point"); }
return true;
} else {
if(DEBUG){ Serial.println("Could not connect to Access Point"); }
return false;
}
}
void updateTemp(String voltage1, String voltage2, String voltage3, String voltage4) {
String cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += IP;
cmd += "\",80";
esp8266Module.println(cmd);
delay(5000);
if(esp8266Module.find("Error")){
if(DEBUG){ Serial.println("ERROR while SENDING"); }
return;
}
cmd = GET + "&field1=" + voltage1 + "&field2=" + voltage2 + "&field3=" + voltage3 + "&field4=" + voltage4 + "\r\n";
esp8266Module.print("AT+CIPSEND=");
esp8266Module.println(cmd.length());
delay(15000);
if(esp8266Module.find(">")) {
esp8266Module.print(cmd);
if(DEBUG){ Serial.println("Data sent"); }
} else {
esp8266Module.println("AT+CIPCLOSE");
if(DEBUG){ Serial.println("Connection closed"); }
}
}
Bibliotheek en code voor Persoonlijk Weerstation
Bekijk de Readme: https://github.com/jayraj4021/Personal-Weather-Station-14
Schema's

schematic.fzz
Productieproces
- DIY Zonne-energie Weerstation Met Raspberry Pi
- Een buitenweerstation bouwen met Raspberry Pi 2 en ADS-WS1
- Een Raspberry Pi-weerstation bouwen dat dagelijkse weergegevens e-mailt
- Uw weerstation integreren met CWOP: Een praktische gids
- Weerstation – DIY Raspberry Pi Weerstation met Dropbox-upload
- Geavanceerd Weerstation v2.0: Real-time Temperatuur, Druk, Vochtigheid & Hoogte Monitoring
- Slimme Jaloezieën: Geautomatiseerd Lichtbeheer met Arduino & Zonne-energie
- DHT11-sensorgegevens uploaden naar ThingSpeak met Arduino MKR1000
- Bouw een $10 Draagbare Arduino Weerstation (AWS) – Eenvoudige DIY met Nano, DHT22, BMP180 & LCD
- eDOT: Precieze Arduino-klok & weerstation met ingebouwde IR-remote
- Realtime Weerstation met Arduino & ThingSpeak IoT