1. Wstęp
Projekt bardzo prostej stacji pogodowej opartej o ESP32 DevKit V1 i sensor BME280. Odczyt wartości jest dostępny poprzez interfejs sieciowy w sieci lokalnej, do której jest podłączona. Całość jest zasilana za pomocą zasilacza impulsowego 5V ze względu na powszechność i łatwą dostępność tego typu urządzeń.
2. ESP32
Moduł ESP32 DevKit V1 jest platformą programistyczną opartą o ESP-WROOM-32 będącą następcą niesłychanie popularnej serii układów z rodziny ESP8266. Oferuje on obsługę protokołów komunikacyjnych takich jak Wi-Fi, Bluetooth, czy Ethernet. Stosunkowo mocny jak na budżetowe mikrokontrolery dwurdzeniowy procesor, całkiem spora ilość pamięci operacyjnej i duża energooszczędność jednoznacznie przemawiają na korzyść tej platformy. Wszystko to w stosunkowo niskiej cenie i możliwością programowania z poziomu Arduino IDE.
2.1. Moduł ESP32 DevKit V1 od forntu
2.2. Moduł ESP32 DevKit V1 od tyłu
2.3. Wyprowadzenia modułu ESP32 DevKit V1 w wersji 30 pinowej
3. BME280
Układ scalony BME280 to produkt firmy Bosch Sensortec i jest on czujnikiem warunków atmosferycznych takich jak ciśnienie, wilgotność i temperatura. To niezwykle kompaktowym elementem i występuje w ekranowanej obudowie SMD o wymiarach 2,5 x 2,5 mm. Sensor ten cechuje się bardzo małym poborem prądu oscylującym w okolicach średniej rzędu 3,6uA i wyposażony jest magistralę komunikacyjną I2C/SPI.
*RH - Wilgotność względna wyrażana w procentach. Jest to stosunek rzeczywistej wilgoci w powietrzu do maksymalnej jej ilości, którą może utrzymać powietrze w danej temperaturze.
3.1. BME280 od frontu
3.2. BME280 od tyłu
4. Projekt i narzędzia
Z racji niewielkiej ilości połączeń, a dokładnie czterech, całość została złożona na uniwersalnej płytce drukowanej PCB. Można również przylutować BME280 do ESP32 bezpośrednio przy pomocy przewodów, bez konieczności stosowania PCB. Do komunikacji między podzespołami został wykorzystany protokół I2C, a do zaprogramowania układu ESP32 posłużyło Arduino IDE.
Do wykonania projektu będzie nam potrzebne:
- ESP32 DevKit V1 lub klon/odpowiednik;
- BME280 w wersji 3.3V;
- Arduino IDE;
- przewody, na przykład do płytek stykowych lub ze skrętki: 4 sztuki po około 5 cm;
- lutownica / stacja lutownicza i stop lutowniczy;
- cążki do cięcia metalu;
- kabel USB - micro USB;
- zasilacz/ładowarka impulsowa 5V z wyjściem USB do zasilania stacji;
- opcjonalnie uniwersalna płytka drukowana PCB o wymiarach przynajmniej 4 x 3,5 cm;
- opcjonalnie co najmniej 4 gniazda goldpin do wlutowania w PCB, tak aby można było wypiąć dowolny z elementów w każdej chwili;
5. Schemat połączeń
Połączenie obu komponentów jest stosunkowo proste, ponieważ należy połączyć dwa przewody do komunikacji poprzez I2C i dwa do zasilania.
Zgodnie z opisem wyprowadzeń na rysunku 2.3. do I2C przypisane są piny 21 dla SDA (można czasami spotkać się z opisem SDI) i 22 dla SCL (można czasami spotkać się z opisem SCK).
Rożne wersji modułów opartych na ESP32 mogą różnić się wyprowadzeniami, więc w przypadku zastosowania innego modelu należy upewnić się czy I2C zostało wyprowadzone na 21 i 22 pin.
5.1. Schemat połączeń ESP32 z BME280
5.2. Zmontowany układ na uniwersalnej płytce PCB od frontu
5.3. Zmontowany układ na uniwersalnej płytce PCB od strony wykonanych połączeń
5.4. Widok układu podczas pracy z podłączonym zasilaniem
6. Arduino IDE
Gdy już wszystkie połączenia elektryczne są gotowe, należy przygotować środowisko programistyczne poprzez zainstalowanie odpowiednich bibliotek do Arduino IDE, które umożliwią obsługę obu układów.
Spora część z was zapewne ma już zainstalowane Arduino IDE, lecz jeśli nie to należy pamiętać, aby pobierać je zawsze z oficjalnej strony dystrybutora. Zminimalizuje to możliwość pobrania przy okazji złośliwego oprogramowania. Oficjalny dystrybutor to:
Po pobraniu, zainstalowaniu czy też ewentualnej aktualizacji oprogramowania należy z górnego menu wybrać: Plik > Preferencja.
6.1. Interfejs Arduino IDE, opcje Plik > Preferencja
Pojawi się nowe okno z opcjami. W polu „Dodatkowe adresy URL do menedżera płytek:” należy wkleić adres:
I zatwierdzić klawiszem [OK]. W przypadku, gdy mamy już wpisany jakiś adres, to dodajemy następny po przecinku.
6.2. Okno Preferencje z opcjami
Następnie z menu wybieramy: Narzędzia > Płytka: … > Menedżer płytek…
6.3. Interfejs Arduino IDE, opcje Narzędzia > Płytka: … > Menedżer płytek…
Pojawi się nowe okno. W polu wyszukiwarki należy wpisać „Adafruit BME280” i zatwierdzić ENTERem. Pojawi się biblioteka, którą należy zainstalować klikając na przycisk [Instaluj].
6.4. Menedżer płytek – zainstalowana biblioteka Adafruit BME280
Pora na drugą bibliotekę. W polu wyszukiwarki należy wpisać „Adafruit Unified Sensor” i zatwierdzić ENTERem. Pojawi się biblioteka, którą należy zainstalować klikając na przycisk [Instaluj] Po udanej instalacji zamykamy to okno i resetujemy Arduino IDE.
6.5. Menedżer płytek – zainstalowana biblioteka Adafruit Unified Sensor
Po ponownym uruchomieniu Arduino IDE w menu: Narzędzia > Płytka: … powinny być widoczne układy z serii ESP32.
6.6. Biblioteka układów ESP32
7. Programowanie
Gdy już wszystko zostało zrobione, możemy przystąpić do programowania układu. Podłączamy moduł kablem USB do komputera, wybieramy z biblioteki odpowiednią płytkę, w tym przypadku jest to „ESP32 Dev Module” i odpowiedni Port.
Tworzymy nowy projekt i kopiujemy poniższy kod.
Teraz należy wpisać nazwę i hasło do sieci, z którą ma się połączyć nasza stacja pogodowa. Nazwę sieci należy wpisać w miejscu oznaczonym jako: <tutaj-wpisz-nazwe-swojej-sieci>, a hasło w miejscu oznaczonym jako: <tutaj-wpisz-haslo-swojej-sieci>. Nazwa, jak i hasło muszą być wpisane w cudzysłowach, jak na poniższym przykładzie.
7.1. Przykładowa nazwa i hasło do sieci z którą będzie łączyć się stacja
Po wprowadzeniu prawidłowych danych przesyłamy gotowy kod do układu.
7.2. Programowanie układu zakończone sukcesem
Po zaprogramowaniu układu włączamy monitor portu szeregowego (Narzędzia > Monitor portu szeregowego) i ustawiamy prędkość przesyłu danych na 115200. Następnie z dolnego urządzenia podłączonego do sieci lokalnej wchodzimy na stronę internetową znajdującą się pod adresem 192.168.0.150, czyli adresem naszej stacji i naszym oczom powinna ukazać się komunikat o wykonanym połączeniu z klientem.
7.3. Komunikat z monitora portu szeregowego o wykonanym połączeniu z klientem.
7.4. Widok interfejsu sieciowego stacji pogodowej
Gdy wszystko działa jak należy można odpiąć urządzenie od komputera i przypiąć w miejscu gdzie chcemy monitorować warunki klimatyczne. Podpinamy przy użyciu zasilacza/ładowarki USB z zasilaniem 5V, a dokonujemy odczytu przez interfejs sieciowy pod adresem 192.168.0.150.
Adres pod którym dostępny jest interfejs naszej stacji możemy zmienić modyfikując wartości w 52 linii kodu.
Projekt bardzo prostej stacji pogodowej opartej o ESP32 DevKit V1 i sensor BME280. Odczyt wartości jest dostępny poprzez interfejs sieciowy w sieci lokalnej, do której jest podłączona. Całość jest zasilana za pomocą zasilacza impulsowego 5V ze względu na powszechność i łatwą dostępność tego typu urządzeń.
2. ESP32
Moduł ESP32 DevKit V1 jest platformą programistyczną opartą o ESP-WROOM-32 będącą następcą niesłychanie popularnej serii układów z rodziny ESP8266. Oferuje on obsługę protokołów komunikacyjnych takich jak Wi-Fi, Bluetooth, czy Ethernet. Stosunkowo mocny jak na budżetowe mikrokontrolery dwurdzeniowy procesor, całkiem spora ilość pamięci operacyjnej i duża energooszczędność jednoznacznie przemawiają na korzyść tej platformy. Wszystko to w stosunkowo niskiej cenie i możliwością programowania z poziomu Arduino IDE.
Specyfikacja | |
Procesor i pamięć | Dwurdzeniowy 32-bitowy procesor Xtensa LX6
Taktowanie do 240MHz 448kB pamięci ROM 520kB pamięci SRAM 16kB pamięci SRAM w zegarze czasu rzeczywistego (RTC) 4MB pamięci flash podpiętej po SPI Sprzętowa akceleracja szyfrowania (AES, SHA2, ECC, RSA-4096) |
Komunikacja bezprzewodowa | Obsługa WiFi - 802.11 b/g/n/e/I
W trybie 802.11 n (2.4 GHz) prędkość do 150 Mbps Szyfrowanie: WPA/WPA2/WAPI (WEP/TKIP/AES) Obsługa Bluetooth ( Bluetooth v4.2 BR/EDR & BLE) |
Zasilanie i pobór prądu | Zasilanie od 2.2 do 3.6V (optymalne 3.0 do 3.3V)
Pobór prądu podczas pracy (typowy): 90mA Pobór prądu w trybie deep sleep - 2.5 uA Temperatury pracy: -40C - 125C |
Interfejsy i obsługiwane protokoły | Wbudowany czujnik Halla
Obsługa dotyku 32 piny GPIO (PWM) 3 x UART 3 x SPI 2 x I2C (I2S) IR CAN 12 kanałowy ADC 2 kanałowy DAC interfejs kart SD |

