wtorek, 30 października 2018

Flash ESP32 - jak?


ESP32 niczym widmo wciąż krąży nad moim biurkiem. Mam już za sobą pierwszy kontakt III stopnia z tą nową odsłoną mojego ulubionego ESP8266 firmy Espressif Systems. Nie znalazłem co prawda mocnego uzasadnienia jego zastosowania w domowym IoT gdyż dwu-trzykrotnie tańszy ESP8266 znakomicie i w pełni pokrywa wszystkie moje potrzeby. Szczególnie, że najbardziej atrakcyjna część ESP32 - moduł Bluetooth wciąż nie doczekała się porządnych bibliotek dla funkcji BLE. Ale czas płynie a moduły z ESP32 spadły ceną poniżej  psychologicznej bariery 5$.  Lepiej - dziś już można kupić zestaw z oryginalnym ESP-WROOM-32 za mniej niż 4,3$. Oj lubię tych Chińczyków.
Kupiłem więc taki oryginał celem drugiego podejścia do tego dwurdzeniowego smoka.
 A, że wszystkie zabawy z chińskimi mikrokontrolerami należy rozpoczynać od upgrade oprogramowania to i z nowym nabytkiem będzie tak samo. A przy okazji liftingowi poddam wcześniej zakupiony moduł.
Dziś więc ESP32 do szkoły marsz...

Jakiś czas temu opisywałem po raz kolejny procedurę flashowania - wygrywania nowego firmware - do ESP8266 w wydaniu D1 MINI czyli ESP-12F. Ten sam program posłuży mi jednocześnie do podmiany oprogramowania dla ESP32.

Najnowsza wersja oprogramowania narzędziowego nosi numer 3.6.5 choć pewnie już za chwilę będzie jeszcze nowsza.

Po rozpakowaniu, uruchomieniu i wybraniu opcji mikrokontrolera ESP32 ukazuje się nam dobrze znane okno programu



A w zasadzie dwa okna: konfiguracyjne i terminalowe.
Podłączamy ESP32 przez USB i jakoś dowiadujemy się na którym porcie COM się on nam zainstalował.
Z moim starszym z modułów ESP32 nie mam żadnych problemów. To chińska podróbka LOLIN32 LITE firmy WEMOS . Do czego to doszło! Chińska podróba chińskiego produktu! Wygląda niemal identycznie jak oryginał - pewnie produkowana jest po godzinach na tej samej taśmie co firmowe moduły. Nie ma tylko opisu na spodniej stronie. Lubię moduły ESP tej firmy bo zawierają  dwu-tranzystorowy układ automatycznie wprowadzający procesor w mod programowania przez ARDUINO IDE. Układ został pewnikiem zapożyczony od open sourcowego NodeMCU.

Toteż na płytce znajdziemy tylko jeden przycisk - RST.


Gorąco polecam to rozwiązanie. Znakomicie przyspiesza proces wgrywania i testowania projektów opartych na ESP8266/32



Do komunikacji przez USB w LOLIN32 zastosowano stary dobry chiński wynalazek CH340. Z jego driverem pod WINDOWS nie mam żadnych problemów. Instaluje się elegancko i nie wywołuje konfliktów z innymi urządzeniami.
W managerze urządzeń widać, że moduł połączył się na porcie 7. Ustawiam port i domyślną prędkość 115200 i START. Układ zgłasza się natychmiast pokazując grzecznie co ma zaszyte w środku.



Najważniejsza jest wielkość pamięci flash. W moim układzie ma 32 Mbit czyli 4 MB.
W przeszłości oryginalnie moduły ESP8266 miały wgrywany bootloder i komendy AT. Dla ESP32 zaczęto wprowadzać jakąś chińską wersję IoT zwaną ESP32 IDF (IoT Development Framework). Takie chińskie SDK.

A co potrzebujemy by uruchomić nasze własne IoT na BLYNKu lub VIRTUINO?
NIC.
Wszystko co potrzeba zostanie wgrane przez Arduino IDE. A co z bootloaderem?  Jest już w pamięci ROM mikroprocesora. Drugi bootloader na potrzeby użytkownika wgrywany jest od adresu 0x1000

