NodeMCU – Minimalny obwód dla gołego ESP8266

Podczas tworzenia jakiegoś urządzenia najpierw robimy jego prototyp. Jeżeli wykorzystujemy do tego procesor ESP8266 to najprawdopodobniej najlepszym wyborem do prototypowania będzie płytka developerska NodeMCU. Po tym jak uznamy, że na breadboardzie wszystko śmiga jak w zegarku projektujemy płytkę drukowanę, lutujemy procesor ESP i… nie działa. W dzisiejszym artykule zaprezentuję jak należy w minimalnym stopniu zaprojektować układ wykorzystujący ESP8266, aby wszystko działało tak jak należy.

Po pierwsze zasilanie

Pierwszą rzeczą o jaką należy zadbać jest poprawne zasilanie układu. W tym przypadku możemy wybrać pomiędzy zasilaniem bateryjnym + układem LDO do obniżenia napięcia do 3.3V lub zasilaniem np. z USB (w tym przypadku należy zastosować stabilizator 3.3V). Pierwszej opcji raczej nie polecam, gdyż jeżeli nie opanujemy dobrze zarządzania energią to ESP szybko baterię nam zje.

Do stabilizacji napięcia z 5V osobiście mogę z czystym sumieniem polecić układ AMS1117. Jest on bardzo tani oraz występuje w kilku wersjach. Nas interesuje oczywiście wersja 3.3V lub w ostateczności ADJ (napięcie na wyjściu stabilizatora ustala użytkownik). Mimo wszystko jednak najbezpieczniejszym wyjściem będzie zakup wersji 3.3V.

Filtrowanie

Zailając stabilizator i mikrokontroler ważne jest odpowiednie przefiltrowanie napięcia. Zakładając, że mamy w miarę stabilne 5V z dobrej ładowarki to powinien wystarczyć nam jeden kondensator 100 nF na wejściu stabilizatora, taki sam na wyjściu i jeszcze jeden tuż przy procesorze. W przypadku trochę mniej stabilnego napięcia zasilania warto zainteresować się też dołożeniem kondensatora elektrolitycznego o wartości np. 470 uF na wejściu stabilizatora.

Odpowiednie stany GPIO

Programowanie ESP8266 odbywa się nieco inaczej niż w zwykłych procesorach np. Atmela. Tutaj poza pinem RESET ważną rolę grają także piny, które normalnie są używane jako GPIO oraz pin CH_PD.

Aby nasz procesor poprawnie się uruchomił należy zadbać o następujące rzeczy:

  • Rezystorem o wartości 10K podciągnąć pin CH_PD do napięcia zasilania (3.3V)
  • Kolejnym rezystorem 10K podciągnąć pin RESET również do napięcia zasilania (aby uniknąć stanu nieustalonego i w konsekwencji losowych resetów procesora)
  • Pin GPIO15 podciągnąć do masy (równie rezystorem 10K)
  • Upewnić się, że nic nie ściągnie pinu GPIO2 do masy podczas uruchamiania
  • Pin GPIO0 podciągnąć do napięcia zasilania rezystorem 10K oraz do masy przez rezystor o niższej wartości (np. 220 Ohm) w połączeniu szeregowym z przyciskiem lub zworką.

Dodatkowy przycisk zwierający do masy możemy podłączyć również do pinu RESET. Jego wciśnięcie spowoduje reboot procesora. Przycisk lub zwora podłączona do GPIO0 w przypadku zwarcia i rebootu procesora wprowadzi go w tryb programowania.

Poza pinami GPIO0, GPIO2 oraz GPIO15 wszystkie inne piny możemy używać dowolnie. Nie oznacza to, że tych nie da się wykorzystać. Da się – trzeba tylko uważać, aby podczas rozruchu miały odpowiedni stan (GPIO0 oraz 2 wysoki, a GPIO15 niski).

Minimalny schemat połączeń

Absolutne minimum połączeń przy projektowaniu PCB prezentuje poniższy schemat:

Znajdziemy tutaj część zasilającą (stabilizator AMS1117), Zworę BOOT_MODE do wyboru trybu uruchomienia (normalny w przypadku zwarcia 1 i 2 lub raku zwarcia / programowanie w przypadku zwarcia 2 i 3) oraz złącze 4 goldpinów z wyprowadzoną masą oraz pinami RESET, TXD i RXD do programowania układu.

Programowanie takiego układu

Do programowania możemy użyć dowolnego konwertera USB-TTL np. FT232.

W celu wgrania nowego programu należy podłączyć pin TX konwerera z pinem RX procesora, RX konwertera z TX procesora oraz masy obu urządzeń. Przed wgraniem programu ustawiamy zworę BOOT_MODE w tryb programowania (zwarte piny 2 i 3), a następnie kiedy program w Arduino IDE jest już skompilowany i zobaczymy napis Wgrywanie… wciskamy na krótką chwilę przycisk RESET (jeżeli go nie mamy to zwieramy pin RESET do masy), po czym procesor powinien skomunikować się z komputerem i bez problemu zaprogramować się :)