SK LABS
ESP32-S3
Ništa bez zajednice
D. PETROVIĆ
1. jun 2022.

Uspeli smo da od Ai-Thinkera direktno i ekskluzivno nabavimo određeni broj modula i razvojnih ploča, tako da tekstove o njima možete očekivati u narednom periodu. Iz paketa izdvajamo nekoliko razvojnih ploča sa ESP32-S3 mikrokontrolerima. ESP32-S3 je mikrokontroler, sada već, poveće porodice ESP32. Donosi neke novitete koji nisu dovoljni da bi dobio novu oznaku, ali jesu da bi se razlikovao od svoje starije braće.

ESP32-S3

S3 je mikrokontroler sa Xtensa LX7 jezgrom, istom onom kao na ESP32-S2 (SK 10/2021, i.sk.rs/30121). Ipak, za razliku od S2, na S3 je dvojezgarni mikrokontroler sa radnim taktom od 240 megaherca, poput osnovnog ESP32. Inače, nisu tako retka mišljenja da je S2 naslednik, sada već, vremešnog ESP8266, pre nego ESP32. Mikrokontroler na raspolaganju ima 512 kilobajta internog SRAM-a, uz podršku brzih SPI fleš (od četiri do 16 megabajta) i PSRAM čipova. I dalje se ESP32-S3 drži Wi-Fi 4, to jest, 802.11b/g/n standarda i povezuje se sa lokalnom mrežom na 2,4 gigaherca. Bluetooth se vratio na velika vrata u kategoriji 5 (LE) uz Bluetooth Mesh. Preko čak 45 GPIO, S3 omogućava SPI, I2S, I2C, PWM, RMT i UART interfejse. USB OtG i USB Serial/JTAG su, naravno, tu. Analogno-digitalne konvertere ima na čak 20 GPIO u 12-bitnoj rezoluciji. Čak 14 GPIO mogu da se koriste kao ulazi osetljivi na dodir. Na kraju, tu su još PWM, RMT, SD/MMC host i TWAI, HMI i drugo. ULP koprocesor je, naravno, tu za low-power režime rada. Što se tiče zaštite podataka, na S3 su podržane AES-XTS, RSA i HMAC, kao i WEP/WPA-PSK/WPA2-PSK. Čip, naravno, radi na 3,3 volta, a za napajanje i udoban rad je potrebno više od pola ampera struje.

ESP32-S3-32S dev kit

Ai-Thinker je u ovu razvojnu ploču ugradio modul 32S, koji kombinuje ESP32-S3 i osam megabajta SPI fleša. Modul dolazi sa standardnom štampanom antenom, zajedničkom za oba radija. Tu je i mesto predviđeno za IPEX konektor, ako se za njim ukaže potreba. Modul je dosta uži od standardnog ESP32 WROOM, te je to dozvolilo užu štampanu pločicu, pogodnu za rad sa prototipskim pločama. Pinout pločice donosi rasturene GPIO, EN, dva GND, po jedan 5V i VCC pin sa oznakama na donjoj strani. Razumljivo je da bi oznake sa gornje strane dovele do proširivanja pločice, ali smatramo da bi to bilo nužno (i neophodno) zlo. Na pločici iznad su čak dve LED (warm i cool) i jedna RGB LED. Ove LED su povezane sa pinovima 39, 38, 5, 6 i 7. Pri ivici pločice su ’RST’ i ’BOOT’ tasteri, gde se možda i najviše oseća ispis oznaka samo sa donje strane. Iako mikrokontroler podržava i OtG, na razvojnoj pločici je izveden samo Serial preko CH340C UART čipa, uz auto-reset strujna kola. USB OtG veza može da se ostvari preko pinova 19 i 20 (D- i D+). Za napajanje, tu je mikro USB, ali i VCC pin. Pritom, treba voditi računa o mogućnostima AMS1117 naponskog regulatora na pločici.

U trenucima kada smo počeli sa pripremama teksta, pločica je dobrim delom bila osuđena na ESP-IDF. Ipak, stvari se pomeraju prilično brzo. Arduino IDE podrška za S3 je u međuvremenu postala dostupna kroz nadogradnju v2.0 verzije ploča (2.0.3) kroz Boards Manager. Još uvek je u pitanju podrška sa ponekim bagom, ali ono što smo mi probali radi bez problema. Postoji priličan broj opcija prilikom odabira ploča, počevši od načina uploada, količine fleša, a tu je i podrška za PSRAM.