Programować ESP32 komendami AT nie ma większego sensu. Ale warto wyczyścić całą pamięć.
A może i wgrać nowy bootloader.

Czyszczenie pamięci to wpisanie do niej samych jedynek (0xFF w HEX).
Na githubie  znajdziemy pliki dla ESP32 z różną wielkością pamięci flash. Wybieramy swoją wielkość (u mnie to 32 Mbit) i wpisujemy to od początku pamięci czyli od 0x0000.


Jeśli chcemy wgrywać bootloader ściągamy  najnowszy soft AT - ESP32-WROOM-32 AT bin v 1.1.2.  W środku znajdziemy najnowszą wersję bootloadera.

Teraz należy załadować program plikami i wskazać mu adresy pamięci

plik czyszczenia pamięci             32Mbit_Null.bin wgrywany od adresu 0x0000
bootloader                                    bootloader.bin wgrywany od adresu 0x1000

Po sprawdzeniu naciskamy START. Na dole ekranu zielony pasek wskazuje postęp ładowania danych do ESP32. W poniższym przykładnie czyszczę tylko pamięć flash (patrz znacznik wyboru)



Program kończy wgrywanie danych w sposób niemal niezauważalny. Pasek postępu dochodzi do końca a zielony napis DOWLOAD zmienia się na FINISH. Żadnego innego komunikatu.

Pozostaje sprawdzić czy tak wyczyszczony ESP daje się zaprogramować przez ARDUINO IDE.

Najprostszy program, migający LED z niewielką przeróbką, będzie niezłym testem.

const int ledPin =  22 ;// the number of the LED pin
int ledState = LOW;             // ledState used to set the LED
unsigned long previousMillis = 0;        // will store last time LED was updated
const long interval = 500;           // interval at which to blink (milliseconds)

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(115200);
  Serial.println("Start program");   Serial.println();
}
void loop() {
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    if (ledState == LOW) ledState = HIGH; else ledState = LOW;
    digitalWrite(ledPin, ledState);
    Serial.print("-");
  }
}

I zapis z terminala po resecie mikrokontrolera


A tak przy okazji, gorąco polecam ten mini program TERMITE. Niewielki (140 kB!) prosty i ma wszystko co potrzeba do komunikacji po serialu z naszym mikrokontrolerem.

Ciekawszy jest wydruk komunikatu z ARDUINO IDE


W miejscu w którym powinien znajdować się bootloader użytkownika ARDUINO IDE wgrywa własne dane. Co dokładnie ? Nie wiem. Ale jest oczywiste, iż wgrywanie firmowego bootloadera przy pracy z ARDUINO IDE nie ma większego sensu. Wystarczy samo czyszczenie pamięci flash.



Drugi moduł to ESP32 DEVKIT reklamowany na stronie ESPRESSIF.  Nie jest już tak przyjazny jak klon LOLIN32. Ma dwa przyciski niezbędne do wprowadzenia procesora w stan programowania i nie ma automatycznego ustawiania w mod programowania.

DEVKIT ma jak dla mnie jeszcze jeden feler. Z jakiegoś powodu stary i dobry CH340 zastąpiono tu kością CP2102. A ze sterownikami do tego układu miałem sporo problemów. Ale jakoś poszło.


Po co więc kupować co gorszego? Ma jedną zaletę. W module zastosowano oryginalny ESP32 WROOM-32 z homologacją w UE. Nie ma to większego znaczenia w produkcjach amatorskich. Ale próba sprzedaży urządzeń bez homologacji radiowej może skończyć się interwencją UKE.

Uruchamiamy ESP32 DOWNLOAD TOOL, ESP32 i odznaczay wszystkie pola plików.
Naciskamy START uruchamiając procedurę czytania kości. Teraz należy tylko wprowadzić moduł w stan programowania: jednoczesne naciśnięcie RST i BOOT, zwolnienie RST a po sekundzie BOOT. Za drugim lub trzecim razem powinno się udać. Nie musimy się spieszyć. Program grzecznie czeka aż wykonamy prawidłowo operację (wysyła na terminal kropeczki i kreseczki)


