Inhoudsopgave:
- Stap 1: Onderdeelselectie, gereedschappen en materialen
- Stap 2: Onze hardware aansluiten
- Stap 3: Alles aansluiten: de Pi. instellen
- Stap 4: Software / Code
- Stap 5: De behuizing
Video: RPi-weerstation met responsieve website - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:18
Voor een schoolproject moesten we een IoT-apparaat maken met een website om de verzamelde informatie op een mooie manier te visualiseren. Ik koos ervoor om een weerstation te maken dat wordt aangedreven door een Raspberry Pi 3 met Flask voor de responsieve website, MySQL (MariaDB) voor mijn database en een python-script voor het verzamelen van informatie met al mijn sensoren. Het kostte me ongeveer 2 weken van begin tot eind om te voltooien.
We werden aangemoedigd om een instructable te maken om onze voortgang te delen met de rest van de DIY-gemeenschap, dus hier is het!
Stap 1: Onderdeelselectie, gereedschappen en materialen
Eerst moest ik uitzoeken wat voor soort sensoren essentieel waren voor een weerstation. Ik besloot dat ik alle volgende gegevens wilde meten:
- Temperatuur
- Luchtdruk
- Vochtigheid
- Windsnelheid
- UV-index
Hier zijn alle gereedschappen, materialen en onderdelen die ik heb gebruikt
Onderdelen:
- DHT22/AM2302 voor temperatuur- en vochtmetingen. (15 euro)
- Adafruit BMP280 voor luchtdruk en temperatuur. (12 euro)
- Adafruit SI1145 voor het meten van de UV Index. (10 euro)
- Adafruit Analoge Anemometer voor het meten van windsnelheid (50 EUR)
- Een MCP3008 voor het omzetten van analoge signalen naar digitale.
- 10kOhm Weerstand als pull-up voor mijn AM2302.
- Een 9V Adapter om de Anemometer van stroom te voorzien
- Een 5V-adapter voor de Raspberry Pi
- Raspberry Pi 3 (elke Pi zou moeten volstaan)
Materialen:
Een kunststof bak om alles in op te bergen en regenbestendig te maken
Gereedschap:
- Soldeerbout en tin
- Multimeter
- siliconen
- wat band
Dus in totaal hebben alle sensoren me ongeveer 85 euro gekost, wat behoorlijk steil is, maar ik wilde echt een goede windsnelheidsmeter toevoegen, dus ik denk dat het de moeite waard is.
Een meer gedetailleerde lijst met winkels waar je alles kunt kopen, vind je in de pdf hieronder:)
Stap 2: Onze hardware aansluiten
Natuurlijk moeten we onze sensoren aansluiten op onze Raspberry Pi. Hierboven zie je het fritzing-schema dat je kunt volgen om alles goed aan te sluiten.
Op het schema kunt u zien dat een 9V-batterij wordt gebruikt als stroombron voor onze anemometer, dit kan het beste alleen worden gebruikt om te testen, omdat het niet te lang meegaat, u kunt de 9V-batterij vervangen voor elke 7-12V-stroombron die u Kiezen.
Onze SI1145- en BMP280-sensoren worden beide bestuurd met behulp van het I2C-protocol, omdat dit het gemakkelijkst is om mee te werken en minder draden nodig heeft.
De anemometer op het schema wordt hier als een LDR weergegeven, omdat deze vrijwel identieke bedrading heeft als de anemometer en ik geen echte anemometer kon vinden om op mijn grillige schema te plaatsen:)
Stap 3: Alles aansluiten: de Pi. instellen
Allereerst moeten we ervoor zorgen dat we verbonden zijn met internet.
Om dit in de terminal te doen, kun je naar je wpa_supplicant-bestand gaan door het volgende commando uit te voeren: sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
In het bestand kun je dit toevoegen:
network={ssid= "Your_Wifi_SSID" psk="Your_Wifi_Password" key_mgmt=WPA-PSK
}
Je kunt er ook voor kiezen om je IP-adres op statisch in te stellen voor een betere toegang in de toekomst. Om dit te doen moet je naar het bestand dhcpcd.conf gaan door dit commando uit te voeren: sudo nano /etc/dhcpcd.conf
Voeg dit toe aan het bestand:
interface wlan0static ip_address=192.168.0.100/24
Dan gaan we ervoor zorgen dat de pakketten die al op onze Pi zijn geïnstalleerd, volledig worden bijgewerkt:
sudo apt-get update && sudo apt-get upgrade
Dit kan even duren, dus maak je geen zorgen
U moet het I2C- en SPI-protocol in raspi config inschakelen. U kunt dit doen door deze opdracht uit te voeren:
sudo raspi-config
Ga dan naar interface-opties en schakel beide in, I2C en SPI
Eerst moet je een map maken waarin je je project wilt plaatsen (we zullen het 'weatherstation' noemen):
cd ~mkdir weerstationcd weerstation
Vervolgens hebben we onze virtuele python3-omgeving opgezet:
python3 -m pip install --upgrade pip setuptools wiel virtualenvpython3 -m venv --system-site-packages envsource env/bin/activatepython -m pip install mysql-connector-python Flask flask-mysql mysql-connector-python passlib mysql-connector -python-rf
Dan zullen we een aantal andere pakketten moeten installeren die nodig zijn om alles correct te laten functioneren:
sudo apt install -y python3-venv python3-pip python3-mysqldb mariadb-server uwsgi nginx uwsgi-plugin-python3
Nu gaan we onze database maken:
We moeten onze database echter nog instellen. U kunt dit doen door het code/sql-bestand in de 'sql'-map als volgt uit te voeren:
sudo mariadb < sql/db_init.sql
De sql-query maakt de tabellen die we nodig hebben en maakt ook een paar gebruikers om onze database een beetje veiliger te maken.
Dit zal ook enkele voorbeeldgeschiedenisgegevens in onze database plaatsen om ervoor te zorgen dat onze website alles correct weergeeft wanneer er nog geen echte gegevens zijn verzameld.
Om Adafruit_GPIO en MyPyDHT te installeren moet je nog wat dingen doen. Ga eerst terug naar je gebruiksmap en dan:
git clone https://github.com/adafruit/Adafruit_Python_GPIO.gitcd Adafruit_Python_GPIO sudo python3 setup.py install
cd..git clone --recursive https://github.com/freedom27/MyPyDHTsudo python3 setup.py install
Stap 4: Software / Code
We moeten de back-end voor het weerstation opzetten, inclusief:
- Een mariadb-database voor het opslaan van mijn sensormetingen en enkele andere kleine dingen - Een kolfservice voor het uitvoeren van de website. - Een andere service die het Python-bestand uitvoert dat alle sensoren uitleest. Hierboven ziet u mijn zeer eenvoudige database-configuratie. De gebruikerstabel is onnodig, maar aangezien ik een inlogsysteem wilde omdat ik (ook al zijn alle gegevens voor alle gebruikers hetzelfde) heb ik besloten om het in mijn database op te nemen.
Je kunt doorgaan en de code van mijn project van Github naar je projectmap klonen. Ga naar je gebruikersmap en voer:git clone https://github.com/BertVanhaeke/Weatherstation/ tempmv -v temp/* weatherstation/ uit
Navigeer vervolgens naar de map conf in het weerstation en alle bestanden in de map.
Wijzig alle gevallen van 'USERNAME' in uw gebruikersnaam
U moet ook beide.service-bestanden naar systemd kopiëren en ze als volgt testen:
sudo cp conf/weatherstation-*.service /etc/systemd/system/sudo systemctl daemon-reloadsudo systemctl start weerstation-flask.servicesudo systemctl start weerstation-sensor.service
sudo systemctl status weerstation-*
We moeten dan de nginx-configuratie bewerken.
sudo cp conf/nginx /etc/nginx/sites-available/weatherstationsudo rm /etc/nginx/sites-enabled/defaultsudo ln -s /etc/nginx/sites-available/weatherstation /etc/nginx/sites-enabled/cnl herstart nginx.servicesudo systemctl status nginx.service
Als alles goed is gegaan, zou je dit moeten kunnen uitvoeren en wat html in de terminal kunnen afdrukken:
wget -qO - localhost
Alles zou nu goed moeten werken. U kunt naar het IP-adres van uw Raspberry Pi surfen dat we in het begin hebben ingesteld en worden begroet met een inlogscherm.
Stap 5: De behuizing
Nu alles werkt, moeten we het hele ding ergens in stoppen.
Ik koos voor een eenvoudige plastic doos met een transparant deksel. De anemometer is erop gemonteerd, net als een secundair klein bakje met de DHT22- en BMP280-sensoren.
Deze sensoren zijn in een aparte container gemonteerd omdat ze in de open lucht moeten zijn (zonder dat er op geregend moet worden), maar de raspberry pi hoeft dat niet te zijn.
Zoals je kunt zien heb ik wat siliconen aan de randen toegevoegd om het waterdicht te maken. Ik heb ook wat gaten in de bovenste container geboord om er frisse lucht in te krijgen.
Ik hoop dat je genoten hebt van mijn gids over het bouwen van een weerstation, het is misschien een beetje ruw aan de randen omdat het de eerste keer is dat ik een gids als deze schrijf, maar ik hoop dat je het desalniettemin leuk vond:)
Aanbevolen:
Website-gestuurde kerstboom (iedereen kan hem bedienen): 19 stappen (met afbeeldingen)
Website-gestuurde kerstboom (iedereen kan het bedienen): Wil je weten hoe een website-gestuurde kerstboom eruitziet? Hier is de video die mijn project van mijn kerstboom laat zien. De livestream is inmiddels afgelopen, maar ik heb een video gemaakt om vast te leggen wat er aan de hand was: Dit jaar, midden december
Een strakke en eenvoudige website maken met Bootstrap 4: 7 stappen
Hoe maak je een slanke en eenvoudige website met Bootstrap 4: Het doel van deze Instructable is om degenen die bekend zijn met programmeren - HTML of anderszins - een eenvoudige introductie te geven voor het maken van een online portfolio met Bootstrap 4. Ik zal je door de eerste installatie leiden van de website, hoe u een paar
Een website bouwen op een Raspberry Pi, met Node.js, Express en MongoDB Deel 1: 6 stappen
Een website bouwen op een Raspberry Pi, met Node.js, Express en MongoDB… Deel 1: Welkom bij DEEL 1 van mijn node.js webapp-tutorial. Deel 1 gaat door de benodigde software die wordt gebruikt voor de ontwikkeling van node.js-apps, hoe je port forwarding gebruikt, hoe je een app bouwt met Express en hoe je je app uitvoert. Het tweede deel van dit
Arduino-project: elektronica bedienen via internet met Nodejs + SQL-database en website: 6 stappen
Arduino-project: elektronica besturen via internet met behulp van Nodejs + SQL Database en website.: Project door: Mahmed.tech Datum gemaakt: 14 juli 2017 Moeilijkheidsgraad: beginner met enige programmeerkennis. Hardwarevereisten: - Arduino Uno, Nano, Mega (ik denk dat de meeste MCU's met de seriële verbinding zullen werken) - Enkele LED & Stroombegrenzingsres
Een website opzetten met Google's Page Creator: 6 stappen
Een website opzetten met Google's Page Creator: een website opzetten met de nieuwe Page Creator van Google Labs. (Hoe maak je gratis een eenvoudige 100 MB-website en heb je hem in een middag klaar.) Inclusief hoe, pagina naar pagina linken, linken naar andere pagina's, linken naar geüploade html-bestanden, afbeeldingen opnemen, een