Za jezik Zmija, na pločici su nam neophodna oba mikro-USB porta. OtG smo dodali žicama uz pomoć male mikro-USB pločice. MicroPython, kao i CircuitPython nemaju odgovarajuće verzije za 32S. Najbliži po specifikacijama je N8 iz Espressifa (DevKitC), a direktna podrška za njega postoji za CircuitPython. Usled više pokušaja, proradila je verzija 7.2.0. Niti jedna verzija MicroPythona nam nije radila ovde.

Postupak je sledeći: Nakon preuzimanja BIN fajla, razvojnu ploču sa računarom povezujemo preko mikro-USB priključka. O instalaciji EspToola smo više puta pisali, referenca je članak o S2 iz linka iznad. U CMD kucamo komandu:

esptool.py --port COM7 erase_flash

gde je COM, zapravo, port pod kojim se pločica prijavila. Ovom komandom se briše sadržaj fleša na modulu. Nakon toga, kucamo sledeću komandu:

esptool.py --chip esp32s3 --port COM7 write_flash -z 0x0 C://file.bin

Ovom komandom se na fleš memoriju modula spušta BIN fajl CircuitPythona. Podrazumeva se da je port odgovarajući, kao i putanja ka preuzetom fajlu. Nakon toga, pločica se sa računarom povezuje preko OtG, u našem slučaju, mikro-USB pločice (vidi se na slici).

Za programiranje smo koristili Thonny. Ispod je primer „blinkanja” LED.

import board

import time

import digitalio

cool = digitalio.DigitalInOut(board.IO38)

warm = digitalio.DigitalInOut(board.IO39)

red = digitalio.DigitalInOut(board.IO5)

green = digitalio.DigitalInOut(board.IO6)

blue = digitalio.DigitalInOut(board.IO7)

cool.direction = digitalio.Direction.OUTPUT

warm.direction = digitalio.Direction.OUTPUT

red.direction = digitalio.Direction.OUTPUT

green.direction = digitalio.Direction.OUTPUT

blue.direction = digitalio.Direction.OUTPUT

   

while True:

 warm.value=True

 time.sleep(0.5)

 warm.value=False

 time.sleep(0.5)

Uz dodatak OLED I2C SSD1306 ekrana i BME280 I2C senzora, i malo programiranja dobili smo vrednosti senzora na ekranu.

import time

import board

import busio

import displayio

import terminalio

import adafruit_displayio_ssd1306

from adafruit_display_text import label

from adafruit_bme280 import basic as
adafruit_bme280

displayio.release_displays()

i2c = busio.I2C(scl=board.IO2, sda=board.IO1)

bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c, address=0x76)

bme280.sea_level_pressure = 1013.25

display_bus = displayio.I2CDisplay(i2c, device_address=0x3c)

 

WIDTH = 128

HEIGHT = 64

NUM_OF_COLOR = 2

 

display = adafruit_displayio_ssd1306.SSD1306(display_bus, width=WIDTH, height=HEIGHT)

#=============

group = displayio.Group()

bitmap = displayio.Bitmap(WIDTH, HEIGHT,
NUM_OF_COLOR
)

bitmap_palette = displayio.Palette(NUM_OF_COLOR)

bitmap_palette[0] = 0x000000

bitmap_palette[1] = 0xFFFFFF

tileGrid = displayio.TileGrid(bitmap, pixel_shader=bitmap_palette, x=0, y=0)

group.append(tileGrid)

# Ispis naziva vrednosti

text_group = displayio.Group()

 

text_temp = label.Label(terminalio.FONT, text="temperature:", color=0xFFFFFF)

text_temp.anchor_point = (0.0, 0.0)

text_temp.anchored_position = (0, 0)

 

text_humi = label.Label(terminalio.FONT, text="humidity:", color=0xFFFFFF)

text_humi.anchor_point = (0.0, 0.0)

text_humi.anchored_position = (0, 10)

 

text_pres = label.Label(terminalio.FONT, text="pressure:", color=0xFFFFFF)

text_pres.anchor_point = (0.0, 0.0)

text_pres.anchored_position = (0, 20)

 

text_alti = label.Label(terminalio.FONT, text="altitude:", color=0xFFFFFF)