Ekran z odczytami parametrów wygląda identycznie jak w poprzednim oczywiście ze zmienionymi danymi. DEVKIT to też 4MB układ więc dalsza procedura czyszczenia pamięci jest identyczna z poprzednią. Pamiętać trzeba tylko by przed każdym naciśnięciem START ustawić procesor w mod programowania. Brrrrr.

Jeszcze tylko sprawdzenie poprawności wgrywania programów w ARDUINO IDE powyższym programem  BlinkWithoutDelay.
Działa ... ale nie do końca. Program wysyła na terminal prawidłowe znaki ale LED na module pozostaje niewzruszony. Oczywiście. Nie ma dedykowanego dla użytkownika LEDa. Na płytce jest jeden  błyskający w sobie tylko znany sposób. Na razie nie wiem jakim portem można się do niego dobrać.

Podsumowując
Procedura "czyszczenia" ESP32 z chińskich naleciałości przebiegła bez zakłóceń a sam moduł działa bez problemów. Jeśli kupować gotowe moduły z ESP32 to tylko z WEMOS a moduły DEVKIT omijamy dużym łukiem.
A czy jakiś ciąg dalszy z tymi procesorami nastąpi? Kto wie..

153

7 komentarzy:

  1. Część Prawie się zgadzam z opinią o ESP32 DEVKIT . Wczoraj walczyłem chwilkę .
    W Arduino wybierasz płytkę Doit ESP32 Devkit V1. Płytka ma dwie diody czerwona świeci ciągle (niezła głupota) i niebieska pod portem . Polecam wgrać do płytki przykład Blink without Delay. A tutaj znajdziesz schemat https://github.com/Nicholas3388/LuaNode

    OdpowiedzUsuń
  2. P.S. Do wgrania softu z arduino u mnie muszę naciskać tylko switch boot ten drugi nie jest używany . Niebieski led to gpio 2 .

    OdpowiedzUsuń
  3. dzięki za informacje
    jak na razie WEMOS jest bezkonkurencyjny

    OdpowiedzUsuń
  4. Witam
    Ja mam TTGO z ESP32+LoRa433+OLED
    Sterownik USB CP2102.
    Ładnie się programuje z Arduino IDE najnowszej wersji.
    Raz, gdy wgrałem za pomocą ESP32 DownloadTool, zły plik binarny to program się wywalał, ESP resetował się. Nawet po czyszczeniu wg w/w przepisu nie pomagało. Win 7 nie rozpoznawał urządzenia przez kilkanaście sekund.
    Okazało się, że miałem zaznaczone SPI SPEED na 80MHz. Po zmianie na 40 moduł chodzi należycie. Nic się nie resetuje.
    Jurek

    OdpowiedzUsuń
  5. ESP32 devkit v1 programuję poprzez VSC+plarformio od strzału. Żadnych kombinacji z firmwarem. Uruchomiłem kod dla dwóch procesorów i działa wielowątkowo jak ta lala.

    OdpowiedzUsuń
  6. Ja mam Devkit V1 i programuję przez Arduino IDE. Nie usunąłem "chińszczyzny" - chciałem sprawdzić co będzie. I... wszystko w porządku. W trakcie wgrywania trzymam cały czas boot, a po wgraniu naciskam reset i wszystko działa. proponuję jeszcze zwrócić uwagę na dokładny pinout, dlatego, że niektóre piny na V1 (ale może i na innych też) działają tylko w jedną stronę (choć nazywają się GPIO...), np. 34, 35, 36 i 39 są tylko inputem.

    OdpowiedzUsuń
    Odpowiedzi
    1. to ważna uwaga - można z nich tylko czytać. Ale w porównaniu do 8266 w ESP32 i tak mamy sporo dodatkowych portów

      Usuń