2.1. Moduł ESP32 DevKit V1 od forntu

2.2. Moduł ESP32 DevKit V1 od tyłu

2.3. Wyprowadzenia modułu ESP32 DevKit V1 w wersji 30 pinowej
3. BME280
Układ scalony BME280 to produkt firmy Bosch Sensortec i jest on czujnikiem warunków atmosferycznych takich jak ciśnienie, wilgotność i temperatura. To niezwykle kompaktowym elementem i występuje w ekranowanej obudowie SMD o wymiarach 2,5 x 2,5 mm. Sensor ten cechuje się bardzo małym poborem prądu oscylującym w okolicach średniej rzędu 3,6uA i wyposażony jest magistralę komunikacyjną I2C/SPI.
Specyfikacja | |
Napięcie zasilania | 3.3 V |
Interfejs układu | I2C, SPI |
Średnie zużycie energii dla pomiarów co 1s | 1.8 uA (wilgotność, temperatura)
2.8 uA (ciśnienie, temperatura) 3.6 uA (wilgotność, ciśnienie, temperatura) |
Średnie zużycie energii w trybie uśpienia | 0.1 uA |
Temperatura | Zakres pomiarowy: od -40 do 85 °C
Dokładność: ± 1 °C |
Wilgotność | Zakres pomiarowy: od 10 do 80 % RH
Dokładność: ± 3 %RH* |
Ciśnienie | Zakres pomiarowy: od 300 do 1100 hPa
Dokładność: ± 1 hPa |
*RH - Wilgotność względna wyrażana w procentach. Jest to stosunek rzeczywistej wilgoci w powietrzu do maksymalnej jej ilości, którą może utrzymać powietrze w danej temperaturze.