text_alti.anchor_point = (0.0, 0.0)

text_alti.anchored_position = (0, 30)

 

text_group.append(text_temp)

text_group.append(text_humi)

text_group.append(text_pres)

text_group.append(text_alti)

group.append(text_group)

 

display.show(group)

time.sleep(2)

#=============

while True:

 temp = bme280.temperature

 humi = bme280.humidity

 pres = bme280.pressure

 alti = bme280.altitude

 

 text_temp.text = "%0.1f C" % temp

 text_humi.text = "%0.1f %%" % humi

 text_pres.text = "%0.1f hPa" % pres

 text_alti.text = "%0.2f m" % alti

 

 print("Temperature: %0.1f C" % temp)

 print("Pressure: %0.1f hPa" % pres)

 print("Humidity: %0.1f %%" % humi)

 print("Altitude = %0.2f metara NV" % alti)

 time.sleep(2)

Probali smo i testove vezane za Wi-Fi i Bluetooth sa kojima nismo imali nikakvih problema. S obzirom na to da oba radija dele istu antenu, kao i kod osnovnog ESP32, nije preporučljivo da oba rade u istom trenutku.

ESP32-S3-12K dev kit

Razvojna ploča iz podnaslova samo na prvi pogled liči na ploču iznad. Ovde je drugačiji modul u pitanju, što je doprinelo tome da dođe do pretumbavanja komponenata kakve smo pomenuli na 32S modelu. Sve su, naravno, tu, što se odnosi i na dve „obične” i jednu RGB LED. Isto važi za tastere, UART čip, mikro-USB port (Serial), kao i na dva headera uz oznake sa donje strane. Pinout headera se razlikuje u odnosu na 32S, ali ono što je bitno jeste to da su svi pinovi tu. Kada kažemo drugačiji modul, ovde je to ESP32-S3-12K, modul koji pored osam megabajta SPI fleša, donosi i osam megabajta PSRAM-a. O samom S3 čipu smo već sve rekli i tu razlike nema.

Nažalost, 12K nismo uspeli da programiramo preko CircuitPythona. BIN fajl se uspešno dâ spustiti na pločicu, ali se ona ne postavlja kao CIRCUITPY drajv. Može BIN za N8, kao kod 32S, ali, ipak, ne govorimo o istim modulima. Okrenuli smo se MicroPythonu. Od svih dostupnih verzija, najpribližnije su verzije za FeatherS3, „Neočekivanog mejkera”, gde se BIN spušta preko OtG headera. U našem slučaju, preko dodatne mikro-USB pločice, s tim što je potrebno da 12K tasterima prebacimo u BOOT režim. Osim Bluetootha, ni Wi-Fi nismo uspeli da pokrenemo. GPIO i I2C, pak, jesmo. Ono što radi, radi dobro, ali, ipak, govorimo o nestabilnim verzijama.

Arduino IDE se ovde pokazao kao najbolje rešenje. Dovoljno je uključiti podršku za PSRAM i - voila. Obe Ai-thinker pločice su radile savršeno uz Arduino IDE. Tu mislimo i na oba radija, kao i na standardna povezivanja interfejsa i GPIO. Razumljivo je da nismo probali baš svaki senzor i svaki modul koji postoji, ali testovi sa LED, BME280 i OLED ekrančićem radili su savršeno.

ESP32-S3 WHITEBoard

Kao i kod S2 i C3, i ovde smo dali mali doprinos. Dizajnirali smo pločicu sa originalnim Espressifovim R1N8R8 modulom. U pitanju je modul koji pored ESP32-S3 dolazi sa po osam megabajta SPI fleša i PSRAM-a. Nešto poput 12K. Modul je dimenzijama najpribližniji ESP32 WROOM, što uz oznake pinova sa gornje strane znači da je dovoljno široka da ne može da se koristi uz prototipske ploče. Na pločici smo, standardno, dodali ’RST’ i ’BOOT’ tastere, Neopixel LED, te konektor Li-Ion baterije, uz strujna kola za njeno punjenje. Tu su oba mikro-USB porta (Serial i OtG). Ovo nas štedi muka sa provodnicima koje smo imali kod pločica iznad. Na kraju, ostavili smo i JTAG header. Šemu i primere možete pronaći ovde: i.sk.rs/358478.

