Cześć!
Przeglądałem wczoraj Wasze projekty (od roku prawie tu nie zaglądałem) i zauważyłem wysyp stacji pogodowych. Co mnie bardzo cieszy, bo sam jestem autorem jednej z nich. Chociaż niedokończonej ;)
W każdym razie, przygotowałem swego czasu bibliotekę dla ESP8266, umożliwiającą pobieranie danych, o jakości powietrza z systemów Głównego Inspektora Ochrony Środowiska. Na obecną chwilę możemy odczytywać dane z około 160 stacji pomiarowych (zlokalizowanych w Polsce oczywiście). Ponieważ stacje różnią się zestawami czujników, ograniczyłem metody do pobrania PM2.5 oraz PM10. Oczywiście można też odczytać pozostałe pomiary, ale trzeba poświęcić trochę czasu na budowę biblioteki i zwracanych przez API jsonów.
Przykład
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
/* The MIT License (MIT) Copyright (c) 2018 Kamil Kaleta. All right reserved. http://theveel.com/?p=482 */ #include <ESP8266WiFi.h> //https://github.com/esp8266/Arduino #include "AirPollution.h" AirPollution pollution; //A I R P O L L U T I O N #define MAX_STATIONS 8 //identyfikatory stacji pomiarowych GIOS.GOV.PL //http://theveel.com/gios_gov_pl-findall/ int stations[MAX_STATIONS] = {400, 401, 402, 10121, 10123, 10139, 10435, 10447}; //W I F I C r e d e n t i a l s const char* ssid = "_ssid_"; const char* password = "_pass_"; void setup() { Serial.begin(115200); delay(10); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); } updatePollution(); } void loop() { } void updatePollution() { Serial.println("\n+-----\t+-----\t+-----\t+-----\t+----------"); Serial.println("|PM2µg\t|PM2%\t|PM10µg\t|PM10%\t|STACJA"); Serial.println("+-----\t+-----\t+-----\t+-----\t+----------"); for (int j = 0; j < MAX_STATIONS; j++) { pollution.getSensors(stations[j]); /////////////PM2,5 int s = pollution.getStationSensorsIds(0).toInt(); //(0=PM2.5, 1=PM10) if (s > 0) { int pm2Value = pollution.getDataValue(s).toInt(); Serial.print("|"+(String)pm2Value+"µg\t|"); ///////////////pm2 percent Serial.print(toPercent(pm2Value, 25)+"\t|"); }else Serial.print("|\t|\t|"); /////////////PM10 s = pollution.getStationSensorsIds(1).toInt(); //(int station, int sensorIndex) if (s > 0) { int pm10Value = pollution.getDataValue(s).toInt(); ///////////////pm2 percent Serial.print((String)pm10Value+"µg\t|"); Serial.print(toPercent(pm10Value, 50)+"\t|"); // }else Serial.print("|\t|\t|"); Serial.print(stationName(stations[j])); Serial.println(""); }//.for 'stations' Serial.println("+-----\t+-----\t+-----\t+-----\t+----------\ngios.gov.pl"); } String toPercent(int val, float base) { int i = (val / base) * 100; return (String)i + "%"; } String stationName(int id) { switch (id) { case 400: return"Krasinskiego"; break; case 401: return"Bujaka"; break; case 402: return"Bulwarowa"; break; case 10121: return"Dielta"; break; case 10123: return"Zloty Rog"; break; case 10139: return"Piastow"; break; case 10435: return"Telimeny"; break; case 10447: return"Wadow"; break; } } |
Wynik powyższego kodu w konsoli:
Bibliotekę wraz z przykładami można pobrać z githuba
Jak nie zaglądam na majsterkowo.pl, to nawet nie wiem że pojawiają się nowe komentarze. Szkoda że nie działają jakieś notyfikacje o nowym komentarzu pod projektem… W każdym bądź razie, możecie też zerknąć na mojego bloga i tam zadać pytanie do tego projektu.
Projekt dedykowany dla kolegi karlasty za wykonanie stacji meteo dla swojego dla brata.
Rozumiem że za wystawienie 3 gwiazdek dostałem identyczną odpowiedź na swoim projekcie? :)
To może uzasadnię, abyś nie czuł się poszkodowany głosem bez komentarza: nie przypadła mi do gustu myśl żeby dawać na Majsterkowo samą bibliotekę, w dodatku taką która jest w mojej opinii mało użyteczna na uC, tj. nie widzę zastosowania żeby pobierać na mikrokontroler takie dane z sieci, skoro można je pobierać na PC lub telefon (który praktycznie każdy ma w kieszeni). Gdyby projekt byłby przy okazji połączeniem tego z jakimś urządzeniem końcowym które ma sens to spoko.
Natomiast fakt faktem od strony kodu jest ładnie, poza tym że to jedynie interfejs do JSON REST API.
Oczywiście że tak :) Chciałem się dowiedzieć dlaczego dałeś mi o 2 gwiazdki więcej, niż koledze który napisał jedno zdanie o lampkach choinkowych… Oczywiście że biblioteki mają sens! Spójrz na projekt o którym piszę na końcu. karlasty zrobił dla brata stację informującą o zanieczyszczeniu powietrza w pomieszczeniu. Gdyby zastąpił Arduino modułem z ESP8266, mógłby z moją biblioteką rozszerzyć informację o stanie powietrza na zewnątrz. Funkcjonalność x2. Jest cała tona projektów pobierających dane pogodowe w openweather, wunderground itp. Popatrz na asortyment internetowych stacji pogody, i na ich ceny. Widocznie apka w telefonie to nie wszystko. Co nie zmienia faktu, że godzę się z twoją oceną. Moją ocenę też podtrzymuję, bo projekt wygląda, jakby zabrakło ci pomysłu na jego wykończenie.A za 6,5$ można kupić na ali wzmacniacz stereo z bluetoothem i equalizerem.