3.1. BME280 od frontu

3.2. BME280 od tyłu
4. Projekt i narzędzia
Z racji niewielkiej ilości połączeń, a dokładnie czterech, całość została złożona na uniwersalnej płytce drukowanej PCB. Można również przylutować BME280 do ESP32 bezpośrednio przy pomocy przewodów, bez konieczności stosowania PCB. Do komunikacji między podzespołami został wykorzystany protokół I2C, a do zaprogramowania układu ESP32 posłużyło Arduino IDE.
Do wykonania projektu będzie nam potrzebne:
- ESP32 DevKit V1 lub klon/odpowiednik;
- BME280 w wersji 3.3V;
- Arduino IDE;
- przewody, na przykład do płytek stykowych lub ze skrętki: 4 sztuki po około 5 cm;
- lutownica / stacja lutownicza i stop lutowniczy;
- cążki do cięcia metalu;
- kabel USB - micro USB;
- zasilacz/ładowarka impulsowa 5V z wyjściem USB do zasilania stacji;
- opcjonalnie uniwersalna płytka drukowana PCB o wymiarach przynajmniej 4 x 3,5 cm;
- opcjonalnie co najmniej 4 gniazda goldpin do wlutowania w PCB, tak aby można było wypiąć dowolny z elementów w każdej chwili;
5. Schemat połączeń
Połączenie obu komponentów jest stosunkowo proste, ponieważ należy połączyć dwa przewody do komunikacji poprzez I2C i dwa do zasilania.
Zgodnie z opisem wyprowadzeń na rysunku 2.3. do I2C przypisane są piny 21 dla SDA (można czasami spotkać się z opisem SDI) i 22 dla SCL (można czasami spotkać się z opisem SCK).
Rożne wersji modułów opartych na ESP32 mogą różnić się wyprowadzeniami, więc w przypadku zastosowania innego modelu należy upewnić się czy I2C zostało wyprowadzone na 21 i 22 pin.

