Pierwsze kroki z ESP8266 w środowisko Arduino IDE

Domyślnie ESP8266 jest obsługiwane poprzez komendy AT, można go programować w środowisko Lua. Jednak jeśli nie znamy tego środowisk, albo nie chcemy korzystać z drugiego mikrokontroler’a do obsługi ESP8266 a znamy uproszczone środowisko  C jakim jest Arduino możemy skorzystać z portu do środowiska Arduino dzięki projektowi ESP8266 core for Arduino

Większość poradników odnoście uruchomienia ESP8266 w środowisku arduino opiera się o bezwzględne minimum, co może być dobre jeśli zaczynamy i chcemy tylko po prosu coś uruchomić, ale wraz z czasem zaczyna nas to denerwować w sensie dlaczego program się nie chce wgrać, zapominamy odłączyć pinu gpio0/reset, niektórzy wolą kopic płytki typu NodeMcu lub podobne, aby mieć wreszcie spokój, dlatego chciałbym się skupić na tym co będzie nam potrzebne do wygodnej pracy i że dostosowanie gołej płytki nie jest wcale takie trudne.

Datasheet – dokumentacja producenta

Podstawowe paramenty ESP8266:

  • napięcie zasilania od 2.5 do 3.6V
  • pobór prąduo koło 200mA na sam moduł
  • prędkość zegara procesora od  80 do 160 MHz
  • rozmiar RAM <50 kB, dostępne około 38kB
  • zewnętrzna pamięć SPI flash od 0.5MB do 16MB, arduino obsługuje tylko do 4MB, zaleca się minimum 1MB
  • jeden 10-bitowy przetwornik ADC z możliwością pomiaru napięcia zasilania beż dodatkowych przewodów
  • WiFi 2.4GHz b/g/n, w trybie AP n jest niewspierany

Wersje których niemożna przeprogramować:

  • ESP8266 ESP-14  // posiada wewnętrzny 8-bitowy mikrokontroler pośredniczący w komunikacji UART

Wersja ESP-01 nie jest zalecana gdyż posiada 0.5MB flash, wersja ESP-01S posiada 1MBmb dzięki czemu możemy skorzystać z OTA i łatwo wykorzystać piny RX/TX jako piny wejścia/wyjścia, jednak nadal posiada ona mało pinów wejścia/wyjścia, gdzie obsługa trybu uśpienia wymaga dolutowania przewodu do MCU.

Największa pamięć obsługiwana przez Arduino IDE to 4MB w tym 3MB SPIFFS w prawdzie możliwe jest ustawienie 1MB SPIFFS jednak maksimum wielkość szkicu to nadal tylko 1MB, nie wiem czy to błąd czy tylko niedopatrzenie(nie próbowałem wgrywać szkicu ponad 1MB) możliwość wymiany pamięci oraz wykorzystanie przestrzeni SPIFFS omówię w innym poradniku.

Dodanie płytki do środowiska arduino:

Uruchamiamy AruinoIDE wchodzimy do „Plik” > „Preferencje”  >”Ustawienia” >  w „Dodatkowe adresy URL do menedżera płytek” dopisujemy:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Następnie wybieramy „Narzędzia” > „Płytka” > „Menedżer płytek…” zmieniamy w „Wpis” na „Własne” i wybieramy „esp8266 by ESP8266 Community wersja…” i klikamy „Instaluj”

 

możemy tez dodać kilka różnych płytek, dzięki czemu będziemy informowania o aktualizacjach, np. w ten sposób:

Wybór płytki w Arduino IDE:

po zainstalowaniu płytek wybieramy „Narzędzia” > „Płytka” > w katalog „ESP8266 Module” > „Generic ESP8266 Module”

zmieniamy parametry:

-Flash Size: jeśli masz 1MB (domyślnie w obecnie produkowanych modułach, ESP-12E/F ma domyślnie 4MB) zmieniamy na „1MB 64K SPIFFS” ważne aby szkic miał około 1MB miejsca na pamięci flash

-Upload Speed: zmieniamy na największy „921600” od tego zależy w jakim czasie wgra nam się program

-Port: wybieramy port naszego konwertera

-Upload Frequency oraz Flash Frequency możemy zmienić na najwyższe, jednak niema to większego znaczenia, przynajmniej na początku

-Reset Method: jeśli korzystamy z metody różnicowej opisanej później zmieniamy z „ck” na „modemcu”

Uruchomienie gołej płytki:

  • GND >do> masy
  • VCC >do> zasilania max 3.6v
  • CH_EN >do> zasilanie przez rezystor ok 12k
  • GPIO0 >do> masy przez rezystor ok 12k
  • RESET >do> zasilania przez rezystor ok 12k // jeśli korzystamy z trybu uśpienia, reset działa przez zmarcie do masy
  • GPIO16 >do> RESET przez rezystor  // jeśli korzystamy z trybu uśpienia, wybudzanie z trybu uśpienia jest niedostępne w ESP-01 wymaga dolutowania przewodu
  • Zaleca się dodanie kondensatora około 200uF oraz 100nF na zasilanie, blisko wyprowadzeń układu

Programowanie płytki:

aby przełączyć płytkę w tryb programowania zwieramy pin GPIO0 do zasilania i resetujemy płytkę podając stan wysoki na pin RESET. Do programowania będziemy potrzebowali przejściówki USB UART działającej w standardzie TTL 3.3v jeśli nie mamy pewności skorzystajmy z konwertera poziomów logicznych(najlepiej na tranzystorach)

Podłączenie konwertera uart musi pracować w trybie TTL 3.3v

  • GND do GND
  • RX do TX
  • TX do RX
  • VCC nie jest wymagany jeśli korzystamy z innego źródła zasilania
  • GPIO0 do VCC
  • RESET do RST // nie jest wymagany jeśli ponownie podłączymy zasilanie przed wgraniem kodu

Okey ale takie wgranie dział tylko raz i za każdym razem musimy odpinać GPIO0/reset, można to zautomatyzować najlepsza metoda to reset w trybie różnicowym stosowany w NodeMcu

Wymaga on wyprowadzenia w konwerterze UART pinu DTR i RST

jeśli mamy tylko jeden programator i kilka płytek możemy zrobić sobie przejściówkę do konwertera, dzięki czemu nie musimy stosować tego układu w każdej płytce.

Teraz wystarczy w grać np. blik’a z przykładów, jednak pin LED_BUILTIN domyślnie jest ustawiony na pinie 1 więc musimy dodać

#define LED_BUILTIN 2

 

 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *