SMOG i ESP8266 – cz. 1: Prosty i szybki czujnik smogu z odczytem przez wifi – pierwsza wersja, podstawowa

SMOG i ESP8266 – cz. 1: Prosty i szybki czujnik smogu z odczytem przez wifi – pierwsza wersja, podstawowa

Ostatnio budowaliśmy razem czujnik smogu – dla pyłu zawieszonego PM2,5 i PM10 ppm. Tym razem spróbujemy czegoś prostszego, na początek bez kwestii zajmowana się żywotnością, usypianiem czy wyłączaniem. Czujnik Nova Fitness SDS011 (także wersje 018 lub 015) okazał się całkiem precyzyjnym urządzeniem, o niezłej żywotności, dający nawet całkiem zbliżone rezultaty przy teoretycznie nieobsługiwanej wilgotności powietrza powyżej 70%. Dzisiaj postaram się od podstaw pokazać Wam mobilną wersję czujnika, przy użyciu najtańszych elementów oraz rozbudować ją następnie o czujnik temperatury i wilgotności, wyświetlacz – aż do wersji 'chmurowej’. Na początek – wersja podstawowa.

UWAGA: Na początku 2018 pojawiła się nowsza wersja ESPEasy MEGA 2.0 – która ułatwia pracę z SDS011. Jeśli skończysz ten projekt – sprawdź nowszą wersję
mini-smog-2048

===
Jest to bardzo łatwy projekt, który można ukończyć w 10 minut.
„Wgrywamy” odpowiedni software, podłączamy 3 kable i odczytujemy wynik przez WWW. Coś co można pokazać w szkole (albo wykonać jako szkolny projekt), w lokalnej społeczności – jako skuteczny miernik SMOGu.

Czego będziemy potrzebować?

Sprzęt

  • Moduł z ESP8226 – najlepiej w wersji na płytce NodeMCU v2 lub Wemos D1 mini. Użyjemy tutaj tego drugiego. Chip ESP8266 występuje w tych wersjach razem z wygodnym interfejsem USB, służącym do zasilania (5V), oraz programowania (tzw. „flashowania”). Jednocześnie takie płytyki mają dodatkowe ułatwienia – przyciski RESET lub/i FLASH, poprawnie przenoszą w „Deep Sleep”, oraz mają najczęściej najnowsze wersje – np: ESP-12S, z lepszą anteną. Ważne aby była to wersja z 4MB pamięci FLASH (32Mbit), NodeMCU czy Wemos D1 mini posiadają taka ilość pamięci stałej. Samo urządzenie powinno kosztować około $4-$5 z przesyłką, lub trochę drożej w sklepach na miejscu w Polsce.
  • Czujnik smogu – Nova Fitness SDS011. Tak jak poprzednio użyjemy dobrze już znanego czujnika, który dość precyzyjnie jak na cenę około $22 w Chinach – potrafi wskazać poziom SMOGu dla 2,5 oraz 10 ppm. Jeśli nie chcesz czekać miesiąc na przesyłkę – Nettigo ma obecnie promocję z kodem DIY_SMOG_15 dającym 15% rabatu na ten czujnik. Czytelnicy donoszą, że kod działa też na PMS5003, którego nie testowałem.
  • Trzy kable (zwykle tzw. jumper cables)
  • Zasilacz/ładowarkę od telefonu komórkowego ze złączem USB oraz kabel USB – microUSB. Wystarczy ładowarka o wydajności prądowej min 750mA, ale może być też właściwie dowolna – 1A, 2,1A etc. Płytka z ESP8266 oraz czujnik pobierze tyle prądu ile jej będzie potrzebne (zwykle maksylalnie 650mA)