5.1. Schemat połączeń ESP32 z BME280

5.2. Zmontowany układ na uniwersalnej płytce PCB od frontu

5.3. Zmontowany układ na uniwersalnej płytce PCB od strony wykonanych połączeń

5.4. Widok układu podczas pracy z podłączonym zasilaniem
6. Arduino IDE
Gdy już wszystkie połączenia elektryczne są gotowe, należy przygotować środowisko programistyczne poprzez zainstalowanie odpowiednich bibliotek do Arduino IDE, które umożliwią obsługę obu układów.
Spora część z was zapewne ma już zainstalowane Arduino IDE, lecz jeśli nie to należy pamiętać, aby pobierać je zawsze z oficjalnej strony dystrybutora. Zminimalizuje to możliwość pobrania przy okazji złośliwego oprogramowania. Oficjalny dystrybutor to:
arduino.cc/en/Main/Software
Po pobraniu, zainstalowaniu czy też ewentualnej aktualizacji oprogramowania należy z górnego menu wybrać: Plik > Preferencja.

6.1. Interfejs Arduino IDE, opcje Plik > Preferencja
Pojawi się nowe okno z opcjami. W polu „Dodatkowe adresy URL do menedżera płytek:” należy wkleić adres:
https://dl.espressif.com/dl/package_esp32_index.json
I zatwierdzić klawiszem [OK]. W przypadku, gdy mamy już wpisany jakiś adres, to dodajemy następny po przecinku.

