Powstanie problemu
Jakiś czas temu podczas testów programu dla jednego z moich projektów przytrafiła mi się sytuacja, przez którą zmarnowałem wiele czasu i nerwów. NodeMCU, którego używałem do testów nie reagowało na żaden wgrany do niego program. Programowanie ESP8266 według Arduino przebiegało pomyślnie, lecz nawet najprostszy program Blink do migania wbudowaną w ESP diodą nie działał. W pewnym momencie miałem już rzucić w kąt swój moduł i zamówić kolejny uznając, że ten po prostu został uszkodzony. Problem powstał podczas wgrywania programu przez Wifi (OTA Over-the-Air), lecz nie mam mocnych dowodów iż użycie właśnie tej metody programowania było przyczyną problemu.
Jednak postanowiłem się jeszcze przyjrzeć informacją jakie można odczytać przy starcie ESP na porcie szeregowym ustawiając Baud rate na 74880. Wyglądały one następująco:
ets Jan 8 2013,rst cause:1, boot mode:(3,6) load 0x4010f000, len 1384, room 16 tail 8 chksum 0xef csum 0xef csum err ets_main.c
Zacząłem więc przekopywać internet w poszukiwaniu odpowiedzi na pytanie, co jest przyczyną takiego stanu rzeczy. Okazuje się, że wszystkiemu winna jest pamięć mikrokontrolera, która uległa uszkodzeniu. Uszkodzenie musiało powstać poza obszarem, w którym zapisywany jest sketch gdyż nadpisywanie programu po raz kolejny i kolejny nie przynosiło rezultatu. Nawet zaznaczenie opcji Narzędzia -> Erase Flash ->All Flash Contents nic nie zmieniało.
Rozwiązanie – nodeMCUflasher
Nareszcie na jednym z zagranicznych for znalazłem rozwiązanie – nadpisanie całej pamięci poprzez nodeMCUflasher. Po pobraniu programu ze GitHuba producenta (link) należy go uruchomić, wybrać z rozwijalnej listy port COM, na którym znajduje się nasz ESP8266 i wcisnąć przycisk Flash (jeśli używanie „gołego” modułu np. ESP-12 przed podłączeniem do zasilania modułu należy zewrzeć GPIO0 do masy). Po trwającej chwilę operacji nasz moduł powinien uruchomić się. Na porcie COM i baud rate 9600 powinniśmy zobaczyć działanie nodeMCU.
Mój moduł ożył! Teraz ponownie mogłem przejść do Arduino i wgrać swój program, który tym razem był już wykonywany przez ESP-12. Zakup kolejnej płytki mogłem jednak odłożyć 🙂
Inne metody
Powyższa metoda nie jest jedyną, jednak wydaje się najłatwiejsza. Można użyć również poniższej komendy aby wymazać całą pamięć mikrokontrolera.
python esptool.py -p com21 erase_flash
Zamiast zapisu com21 należy podać port, jaki jest w Waszym systemie. Jednak osobiście nie nie testowałem tego rozwiązania i mogę potwierdzić jego skuteczności.
0 komentarzy