W pierwszej części poradnika opisałem samą stację meteo oraz program dla modułu Wemos D1 mini Pro. W tej części opiszę konfigurację Raspberry Pi 3 B+ na potrzeby serwera bazy danych oraz serwera WEB dla naszej stacji meteo. Podam także ogólne wskazówki, jak skonfigurować domowy router aby nasz serwer WWW na “malince” był widziany w sieci Internet.
Co będziemy potrzebowali:
- Raspberry Pi 3 B+ (lub model wcześniejszy),
- zasilacz 5V, 2A (polecam oryginalny zasilacz Raspberry),
- karta pamięci microSD o pojemności minimum 16GB,
- czytnik kart pamięci SD + przejściówka microSD <-> SD,
- obudowa na naszą “malinkę” (nie jest to punkt obowiązkowy ;-) ).
Założenia konfiguracyjne Raspberry Pi jako serwera:
- usługa serwera bazy danych MySQL (MariaDB),
- usługa serwera WWW http oraz https,
- interpreter języka PHP,
- obsługa certyfikatów SSL Let’s Encrypt.
Konfiguracja:
Pierwszą czynnością jest pobranie obrazu systemu operacyjnego Raspbian (aktualnie w wersji Debian Stretch) z oficjalnej strony fundacji Raspberry Pi. Pobieramy wersję Lite, gdyż nie będziemy potrzebować zbędnych programów z pełnej wersji systemu, a potrzebne pakiety doinstalujemy sobie w trakcie konfiguracji [bezpośredni link do pliku].
Do przygotowania karty microSD z systemem operacyjnym dla naszej malinki najwygodniej będzie użyć programu Ether pobranego ze strony https://etcher.io/ – polecam pobranie wersji portable odpowiedniej dla naszego systemu operacyjnego Windows na komputerze PC.
Następny krok to rozpakowanie archiwum zip z obrazem Raspbiana do dowolnego folderu, podłączenie czytnika kart (chyba że macie wbudowany), zainstalowanie karty w czytniku i uruchomienie programu Ether (z uprawnieniami Administratora). Sam program jest bardzo prosty w obsłudze. Przyciskiem Select Image wybieramy plik iso z folderu do którego rozpakowaliśmy pobrany plik zip z Raspbianem. Następnie przyciskiem Select Drive wskazujemy naszą kartę microSD (program powinien ją znaleźć samodzielnie) i klikamy w przycisk Flash!. Cały proces przygotowania karty SD z systemem wraz z weryfikacją poprawności może potrwać kilkanaście minut.
UWAGA!
Następuje formatowanie karty microSD, a więc wszystkie dane z karty zostaną usunięte.
W trakcie przygotowania karty microSD pojawią się monity z naszego Windows’a o konieczności sformatowania dysku – bezwzględnie ignorujemy te komunikaty. Po zakończeniu procesu zamykamy program Etcher i wyciągamy, a następnie ponownie wkładamy naszą kartę SD do czytnika (ponownie ignorując komunikaty o konieczności formatowania dysku). Na naszej karcie pamięci mamy dostępną dla Windows partycję rozruchową boot. Na tej partycji musimy utworzyć nowy, pusty plik o nazwie ssh bez żadnego rozszerzenia! Plik ten informuje system Debian Stretch, że po starcie systemu włączona ma być powłoka SSH do zdalnego zarządzania naszym Raspberry.
Ważne!
W celu poprawnego utworzenia takiego pliku musimy mieć w naszym systemie operacyjnym na PC włączone pokazywanie rozszerzeń wszystkich plików.
Możemy teraz włożyć kartę microSD do czytnika w Raspberry Pi, podłączyć kabel sieciowy do domowego routera oraz włączyć zasilanie. Nasza „malinka” zacznie uruchamiać system operacyjny i po chwili jest gotowa do pracy.
Następną czynność jaką musimy wykonać, to sprawdzenie jaki adres IP został przypisany naszemu minikomputerowi. Można to zrobić na kilka sposobów. Możemy zalogować się do naszego routera i sprawdzić, jaki adres IP został przydzielony naszej „malince”, możemy wykorzystać oprogramowanie do skanowania adresów w naszej sieci domowej. Jednak najprostszym rozwiązaniem jest uruchomienie wiersza poleceń (cmd) na naszym PC i wpisanie komendy arp -a. Zobaczymy listę znanych urządzeń, a wśród nich powinno być nasze Raspberry, którego adres MAC (Physical Address) zaczyna się od ciągu b8-27-eb. Z kolumny Internet Address odczytujemy IP naszego Raspberry.
Znając adres MAC Raspberry Pi należy włączyć manualne przydzielanie adresów IP na naszym domowym routerze. Mamy wtedy pewność, że Raspberry będzie widoczne zawsze pod tym samym adresem. Takie ustawienie będzie także potrzebne do przepuszczenia ruchu z Internetu do naszego serwera (więcej na ten temat w dalszej części artykułu). Po szczegóły konfiguracji routerów odsyłam do ich instrukcji.
Kolejny krok, to instalacja klienta SSH pod Windows czyli programu Putty. Program pobieramy z oficjalnej strony https://www.putty.org/ w wersji właściwej dla naszego systemu Windows. Pozostaje zainstalowanie i uruchomienie programu.
W oknie Host name (or IP address) wpisujemy adres IP naszej “malinki”. W oknie Saved sessions możemy nadać nazwę naszego połączenia SSH do Raspberry Pi i zapisać ją przyciskiem Save. Warto to zrobić, gdyż do danej sesji możemy przypisać mnóstwo różnych ustawień naszego klienta SSH. Ja np. zmieniam sobie czcionkę na bardziej mi pasującą.
Po zapisaniu naszej konfiguracji klikamy w przycisk Open i łączymy się zdalnie z naszym minikomputerem. Przy pierwszym połączeniu zobaczymy ostrzeżenie dotyczące nieznanego urządzenia. Musimy wyrazić zgodę na połączenie. Jeśli widzimy ekran jak poniżej, to mamy pełen sukces. Możemy zacząć całkowicie zdalnie konfigurować naszego Raspberry Pi.
Domyślny login to pi, a hasło raspberry. Przy wprowadzaniu hasła nie pojawiają się żadne znaki (brak gwiazdek maskujących hasło). Jest to normalne zachowanie w przypadku systemów linuxowych. Po wprowadzeniu poprawnego hasła zobaczymy linię poleceń, czyli tzw. shell naszej „malinki”. Teraz możemy za pomocą poleceń wprowadzanych z klawiatury dokonywać czynności Administratora naszego Raspberry.
Poniżej będę podawał polecenia, jakie należy wprowadzać, z krótkim opisem czego dotyczą.
1 |
sudo rpi-update |
Aktualizacja firmware “malinki”, może chwilę potrwać w zależności od szybkości naszego łącza.
Po pomyślnej aktualizacji restartujemy minikomputer poleceniem:
1 |
sudo reboot |
Po ok. 2 minutach łączymy się ponownie przez Putty z naszą malinką. Po zalogowaniu wpisujemy:
1 |
sudo apt-get update |
Aktualizacja listy pakietów z oficjalnego repozytorium.
1 |
sudo apt-get dist-upgrade |
Instalacja aktualizacji jeśli są dostępne (możemy być poproszeni o akceptację aktualizacji klawiszem Y).
Po zakończeniu aktualizacji ponownie restartujemy minikomputer poleceniem:
1 |
sudo reboot |
2 minuty czekania i z powrotem logujemy się do naszego Raspberry Pi i po zalogowaniu wpisujemy:
1 |
passwd |
Amiana hasła użytkownika pi. Podajemy stare hasło, a następnie dwukrotnie nowe hasło. Ze względu że do naszego minikomputera będzie otwarty dostęp z sieci Internet, proponuję ustawić mocno skomplikowane hasło.
Następnie uruchamiamy prostego konfiguratora poleceniem:
1 |
sudo raspi-config |
Czynności w konfiguratorze:
2 Network Options
N1 Host Name -> OK i wprowadzamy nazwę naszego Raspberry (oczywiście możemy zostawić nazwę domyślną),
3 Boot Options -> B1 Desktop / CLI -> B1 Console i klawisz Enter,
4 Localisation Options -> I2 Change Timezone -> Europe -> Warsaw,
4 Localisation Options -> I4 Change Wi-fi Country -> PL Poland,
7 Advanced Options -> A3 Memory Split -> zmieniamy na najniższą możliwość wartość 16 (nie używamy przecież środowiska graficznego).
Następnie wybieramy Finish i odpowiadamy twierdząco (Yes) na konieczność ponownego uruchomienia systemu.
Konfiguracja czasu:
Nasza „malinka” nie posiada zegara czasu rzeczywistego (RTC), więc dobrze jest skonfigurować system, aby synchronizował czas z serwera NTP w sieci Internet. W konsoli SSH wpisujemy komendę:
1 |
sudo apt-get install rdate |
i czekamy chwilę na zainstalowanie niezbędnych pakietów. Po zakończeniu instalacji wpisujemy:
1 |
sudo rdate -s ntp.task.gda.pl |
Parametr -s powoduje zapisanie serwera ntp.task.gda.pl jako głównego serwera synchronizacji czasu dla naszego minikomputera. Sprawdzenie aktualnego czasu możemy wykonać komendą:
1 |
date |
Klucze SSH, czyli dostęp do Raspberry Pi bez użycia hasła:
Wykonując częste połączenia SSH, każdorazowe wpisywanie hasła może być irytujące. Istnieje jednak proste i bardzo wygodne rozwiązanie tego problemu. Zanim przejdziemy jednak do opisu jak wygenerować i używać kluczy SSH, kilka słów o samych kluczach. W największym uproszczeniu klucze SSH działają tak samo jak PGP/GPG, czyli tworzymy komplet kluczy (prywatny i publiczny). Dostęp do klucza prywatnego możemy mieć tylko my. Nie możemy go nikomu przekazać ani udostępnić. To dzięki niemu możemy rozszyfrować np. zaszyfrowaną korespondencję e-mail, więc nie możemy go nikomu dać. Klucz publiczny, to ten który przekazujemy innym, żeby mogli wysłać nam coś zaszyfrowanego. Podsumowując, klucz prywatny zatrzymujemy dla siebie, a klucz publiczny udostępniamy innym.
Wygenerowanie kluczy SSH wykonujemy programem PuTTYgen (zainstalowanym wraz z programem Putty). Uruchamiamy program i klikamy przycisk Generate. W celu losowego generowania znaków potrzebnych do stworzenia pary kluczy poruszamy kursorem po oknie aplikacji. Po wygenerowaniu kluczy zapisujemy nasz klucz prywatny na dysku komputera PC przyciskiem Save private key. Pomijamy wprowadzenie hasła do klucza prywatnego, gdyż w systemie Windows taka opcja będzie nam tylko przeszkadzała. Z okna Public key… kopiujemy do schowka klucz publiczny i wklejamy go np. w Notatniku (polecam jednak używanie np. programu Notepad++ zamiast systemowego Notatnika). Program PuTTYgen możemy już zamknąć. Natomiast teraz uruchamiamy PuTTY. Ładujemy naszą konfigurację sesji SSH przyciskiem Load, a następnie w drzewku konfiguracyjnym po lewej stronie rozwijamy sekcję SSH i klikamy w podsekcję Auth. Klikamy w przycisk Browse… obok pola Private key file for authentication i wybieramy nasz klucz prywatny zapisany na dysku naszego PC.
Następnie przechodzimy do sekcji Session, wybieramy naszą konfigurację sesji i zapisujemy nowe ustawienia przyciskiem Save. Otwieramy naszą sesję i logujemy się użytkownikiem pi oraz wcześniej ustanowionym hasłem. W konsoli SSH po prowadzeniu nazwy użytkownika powinniśmy zobaczyć komunikat: Server refused our key. Teraz pozostaje nam przesłać na nasze Raspberry Pi skopiowany wcześniej klucz publiczny. W tym celu wpisujemy poniższe polecenia:
1 |
install -d -m 700 ~/.ssh |
Tworzymy folder dla kluczy publicznych z właściwymi uprawnieniami,
1 |
nano ~/.ssh/authorized_keys |
Uruchamiamy edytor tekstowy Nano z opcją utworzenia pliku authorized_keys we wcześniej utworzonym folderze .ssh,
W oknie edytora wklejamy nasz klucz publiczny i zapisujemy plik (Ctrl + O) i potwierdzamy klawiszem Enter, a następnie zamykamy edytor (Ctrl + X). Aby sprawdzić poprawność konfiguracji zamykamy naszą sesję poleceniem:
1 |
logout |
Następnie logujemy się ponownie do naszej „malinki”. Po wpisaniu nazwy użytkownika nie jesteśmy już pytani o hasło.
Instalacja Midnight Commander – coś dla pamiętających czasy Norton Commander’a
Dla osób dużo korzystających z systemów okienkowych poruszanie się po katalogach i dyskach naszego Raspbiana nie jest zbyt wygodne. Z pomocą przychodzi prosty menadżer plików Midnight Commander wzorowany na starym, dobrym Norton Commanderze. Aby zainstalować MC wpisujemy polecenie:
1 |
sudo apt-get install mc |
i potwierdzamy klawiszem Y chęć instalacji. Po pomyślnym zainstalowaniu programu możemy go uruchomić poleceniem:
1 |
mc |
(lub sudo mc, jeśli chcemy mieć podniesione uprawnienia do root’a w systemie).
Instalacja i konfiguracja serwera WWW, interpretera PHP oraz serwera baz danych MariaDB
1 |
sudo apt-get install lighttpd |
Instalacja serwera Lighttpd (wybrałem ten serwer zamiast Apache ze względu na szybsze działanie).
1 |
sudo apt-get install php7.0-cgi |
Instalacja PHP w wersji 7
1 |
sudo lighttpd-enable-mod fastcgi |
Uruchomienie PHP w trybie fast-cgi
1 |
sudo lighttpd-enable-mod fastcgi-php |
Uruchomienie PHP w trybie fast-cgi
1 |
sudo service lighttpd force-reload |
Restart serwera WWW.
1 |
sudo apt-get install php7.0-nazwa_biblioteki |
Instalacja dodatkowych bibliotek PHP. Polecam zainstalowanie: curl, dom, gd, mbstring, mcrypt, mysql, xml.
1 |
sudo nano /etc/php/7.0/cgi/php.ini |
Edycja pliku konfiguracyjnego PHP.
W pliku tym wyszukujemy wpisów (bez znaku # na początku linii): post_max_size i wartość 8M zamieniamy na 64M oraz upload_max_filesize, gdzie wartość 2M zamieniamy na 64M. Oczywiście zapisujemy plik i zamykamy edytor.
Po tych operacjach należy ponownie zrestartować serwer Lighttpd poleceniem:
1 |
sudo service lighttpd force-reload |
Pozostało nam teraz nadać odpowiednie uprawnienia do katalogów, w których będziemy trzymać pliki z naszą stroną WWW:
1 2 3 4 5 |
sudo chown www-data:www-data /var/www/html sudo chown www-data:www-data /var/www/cgi-bin sudo chmod 775 /var/www/html sudo chmod 775 /var/www/cgi-bin sudo usermod -a -G www-data pi |
I restartujemy cały serwer poleceniem:
1 |
sudo reboot |
Pora na test działania naszego serwera WWW:
1 |
nano /var/www/html/info.php |
Tworzymy plik info.php w którym wpisujemy:
1 2 3 |
<?php phpinfo(); ?> |
Zapisujemy plik Ctrl + O i zamykamy edytor Ctrl + X. Teraz na naszym komputerze uruchamiamy dowolną przeglądarkę i w pasku adresu wpisujemy: http://adres.ip.naszego.serwera (np. http://192.168.1.56). Powinniśmy zobaczyć stronę domyślną serwera Lighttpd. Następnie wpisujemy adres: http://adres.ip.naszego.serwera/info.php (np. http://192.168.1.56/info.php) – powinniśmy zobaczyć stronę informacyjną o naszym środowisku PHP. Nasz serwer WWW działa w 100% poprawnie.
Aby zainstalować serwer baz danych MariaDB (bezpłatny odpowiednik serwera MySQL) wpisujemy:
1 |
sudo apt-get install mariadb-server |
Po zainstalowaniu serwera logujemy się do niego poleceniem:
1 |
sudo mysql -u root |
Tworzymy super użytkownika pi ze wszystkimi uprawnieniami:
1 |
create user 'pi'@'localhost' identified by 'password'; |
Oczywiście w miejsce słowa password wpisujemy hasło, jakie chcemy nadać użytkownikowi pi.
1 |
grant all privileges on *.* to 'pi'@'localhost' with grant option; |
Przydzielamy maksymalne uprawnienia do wszystkich baz danych użytkownikowi pi.
1 |
flush privileges; |
Przeładowujemy system uprawnień w bazie danych.
Wiersz poleceń serwera MariaDB zamykamy wpisując \q.
Ponieważ tworzenie baz, nadawanie uprawnień z poziomu wiersza poleceń nie jest zbyt wygodne (chociaż polecam poszukać tutoriali w Internecie i samodzielnie popróbować), zainstalujemy świetny odpowiednik phpMyAdmin‘a jakim jest Adminer (https://www.adminer.org).
W tym celu w naszej konsoli wpisujemy:
1 |
cd /var/www/html |
Przechodzimy do katalogu z naszą stroną WWW,
1 |
wget https://www.adminer.org/latest-mysql-pl.php |
Pobieramy najnowszą, aktualną wersję Adminer’a do katalogu z naszą stroną WWW.
1 |
mv latest-mysql-pl.php MySQLAdmin.php |
Zmieniamy nazwę pliku na jakąś przystępną dla nas. Należy pamiętać, że w systemach linuxowych ważne są małe i duże litery przy wywoływaniu skryptu php z poziomu przeglądarki.
Teraz możemy w przeglądarce uruchomić Adminer’a wpisując adres: http://adres.ip.naszego.serwera/MySQLAdmin.php (lub z nazwą skryptu, jaką sobie ustawiliśmy).
Teraz już z poziomu Adminer’a utworzymy nową bazę danych, nowego użytkownika bazy oraz tabelę na potrzeby projektu solarnej stacji meteo. Klikamy więc Utwórz bazę danych. Wpisujemy nazwę bazy danych – na potrzeby projektu baza nazywa się meteo. Ustawiamy porównywanie znaków na utf8_general_ci i klikamy Zapisz zmiany. Teraz klikamy na Serwer, następnie Uprawnienia użytkowników, Dodaj użytkownika. Tworzymy użytkownika meteo_dbuser, ustawiamy hasło dla tego użytkownika (nie polecam ustawiania tego samego hasła, jak dla użytkownika pi). W polu uprawnienia użytkowników wpisujemy ., następnie zaznaczamy uprawnienie All Privileges i klikamy Zapisz zmiany. Ponownie klikamy na Serwer, następnie na naszą bazę danych meteo i Utwórz tabelę. Tabelę tworzymy według poniższego wzoru:
Nazwa tabeli: S_01 // Ważne: nazwa tabeli musi być identyczna, jak wartość zmiennej table_name w pliku konfiguracyjnym config.h dla programu stacji meteo (część pierwsza projektu).
Struktura tabeli:
id | int(20) Auto Increment
timestamp | timestamp [CURRENT_TIMESTAMP]
temperaturę | float
humidity | float
absolute_pressure | float
relative_pressure | float
light_intensity | float
power_supply | float
signal_level | float
Dla leniuszków zapytanie SQL:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
SET NAMES utf8; SET time_zone = '+00:00'; SET foreign_key_checks = 0; SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'; DROP TABLE IF EXISTS `S_01`; CREATE TABLE `S_01` ( `id` int(20) NOT NULL AUTO_INCREMENT, `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `temperature` float NOT NULL, `humidity` float NOT NULL, `absolute_pressure` float NOT NULL, `relative_pressure` float NOT NULL, `light_intensity` float NOT NULL, `power_supply` float NOT NULL, `signal_level` float NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
Następną czynnością jest utworzenie dwóch plików z kodem php w katalogu /var/www/html:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php //Adres serwera MySQL $db_host = 'localhost'; //Nazwa użytkownika bazy danych $db_user = '________'; //Hasło użytkownika bazy danych $db_pass = '________'; //Nazwa bazy danych $db_name = 'meteo'; //Klucz API (musi być identyczny z kluczem podanym w plku config.h programu dla Wemos D1 mini Pro $write_api_key = '________'; ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<?php include('config.php'); $w_api_key = $_GET['api_key']; $table = $_GET['station_id']; $t = $_GET['t']; $h = $_GET['h']; $ap = $_GET['ap']; $rp = $_GET['rp']; $li = $_GET['li']; $ps = $_GET['ps']; $sl = $_GET['sl']; $conn = mysqli_connect($db_host, $db_user, $db_pass, $db_name); if ($w_api_key == $write_api_key ) { $result = mysqli_query($conn, "INSERT INTO $table(temperature, humidity, absolute_pressure, relative_pressure, light_intensity, power_supply, signal_level) VALUES ($t, $h, $ap, $rp, $li, $ps, $sl)"); if ($result === false){ echo "ERR"; $conn -> close(); } else { echo "OK"; $conn -> close(); } } else { echo "Niepoprawny API-KEY"; } ?> |
Uważny czytelnik zobaczy, że program stacji meteo po połączeniu się z siecią Wi-Fi wywołuje plik espdata.php i przekazuje metodą GET wartości pomiarowe ze stacji (linia 254). Krótkiego omówienia wymaga zastosowanie zmiennej write_api_key w pliku config.h dla programu stacji meteo oraz w pliku config.php. Ponieważ nasz serwer ma być dostępny w sieci Internet, to bez prostego, aczkolwiek skutecznego zabezpieczenia, dowolna osoba mogłaby dopisywać do naszej bazy fikcyjne dane. W związku z tym stacja meteo wysyła także klucz, którego poprawność jest sprawdzana przez skrypt php dopisujący dane pogodowe do bazy danych (no chyba że podsłucha ruch w naszej domowej sieci Wi-Fi, to pozna masz “szyfr” – ale raczej mało prawdopodobne, aby komuś chciało się angażować we włamywanie się do stacji meteo ;-) ). Zmienna table_name w pliku config.h to nic innego jak nazwa tabeli w naszej bazie. Możemy w ten sposób uruchomić kilka stacji w ramach swojej sieci W-Fi i zapisywać dane z każdej z nich do jednej bazy ale do różnych tabel.
Aby sprawdzić, czy skonfigurowaliśmy wszystko poprawnie i nasz serwer jest przygotowany na przyjmowanie danych ze stacji meteo, uruchamiany na PC przeglądarkę i w adresie wpisujemy:
http://adres.ip.naszego.serwera/espdata.php?api_key=klucz_api&station_id=nazwa_tabeli&t=21.20&h=38.33&ap=998.34&rp=1013.21&li=34675&ps=3.99&sl=-65
Na moim testowym serwerze wygląda to tak:
http://192.168.1.56/espdata.php?api_key=key22&station_id=S_01&t=21.20&h=38.33&ap=998.34&rp=1013.21&li=34675&ps=3.99&sl=-65
W przeglądarce powinniśmy otrzymać status OK. Po zalogowaniu się do Adminer’a wybieramy naszą bazę, następnie tabelę (S_01) i klikamy Pokaż dane. Powinniśmy zobaczyć dokładnie taki obrazek:
To już wszystko. Nasz serwer jest gotowy na przyjmowanie danych pomiarowych ze stacji meteo. Jeśli macie wykonaną elektronikę stacji i zaprogramowany moduł Wemos, możecie uruchomić stację meteo. Do bazy powinny spływać co określony w pliku config.h czas dane pomiarowe ze stacji.
Ze względu na znaczą objętość tej części opisu projektu, opublikuję następną (ostatnią) część. W części trzeciej opiszę tematy związane z dostępem z sieci Internet do naszego serwera, a więc:
- konfigurację naszego domowego routera (wpuszczamy ruch z Internetu do Raspberry),
- podpięcie dowolnej nazwy domenowej w dynamicznym DNS,
- instalację certyfikatu SSL Let’s Encrypt,
- konfigurację SSL na naszym Raspberry Pi.
Świetnie opisane. Dzięki bardzo. Są przeciwwskazania uruchomienia tych pakietów na pi 0 W?
Dziękuję za miłą opinię. Nie powinno być żadnych problemów z uruchomieniem stacji na RPi 0 W.
Świetny projekt! Obiema rękami popycham go w stronę strony głównej Majsterkowa!
Smuci tylko ostatni akapit, ten wytłuszczony. Może Autor da się namówić na chociaż pobieżne przybliżenie tematu eksponowania wyników, w tak przejrzysty i czytelny sposób w jaki przedstawia je na malinowemeteo.zgora.pl.
Serdecznie dziękuję za dotychczasowe części.
Ja również dziękuję za miłą opinię. Odnośnie wizualizacji, to mam pewien pomysł, który muszę przegadać z Adminem tego portalu.
Dobry projekt. Podobny projekt zrealizowałem do systemu podlewania. Do wemosa miałem podłączoną czujkę DTH22 i czujkę analogową wilgotności gleby. Aplikację na wemosa napisałem w LUA a obsługę na malince w Pythonie. Dane rejestrowałem w MySQLu. Dorobiłem wykresy ww parametrów. Ale niebo tym chcę pisać. W pewnym projekcie brakowało mi kanałów rejestracji danych na wemosie. Udało mi się rozwiązać ten problem przy pomocy ekspandera. Dzięki czemu mogłem przy pomocy 4ch GPIO sterowac 16_toma liniami pomiarowymi. Dokładny opis rozwiązania podałem na forum LanKontrolera w wątku “przykłady zastosowań przez użytkowników-sztuczne rozszerzenie szyny INxD”. Informację tę podaję wszystkim zainteresowanym przebudową Twojej stacji meteo.
A tak poważnie, gratuluję pomysłu
dobrze opisany materiał szkoleniowy, jeśli na pi tylko server ma być to rasbiana-lite bym zmienił na dietPi – o wiele sprawniej chodzi
ps. mam rój sensorów na esp8266 i hub na pi ale używam MQTT zamiast HTTP i HaaS jako hub – jakoś tak prościej i szybciej wychodzi :)
Metoda GET protokołu http służy z definicji do pobierania danych. Do wysyłania ich na serwer powinno się użyć metody POST. To taka tylko uwaga pro forma.
Zgadzam się z Tobą w 100%. Zastosowałem jednak GET z premedytacją. Projekt wykonywałem z piętnastoletnim dzieckiem. Chciałem w przejrzysty sposób pokazać (także wszystkim początkującym na majsterkowo.pl), jak przetestować działanie serwera i przekazywanie danych do bazy z poziomu wywołania w adresie.
Ja bym to zrobił trochę inaczej. I w zasadzie mam zrobione tak. Serwer www stoi na malinie i jest na nim panel w php. W tym panelu pokazywane są aktualne odczyty i wykresy z ostatniej doby i średnie dobowe z ostatniego miesiąca. Natomiast wszystkie odczyty są wysyłane na zewnętrzny serwer. Na zewnętrznym serwerze postawiłem xmlapi do pobierania odczytów. chcąc pobrać jakieś odczyty, podaje się w gecie jakie czujniki mnie interesują i z jakiego okresu te odczyty mają być. Tym sposobem mogę odczyty umieścić na dowolnej stronie nie obciążając zbytnio maliny. Panel na malinie też pobiera odczyty do wygenerowania wykresów.
Wcześniej miałem archiwum odczytów na malinie, ale wiele lokalnych firm chciało sobie pokazać na swoich stronach moje wykresy i malina w końcu przestała wyrabiać.
Moim celem było właśnie zapisywanie danych na “malinkę”, która stoi u mnie w sieci lokalnej. W przypadku problemów z łączem od operatora Internetu dane ze stacji będę miał zapisane.
Ale dziękuję za Twoje uwagi.
Witam Panowie, mam pewien problem. Napisałem taki program https://pastebin.com/Ncy4naK9 (na końcu jest plik php, który znajduje się na raspberry). Gdzie robię błąd? Ponieważ po wpisaniu w przeglądarke 192.168.0.105/test.php?temp=20 normalnie pokazuje mi się liczba 20.
No i wartość wysłana przez ESP “zostanie pokazana” przez skrypt php właśnie ESP. Jeśli Ty otworzysz w przeglądarce nową sesję, to nie zobaczysz tej wartości. Musisz ją zapisać choćby do pliku tekstowego.
Dzięki już działa :) Brakowało zapisu do pliku.
Profesjonalny materiał GRATULUJĘ i dziękuję :)))
A ja bardzo dziękuję za miłą opinię.
Pingback: Instrukcja wykonania amatorskiej stacji meteo – Robert Błaszczak
Świetnie opisany materiał. Ogrom wiedzy przekazanej w sposób prosty i przejrzysty. Trzecia część interesuje mnie najbardziej ze względu na opisane zagadnienia więc zabieram się za czytanie.
No super opis :)
Dzięki za miłe słowa :)
Robert, jak radzi sobie TP4056 na wyjściu. Czy podaje stabilne napięcie 5V na Wemos D1. Zadam pytanie, czy jest sens podłączenia dodatkowo przetwornicy STEP UP dla ustabilizowania napięcia 5V na wejściu układu Wemos. Jak układ zachowuje się u Ciebie w przypadku niedoboru oświetlenia i rozładowanej baterii 18650.
Przyznam szczerze, że nawet nie robiłem pomiarów stabilności 5V. Przy tej pojemności baterii 18650 (3400 mAh) oraz przy zastosowanym panelu stacja pracuje bez żadnych zastrzeżeń do maja 2018 r. Minęły już najgorsze miesiące (grudzień, styczeń) i nie odnotowałem żadnych problemów z działaniem stacji.
Niesamowita rzecz i pięknie przekazana.
Prawdę powiedziawszy, gdy to zobaczyłem, postanowiłem zrobić taką stację, traktując ten materiał jako niesamowitą lekcję nie tyle samego programowania, co całościowego określenia zadania, etapów jego realizacji i efektu końcowego.
Zatem zakupiłem i Raspberry i D1 Mini Pro i do roboty.
W paru miejscach na dłużej stanąłem, ale dałem radę z postawieniem serwera.
Mam uwagi odnośnie kilku rzeczy i nie wiem, czy pisać tutaj, czy bezpośrednio do autora.
Jako przykład podam to, że po słowach: “Następną czynnością jest utworzenie dwóch plików z kodem php w katalogu /var/www/html:” są te dwa pliki. Ale jeden jest opisany (w nagłówku) jako “config.php” a drugi “spdata.php” Chodzi o ten drugi, bo chyba powinien być: “espdata.php”, co by wynikało z tekstu poniżej tych plików.
Jeszcze raz dziękuję za wykonaną pracę i jestem pod wrażeniem wiedzy i sposobu jej przekazywania.
Dziękuję serdecznie za miłą opinię i gratuluję samodzielnego wykonania stacji meteo.
Literówka z spdata.php już poprawiona. Jeśli zauważyłeś jeszcze jakieś błędy to śmiało pisz na robert@blaszczak.pl
Tak apropos w momencie gdy po wpisaniu w przeglądarkę info.php wyskakiwało mi 403 pomogło mi to:
sudo lighttpd-enable-mod fastcgi fastcgi-php
później restart.
Pingback: Stacja Meteo - https://artur-kos.tplinkdns.com/bez-kategorii/stacja-meteo/