sobota, 10 lutego 2024

ESP01 w wersji ESP32 C3


W poprzednim wpisie było o tym czym zastąpić wciąż znakomite sprzętowo i funkcjonalnie ale leciwe D1 MINI takim samym modułem ale już  wypełnionym nowym ESP32. I wychodzi na to, że nie ma z tym absolutnie żadnego problemu. Na tapecie do analizy powinien się więc pojawić kolejny kultowy moduł ESP01 (ESP01S), który zrobił furorę na bazie mini płytek z różnorodnymi czujnikami i przekaźnikami.  Temat dnia - ESP01 w wersji z ESP32 C3.




Coraz więcej i coraz ciekawszych modułów powstaje na bazie ESP32. Już nawet nie wiadomo który z ESP32 jest lepszy. S2, S3 S6, C3 to kolejne odmiany niby tego samego mikrokontolera. Niby bo taki C3 to zupełnie inny mikroprocesor niż S3. Jedynie co ich łączy to podobna lista rozkazów. Ale i to nie do końca.  Widać to dobitnie  w ARDUINO IDE kiedy próbujemy kompilować ten sam kod dla różnych wersji ESP32 i wyskakują nam dziwne komunikaty. ESPressif zapakował w te układy całkiem różne architektury co skutkuje wieloma różnicami sprzętowymi i programowymi. Na szczęście dla użytkowników Arduino IDE większość problemów z tym związanych jest praktycznie niewidocznych dla programujących swoje projekty. 

Ważne jest również to, iż firma stara się w maksymalnym stopniu ułatwić migrację z ESP8266 do ESP32. Ilość zmian jakie należy wprowadzić w kodzie napisanym dla "starego"  ESP by mógł on działać na ESP32 jest naprawdę niewielka. W moich projektach zmiany dotyczyły jedynie bibliotek i niektórych wywołań funkcji w obsłudze WiFi. Jedyną poważną ( i naturalną biorąc pod uwagę rozszerzenie funkcji poszczególnych pinów)  zmianą jest konieczność przenumerowania portów by pasowały do nowego procesora. Zauważyli to też producenci modułów na bazie ESP tprojektując nowe płytki pod ESP32 tak by można było bez problemu zastosować w miejsce ESP8266.

Kolejnym takim przykładem co trzeba zmienić by wszystko zostało po staremu jest mój drugi ulubiony moduł - ESP01.

Nie będzie tu jego szczegółowego opisu bo temat był przerabiany setki razy na różnych portalach w tym i tutaj https://100-x-arduino.blogspot.com/2018/03/esp-01-esp-01s-roznice-obu-moduow.html

Przyjrzyjmy się lepiej nowemu ESP01 występującemu pod nazwą T-01 C3

Mocno podobny do swojego poprzednika i na pierwszy rzut oka różni się tylko dodatkowym gniazdem dla anteny zewnętrznej. Prawdziwe różnice wynikają z nowego procesora
  •  Mikrokontroler: ESP32-C3 RISC-V 32-bit 1-core
  • Taktowanie: 160Mhz
  • Łączność: Bluetooth LE 5.0, WiFi 2.4GHz
  • SRAM: 40KB
  • ROM: 384KB
  • FLASH: 4MB
  • Złącze zewnętrznej anteny
  • Wymiary: 25mm x 15mm x 11mm

Jeszcze ciekawiej jest gdy popatrzymy na możliwości pinów. Pierwsze co widać to dodatkowy port GPIO8 w miejsce rzadko (lub nigdy) używanego portu CE.  Patrząc na funkcje portów ESP32 C3


widać nową możliwość jaką dostajemy - port analogowy na pinie GPIO8.

Dziwić może wyprowadzenie wszystkich strapping pinów w jakie wyposażono C3 co moim zdaniem nieco ogranicza możliwość swobodnego ich zastosowania. Możliwe funkcje poszczególnych pinów to:

  • GPIO2 - strapping pin MUSI mieć stan HIGH w czasie resetu. Może być standardowym I/O, wejściem ADC 12 bitowym w pełnym zakresie pomiarowym 0-3V3 i RTC
  • GPIO 8 - strapping pin MUSI mieć stan HIGH w czasie resetu. Może być tylko standardowym I/O
  • GPIO 9 - strapping pin MUSI mieć stan HIGH w czasie resetu dla normalnego wykonywania programu. Stan LOW wprowadza procesor w stan BOOT - ładowania oprogramowania.
  • GPIO 20 - RX UART i możliwy do wykorzystania jako wejście cyfrowe
  • GPIO 21 - TX UART i możliwy do wykorzystania jako wyjście cyfrowe