Za R1N8R8 modul kod MicroPythona, rekosmo, ne postoji direktna podrška, već kroz FeatherS3, mada ni ona ne radi kako treba (nightly builds). FeatherS3, inače, ima čak 16 megabajta PSRAM-a, dok je ovde to osam megabajta. Zato CircuitPython za ESP32-S3 DevKitC N8R8 u verziji 7.2.5 radi savršeno, baš nikakvih problema nismo imali. Postupak spuštanja BIN fajla opisali smo kod 32S iznad. Na GitHubu možete naći i primere za R1N8R8 koji savršeno rade na našoj pločici.

Naša pločica može da se koristi kroz Arduino IDE preko bilo kog od USB priključaka. Tek sa Arduinom nismo imali apsolutno nikakvih problema. Na pomenutoj GitHub stranici je i nekoliko primera vezanih za Arduino.

• • •

Rekli smo da je podrška za S3 u povoju na sva tri fronta. Nekako je CircuitPython najbliži stabilnom rešenju, što se tiče Zmija. MicroPython dolazi sa dosta „nightly builds”, gde je prva stabilna verzija još iz januara tekuće godine. Arduino podrška postoji i zadivljujuće je stabilna. Zapravo, iznenađeni smo brzinom kojom je postala dostupna, s obzirom na to da smo pratili tok razvoja podrške od strane zajednice. Još jednom se pokazalo da je u mejkerskom svetu zajednica pod broj jedan, a broj učesnika je zapanjujući.

U trenutku pisanja teksta bili smo malo skeptični povodom upotrebljivosti S3, međutim, kako je vreme odmicalo, podrška je postajala sve stabilnija. Već sada možemo da kažemo da je pravi trenutak da se upotrebi za projekte. Ai-Thinkerove ploče su odlične, povoljne, i svakako ih preporučujemo. Ako se, pak, odlučite da se oprobate u sopstvenom dizajniranju, možete da koristite našu šemu kao referencu. Ako ništa drugo, bar zbog dva USB priključka i Neopixela kome dajemo prednost nad klasičnim RGB LED.


PRETHODNI TEKST
SLEDEĆI TEKST
Najčitanije
Igre
Telefoni
Hardver
Softver
Nauka
Aktuelno štampano izdanje
APRIL 2024
Gigabyte Radeon RX 7900 GRE Gaming OC 16G
Zlatni zeka
Model koji je izvorno namenjen kineskom tržištu, i koji se tamo pojavio još prošlog leta, lepo je popunio prazninu između modela RX 7800 XT i RX ...
Asus ROG Zephyrus G16 (GU605MY-QR085X)
Najkompaktnija zverka
Uz sve kompromise, ovo je verovatno najsnažniji laptop smešten u manje od dva kilograma i 18 milimetara visine...
Honor Watch 4
Savršeno upakovan
Sat koji donosi veoma malo pravih noviteta, ali kod kog je uklapanje poznatog i očekivanog dovedeno do savršenstva...
Mobile World Congress 2024
Ovde i AI ima AI
Utisak je da MWC „na nogama” drže isključivo velike kineske kompanije, a praksa predstavljanja flegšip telefona na sajmu je sve ređa...
Inovativni motori i reaktori
Bolji pogon
Električni motori uskoro stižu u putničke avione, samo da se reši nekolicina konstruktorskih prepreka...
Honor Magic 6 Pro
Magična Šestica
Sistem kamera oslanja se na tehnički sofisticiran dizajn sa promenjivim otvorom blende...
Apple, AI i nova tužba za monopol
Kisela ili slatka jabuka
Apple će uvek da koristi sopstveno rešenje, ukoliko može da ga napravi dovoljno brzo i kvalitetno...
Dragon’s Dogma 2
Nastavak dvanaest godina stare igre koja odavno ima kultni status, naoko, jednostavan akcioni RPG koji se trudi vas angažuje, ali i pomalo namuči...
Rise of the Ronin
Rise of the Ronin izuzetno podseća na Ghost of Tsushima, kako po izgledu, tako i po konceptu...
Highwater
Ugodan koktel postapokaliptične komike i poetične melanholije...
Microsoft Windows 3.0
Prisećamo se treće iteracije operativnog sistema baziranog na grafičkom korisničkom okruženju, koja je konačno mogla da izađe na crtu takmacima...
© 2024 Svet kompjutera. Sva prava zadrzana.
Novi broj - Arhiva - Forum - O nama