6.2. Okno Preferencje z opcjami
Następnie z menu wybieramy: Narzędzia > Płytka: … > Menedżer płytek…

6.3. Interfejs Arduino IDE, opcje Narzędzia > Płytka: … > Menedżer płytek…
Pojawi się nowe okno. W polu wyszukiwarki należy wpisać „Adafruit BME280” i zatwierdzić ENTERem. Pojawi się biblioteka, którą należy zainstalować klikając na przycisk [Instaluj].

6.4. Menedżer płytek – zainstalowana biblioteka Adafruit BME280
Pora na drugą bibliotekę. W polu wyszukiwarki należy wpisać „Adafruit Unified Sensor” i zatwierdzić ENTERem. Pojawi się biblioteka, którą należy zainstalować klikając na przycisk [Instaluj] Po udanej instalacji zamykamy to okno i resetujemy Arduino IDE.

6.5. Menedżer płytek – zainstalowana biblioteka Adafruit Unified Sensor
Po ponownym uruchomieniu Arduino IDE w menu: Narzędzia > Płytka: … powinny być widoczne układy z serii ESP32.

6.6. Biblioteka układów ESP32
7. Programowanie
Gdy już wszystko zostało zrobione, możemy przystąpić do programowania układu. Podłączamy moduł kablem USB do komputera, wybieramy z biblioteki odpowiednią płytkę, w tym przypadku jest to „ESP32 Dev Module” i odpowiedni Port.
Tworzymy nowy projekt i kopiujemy poniższy kod.
Code: c
Teraz należy wpisać nazwę i hasło do sieci, z którą ma się połączyć nasza stacja pogodowa. Nazwę sieci należy wpisać w miejscu oznaczonym jako: <tutaj-wpisz-nazwe-swojej-sieci>, a hasło w miejscu oznaczonym jako: <tutaj-wpisz-haslo-swojej-sieci>. Nazwa, jak i hasło muszą być wpisane w cudzysłowach, jak na poniższym przykładzie.

7.1. Przykładowa nazwa i hasło do sieci z którą będzie łączyć się stacja
Po wprowadzeniu prawidłowych danych przesyłamy gotowy kod do układu.

7.2. Programowanie układu zakończone sukcesem
Po zaprogramowaniu układu włączamy monitor portu szeregowego (Narzędzia > Monitor portu szeregowego) i ustawiamy prędkość przesyłu danych na 115200. Następnie z dolnego urządzenia podłączonego do sieci lokalnej wchodzimy na stronę internetową znajdującą się pod adresem 192.168.0.150, czyli adresem naszej stacji i naszym oczom powinna ukazać się komunikat o wykonanym połączeniu z klientem.

7.3. Komunikat z monitora portu szeregowego o wykonanym połączeniu z klientem.

7.4. Widok interfejsu sieciowego stacji pogodowej
Gdy wszystko działa jak należy można odpiąć urządzenie od komputera i przypiąć w miejscu gdzie chcemy monitorować warunki klimatyczne. Podpinamy przy użyciu zasilacza/ładowarki USB z zasilaniem 5V, a dokonujemy odczytu przez interfejs sieciowy pod adresem 192.168.0.150.
Adres pod którym dostępny jest interfejs naszej stacji możemy zmienić modyfikując wartości w 52 linii kodu.
Cool? Ranking DIY