Każdy z pinów  GPIO2 GPIO 8 i GPIO 9 może generować PWM, przerwania być portem dla UART1, SPI, I2C, I2S i TWAI choć wciąż należy pamiętać że są to strapping piny.

Wewnętrzny LED jest na pinie GPIO 3. 

UWAGA LED zasilany jest stanem wysokim odwrotnie niż w ESP01. 

Pod tym adresem jest schemat T-01 ale jego czytelność jest żadna.

Jest i zła wiadomość. T-01 może nie współpracować z popularnymi mini modułami  https://100-x-arduino.blogspot.com/2018/03/esp-01-esp-01s-roznice-obu-moduow.html 

A to za sprawą tych nieszczęsnych strapping pinów, które trzeba podpiąć do VCC w momencie startu. Tych rezystorów tam poprostu nie ma. Czekamy więc na T-01 w wersji S !

I na koniec co nieco o programowaniu T-01.

Sprzętowo używamy dokładnie tych samych konwerterów USB/UART co dla ESP01. Najlepiej w wersji samobotującej jak np ten moduł https://100-x-arduino.blogspot.com/2019/02/esp-link-v10-iotmcu-super-atwe.html lub takie https://100-x-arduino.blogspot.com/2018/04/esp-01-programowanie-prosto-prosciej.html

Ja mam swój ulubiony programator https://100-x-arduino.blogspot.com/2016/12/flashowanie-esp-01-i-innyh-esp8266.html i nim postanowiłem poćwiczyć ESP32 C3.

Układ wystartował błyskawicznie i zgłosił przyjazny komunikat


i rozpoczął się załadunek ESP

 
by po kilkunastu sekundach zakończyć całą operację


Operację z wgrywaniem przejściówką należy wykonać tylko raz a następne robimy już via OTA. Szybko i bezproblemowo dzięki 4 MB pamięci flash mieszczącej z łatwością dwie kopie naszego kodu.


Wszystko nie może być tak piękne. Pojawił się problem z odczytywaniem danych wysyłanych przez program do monitora portu szeregowego ARDUINO IDE.  Domyślnie polecenie 
Serial.begin(115200); //USB

kieruje dane do portu szeregowego obsługującego natywny USB zaimplementowany w ESP32 C3. Ten świetny chiński patent znakomicie ułatwiający programowanie różnych modułów z C3 akurat w przypadku T-01 stanowi spory kłopot. T-01 jak raz nie ma złącza USB a nasza przejściówka obsługuje domyślny UART na pinach GPIO 20 i GPIO 21. Dane naszego programu wysyłane na port szeregowy trzeba skierować na inny niż domyślny kanał. Można to zrobićnp. tak 

HardwareSerial MySerial(0);
static const uint8_t myTX = 21;
static const uint8_t myRX = 20;

//=============================================== setup

void setup() {

  MySerial.begin(115200, SERIAL_8N1, myRX, myTX);
  // MySerial.setDebugOutput(true);

  delay(1000);
  MySerial.println();
  MySerial.println(F(__FILE__));
  MySerial.println();
  MySerial.println("[WS-Server] Websocket Version: " WEBSOCKETS_VERSION "\n");

Tworzymy nowy sprzętowy UART na portach 20 i 21 i wszystkie odwołania w programie typu Serial.print() zamieniamy na MySerial.print(). Trochę to kłopotliwe ale na szczęście Arduino IDE posiada opcję zamiany jednego ciągu znaków na inny w całym programie łącznie z naszymi podprogramami.

I to w zasadzie wszystko co trzeba wiedzieć dla bezproblemowej zamiany ESP-01 na T-01 C3. A co z tą wiedzą zrobić podpowie nam już niedługo nasz ulubiony ciąg dalszy.

Więcej informacji o ESP32 C3 i T-01 pod adresami

https://github.com/Xinyuan-LilyGO/T-01C3

https://www.waveshare.com/esp32-c3-zero.htm

https://forum.seeedstudio.com/t/how-to-use-serial1-with-xiao-esp32c3/266306/3


Brak komentarzy:

Prześlij komentarz