Software/Narzędzia

  • ESPEasy 2.0-dev – wersja deweloperska oprogramowania ESPEasy rozwijanego teraz w wersji 2.0, przez wielu programistów, następca wersji 1.x. W momecie pisania, ostatnią wersją jaką możemy już wykorzystać jest dev12, która obsługuje czujnik SDS011, dzięki włączeniu jej przez Jochen Krapf’a – który opracowuje także bardzo ciekawe obudowy do Nova SDS011. Mimo, że jest to wersja „deweloperska” – doskonale nadaje się do naszych zastosowań.
  • Linux – dowolna wersja, w której możemy możemy pobrać i uruchomić oprogramowanie służące do zaprogramowania ESPEasy. Jest to także możliwe z Microsoft Windows czy Mac OS X, wymaga jednak instalacji sterownika dla portu szeregowego-do-USB, co jest często problematyczne. Linux ma sterownik od razu w jądrze. Najlepszy będzie PC z kartą WiFi oraz wolnym portem USB, a więc np: stary netbook za 150-250PLN (używam Acer Aspire One ZG5 z Mint Cinnamon)

Do dzieła!

Uruchamiamy komputer z Linuksem, może to być PC albo Raspberry Pi – najlepiej wersję z pochodzącą od Debiana dystrybucją Linuksa. Instalujemy esptool.py, program służący do zapisu w pamięci FLASH nowego oprogramowania w ESP8266 czy też nowszym ESP32:

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install python-serial python-pip
$ sudo pip install esptool

Jeśli ostatnia komenda zwróci błędy, możemy spróbować:

$ python -m pip install esptool

Poprawny wynik to:

$ pip install esptool
Collecting esptool
  Downloading esptool-2.1.tar.gz (68kB)
    100% |████████████████████████████████| 71kB 1.0MB/s 
Collecting ecdsa (from esptool)
  Downloading ecdsa-0.13-py2.py3-none-any.whl (86kB)
    100% |████████████████████████████████| 92kB 1.8MB/s 
Collecting pyaes (from esptool)
  Downloading pyaes-1.6.1.tar.gz
Requirement already satisfied: pyserial>;=2.5 in /usr/lib/python2.7/dist-packages (from esptool)
Building wheels for collected packages: esptool, pyaes
  Running setup.py bdist_wheel for esptool ... done
  Stored in directory: /root/.cache/pip/wheels/26/5f/f6/af94c2b40c53d3b78ubeaXXc000272XXd0e1abXXada2a24f1
  Running setup.py bdist_wheel for pyaes ... done
  Stored in directory: /root/.cache/pip/wheels/ca/86/ff/a5a7674159155c92caXXbe7d374XXcfbf3dfeXX386fead1b21
Successfully built esptool pyaes
Installing collected packages: ecdsa, pyaes, esptool
Successfully installed ecdsa-0.13 esptool-2.1 pyaes-1.6.1

Następnie podłączamy przez kabel USB – microUSB naszą płytkę z ESP8266. Upewnij się, że nie masz już w systemie konwertera USB do portu szeregowego,
inaczej będziesz musiał zmienić port.
Wynik komendy dmesg na Linuksie powinien być podobny do tego:

[38450.504000] usb 2-2: new full-speed USB device number 14 using xhci_hcd
[38450.644831] usb 2-2: New USB device found, idVendor=1a86, idProduct=7523
[38450.644834] usb 2-2: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[38450.644836] usb 2-2: Product: USB2.0-Serial
[38451.248808] usbcore: registered new interface driver ch341
[38451.248823] usbserial: USB Serial support registered for ch341-uart
[38451.248838] ch341 2-2:1.0: ch341-uart converter detected
[38451.249237] usb 2-2: ch341-uart converter now attached to ttyUSB0

Nasze ESP8266 jest więc widoczne w systemie jako urządzenie ttyUSB0 a ściślej /dev/ttyUSB0, o ile jest to twoje jedyne urządzenie tego typu w systemie.
Dla wygody, przejdzmy do trybu administratora, stwórzmy roboczy katalog:

$ sudo -i
# mkdir esp_flash
# cd esp_flash

Pobieramy z https://github.com/letscontrolit/ESPEasy/releases/ najnowszą wersję binarną (zwykle jest to plik ZIP) – np: dziś jest to: wersja dev12. Po pobraniu rozpakowujemy:

# wget https://github.com/letscontrolit/ESPEasy/releases/download/v2.0.0-dev12/ESPEasy_v2.0.0-dev12.zip
# unzip ESPEasy_v2.0.0-dev12.zip

Pozostaje nam wgrać do pamięci flash ESP8266 odpowiednią wersję, 4MB – dev, plik dla flash 4MB – ESPEasy_v2.0.0-dev12_dev_4096.bin. Jeśli posiadasz Wemos D1 mini, uruchamiasz komendę, dla niektórych NodeMCU, należy nacisnąć FLASH a poterm trzymająć FLASH – reset:

# esptool.py --chip esp8266 --port /dev/ttyUSB0 --baud 115200 write_flash -fm dio -fs 4MB 0x00000 ESPEasy_v2.0.0-dev12_dev_4096.bin

Prawidłowy wynik:

esptool.py v2.1
Connecting....
Chip is ESP8266
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Compressed 634240 bytes to 414279...
Wrote 634240 bytes (414279 compressed) at 0x00000000 in 36.5 seconds (effective 138.9 kbit/s)...
Hash of data verified.

Teraz kolej na część sprzętową, wraz z SDS011 otrzymaliście kabel do podłączenia oraz konwerter USB na port szeregowy (popularny gadżet ten port szeregowy, prawda?). Ponieważ ESP8266 ma na pokładzie port szeregowy, pracujący z napięciami 0 i 3,3V, nie potrzebujemy konwertera, można go odłączyć. Następnie wtykamy trzy kable do załączonego kabla w miejsce gdzie był konwerter USB – zauważ jaka jest orientacja złącza:
20171022_230938_HDR
Jak widać, podłączone jest zasilanie (+5V, GND) oraz TX z portu szeregowego. Następnie łączymy się z ESP8266:
20171022_213251_HDR
Podłączyliśmy się do D6. Zasilanie podłączamy odpowiednio do +5V i GND:
20171022_213330_HDR
Całość przedstawia się następująco:
mini-smog-2048
Interfejs WWW ESPEasy jest dostępny dzięki podłączeniu się przez WiFi do sieci ESP_XXXX – a więc tworzony jest access point, WPA2 z domyślnym hasłem „configesp”. „XXXX” to adres MAC ESP8266, pozwalający na zidentyfikowanie AP. Po chwili powinniśmy dostać adres 192.168.4.X, a łączyć możemy się przez przeglądarkę od razu na adres 192.168.4.1
Następny krok to skonfigurowanie na płytce dostępu do naszej domowej sieci WiFi, co spowoduje zmianę adresu IP na taki jaki mam skonfigurowany w domu – tak jak poniżej z zakładki Main:
sds011-wersja
Przechodzimy do zakładki Devices i wybieramy Edit dla pierwszej linii. Z Menu – SDS011 oraz wypełniamy jak na zdjęciu – zauważmy że używamy GPIO-12 (D6) do odbierania danych, jednocześnie nic nie wysyłamy do SDS011. Stąd tylko jeden kabelek:
sds011-konfig
Po około 30 sekundach od zapisania – sprawdźmy w Devices wynik:
sds011-pomiar
Mamy więc 22,86 μg/m3 cząsteczek PM2,5 μm oraz 32,92 cząsteczek PM10μm.

Uwaga – zauważmy, że nazwy są obecnie wybrane po to aby prezentowały się dobrze do odczytu na stronie WWW ESP8266. Tak więc – PM2.5 poprawnie mówi który to typ, ale w następnych częściach i kolejnych wersjach – będzie się nazywać PM25, bez kropki!

To wszystko – urządzenie jest gotowe do pracy – możemy zasilać je z power banku i używać mobilnie, wraz z np: smartfonem, który będzie miał skonfigurowany Hotspot z takim samym dostępem jak domowa sieć WiFi. Jeśli chcesz ułatwić sobie odczyt – przejdź do drugiej części.

Previous Post Next Post