- OLED ekranas
- Būtini komponentai
- SPI kontaktų jungtys tarp „NodeMCU“ ir OLED ekrano
- NodeMCU programavimas sąsajai su OLED
- Konvertuokite vaizdą į „Bitmap Values“
Šioje pamokoje mes sujungsime OLED ekraną su „NodeMCU ESP8266“. „NodeMCU“ yra atviro kodo IoT platforma, apimanti programinę-aparatinę įrangą, kuri veikia naudojant „Espressif Systems“ pigius „Wi-Fi“ palaikančius „ESP8266 Wi-Fi SoC“. Jis turi GPIO kaiščius, skirtus prijungti kitus periferinius įrenginius, ir palaiko nuoseklųjį ryšį naudojant SPI, I2C ir UART kaiščius. Jis taip pat turi kaiščius ADC ir PWM. Mes anksčiau susiejome OLED su kitu mikrovaldikliu, įskaitant ESP šeimos valdiklį (ESP32):
- Sąsajos SSD1306 OLED ekranas su „Raspberry Pi“
- Sąsajos SSD1306 OLED ekranas su „Arduino“
- Sukurkite išmanųjį laikrodį susiedami OLED ekraną su „Android“ telefonu naudodami „Arduino“
- Interneto laikrodis naudojant ESP32 ir OLED ekraną
Šioje pamokoje naudosime SPI protokolą sąsajai su nespalvotu 7 kontaktų SSD1306 0,96 OLED ekranu su „NodeMCU“ ir išmoksime rodyti vaizdą OLED ekrane su „NodeMCU ESP8266“.
OLED ekranas
Organinis šviesos diodas (OLED) yra tam tikras šviesos diodas, kai iš organinių junginių pagamintas šviesą skleidžiantis sluoksnis skleidžia šviesą, kai tiekiama elektros srovė. Šis sluoksnis dedamas tarp dviejų elektrodų. Ši technologija naudojama tokiuose ekranuose kaip kompiuteriai, televizoriai, išmanieji telefonai ir pan. OLED ekranai turi savo šviesą ir jiems nereikia jokio apšvietimo kaip LCD, todėl jie yra energiją taupantys ir naudojami su daugeliu mikrovaldiklių. Dar vienas OLED ekranų naudojimo, palyginti su LCD, pranašumas yra didelės ir geresnės kokybės OLED grafikos rodymas. Sužinokite daugiau apie OLED ekranų technologiją čia.
Rinkoje yra įvairių rūšių OLED ekranų. Šie ekranai apibūdinami pagal spalvą, kaiščių skaičių, valdiklio IC ir ekrano dydį. Remiantis spalva, OLED yra monochrominės mėlynos, vienspalvės baltos ir geltonos / mėlynos spalvos. Ryšio pagrindu daugiausia yra dviejų tipų OLED - 3pin ir 7pin. 3 kontaktų OLED gali būti naudojamas I2C ryšio režimu, o 7 kontaktų OLED - SPI arba I2C režimu.
Šioje pamokoje naudosime „ Monochrominį 7 kontaktų SSD1306 0,96 “ OLED ekraną, kurio plotis yra 128 pikselių ir ilgis - 64 pikseliai. Šis ekranas gali veikti tiek SPI, tiek I2C ryšio protokoluose. Šioje pamokoje naudosime SPI protokolą. Šiame OLED yra SSD1306 IC, kuris padeda ekrane rodyti taškus.
Būtini komponentai
- Vienspalvis 7 kontaktų SSD1306 0,96 ”OLED ekranas
- MazgasMCU ESP8266
- Mikro USB laidas
- Bandomoji Lenta
- Vyriškas - vyriškas džemperio laidai
SPI kontaktų jungtys tarp „NodeMCU“ ir OLED ekrano
Žemiau pateikiama grandinės schema, skirta prijungti 7 kontaktų OLED ekraną su „NodeMCU“, kad būtų galima bendrauti naudojant SPI nuoseklaus ryšio protokolą.
Žemiau esančioje lentelėje parodyti ryšiai tarp OLED ekrano ir „NodeMCU ESP8266“. GND kaištis eina į „NodeMCU GND“, VDD kaištį galima prijungti prie 3,3 V arba 5 V, SCK yra OLED ekrano laikrodžio kaištis, kuris yra prijungtas prie „NodeMCU“ D5 SPI laikrodžiui. SDA kaištis, kuris yra MOSI kaištis SPI sąsajos OLED, eina į „NodeMCU“ D7. RESET kaištis eina į D3. DC, duomenų komandos kaištis yra prijungtas prie „NodeMCU“ D2. Paskutinis kaištis yra CS eina į D8, „NodeMCU“ lusto parinkimą.
Nr. |
„Oled“ ekranas |
„NodeMCU“ |
1 |
BND |
BND |
2 |
VDD |
3.3V |
3 |
SCK |
D5 |
4 |
MOSI (SPI) arba SDA (I2C) |
D7 |
5 |
ATSTATYTI |
D3 |
6 |
DC |
D2 |
7 |
CS |
D8 |
Čia naudosime bibliotekas „ Adafruit _SSD1306.h“ ir „ Adafruit_GFX.h “, kad susietume OLED su „NodeMCU“. Atidarykite „Arduino IDE“ ir įdiekite naujausią versiją iš „Arduino IDE“ („ Eskizas“> „Įtraukti biblioteką“> „Tvarkyti bibliotekas“ arba „Ctrl + Shift_I“ ).
Kadangi mūsų OLED ekrano ID pikselių dydis yra 128x64, turime pakeisti „Adafruit_SSD1306“ antraštės failą. Atidarykite „Arduino“ bibliotekas, eikite į „ Adafruit_SSD1306“ ir atidarykite jos antraštės failą („ Adafruit _SSD1306.h“ ). Pakomentuokite eilutę „ #define SSD1306_128_32 “ ir atžymėkite eilutę „#define SSD1306_128_64 “, kaip parodyta žemiau esančiame paveikslėlyje, tada išsaugokite failą. Pagal numatytuosius nustatymus šioje bibliotekoje yra „# define SSD1306_128_32 “.
Pagaliau pakeiskite kaiščių numerius „ ssd1306_128x64_spi “ „Adafruit SSD1306“ pavyzdyje, kaip parodyta lentelėje. Dabar, paleidę eskizą, tinkamai sujungę OLED ekraną su „NodeMCU“, OLED ekrane pamatysite „Adafruit“ logotipą, kuris pagal nutylėjimą yra išsaugotas bibliotekoje. Po „Adafruit“ logotipo jis rodo daugybę kitų grafinių elementų, tokių kaip linijos, stačiakampiai, trikampis, apskritimai, stygos, skaičiai, animacijos ir bitų žemėlapis. Čia Šioje pamokoje sužinosime, kaip rodyti bet kokį vaizdą OLED naudojant „NodeMCU ESP8266“.
NodeMCU programavimas sąsajai su OLED
Kaip visada pateikiamas visas kodas pabaigoje, čia mes išsamiai paaiškinome kodą.
Paleiskite kodą importuodami reikalingas bibliotekas. Kadangi mes naudojame SPI protokolą, mes importuosime „SPI.h“ biblioteką, taip pat importuosime „Adafruit_GFX.h“ ir „Adafruit_SSD1306.h“ OLED ekranui.
# įtraukti
Mūsų OLED dydis yra 128x64, todėl ekrano plotį ir aukštį nustatome atitinkamai 128 ir 64. Taigi apibrėžkite OLED kaiščių, sujungtų su „NodeMCU“, kintamuosius SPI ryšiui.
#define screen_width 128 // OLED ekranas plotis pikseliais #define screen_height 64 // OLED ekranas aukštis, pikseliais // deklaracija SSD1306 ekrane prijungtas naudojant programinę įrangą SPI (numatytoji sąlygomis): # define OLED_MOSI D7 # define OLED_CLK D5 # define OLED_DC D2 #define OLED_CS D8 #define OLED_RESET D3 „ Adafruit_SSD1306“ ekranas (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Inicializuokite OLED ekraną naudodami SSD1306_SWITCHCAPVCC, kad generuotumėte 3,3 V viduje, kad būtų galima inicijuoti ekraną.
if (! display.begin (SSD1306_SWITCHCAPVCC)) { Serial.println (F ("SSD1306 paskirstymas nepavyko")); dėl(;;); // Negalima tęsti, visam laikui }
OLED ekrano ekranas išvalomas prieš nieko rodymą iškviečiant funkcijos display.clearDisplay () funkciją. Mes nustatyti šrifto dydį iki 2 paskambinę funkcija setTextSize (font-size), ir nustatyti teksto spalvą ir žymeklio padėtį naudojant setTextColor ir setCursor funkciją . Komanda Display.display () naudojama duomenims perkelti į SSD1306 valdiklio vidinę atmintį. Po perkėlimo ekrane rodomas pikselis. Dabar galime pradėti slinkti tekstą įvairiais būdais, paskambinę display.startscrollright (x-pos, y-pos) ir display.startscrollleft (x-pos, y-pos) už laiką, nurodytą uždelsimo funkcijoje. Teksto slinkimą galima sustabdyti naudojant funkciją display.stopscroll ().
void testscrolltext (negaliojantis) {display.clearDisplay (); // išvalyti OLED display.setTextSize (2) ekraną; // Nubraižykite 2X mastelio teksto ekraną.setTextColor (BALTAS); display.setCursor (0, 0); display.println (F ("CIRCUIT")); display.println (F ("DIGEST")); display.display (); // Rodyti pradinį teksto vėlavimą (100); // Slinkite įvairiomis kryptimis, pristabdydami tarp jų: display.startscrollright (0x00, 0x0F); vėlavimas (2000); display.stopscroll (); vėlavimas (1000); display.startscrollleft (0x00, 0x0F); vėlavimas (2000); display.stopscroll (); vėlavimas (1000); display.startscrolldiagright (0x00, 0x07); vėlavimas (2000); display.startscrolldiagleft (0x00, 0x07); vėlavimas (2000); display.stopscroll (); vėlavimas (1000); }
Mes iškviečiame funkciją display.drawBitmap (), kuriai reikalingi 6 parametrai (x koordinatė, y koordinatė, bitų žemėlapio masyvas, plotis, aukštis ir spalva), kad pieštumėte vaizdą OLED. Kadangi mūsų ekrano dydis yra 128x64, plotį ir aukštį nustatome atitinkamai 128 ir 64. Čia bitmap masyve yra pikselių informacija, skirta piešti pikselį ekrane ir sukurti vaizdą. Šią bitų žemėlapių masyvą galima sukurti internete, kuris paaiškinamas toliau, arba yra daug programinės įrangos, leidžiančios konvertuoti vaizdą į bitų žemėlapių masyvą.
const nepasirašytas simbolis myBitmap PROGMEM = { 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xc0, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xc7, 0x80, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0x0f, 0x01, 0xc0, 0xff, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x0f, 0x03, 0xFF, 0xc0, 0x7f, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xf8, 0x1e, 0x03, 0x3f, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x3e, 0x03, 0x3f, 0xfc, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x3c, 0x03, 0x7f, 0xff, 0xff 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xc0, 0x7c, 0x03, 0xf0, 0x3f, 0x83, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x78, 0x00, 0xc0, 0x0f, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0x00, 0x00, 0x07, 0xe0, 0xff 0xff 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x01, 0xf0, 0x00, 0x00, 0x03, 0xf8, 0x7f, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xfc, 0x01, 0xf0, 0x00, 0x00, 0x00, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x03, 0xe0, 0x00, 0x0f, 0x00, 0x7e, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x07, 0xc0, 0x3f, 0xff, 0xff 0xff 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xc0, 0x7f, 0xf9, 0x80, 0x0f, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xff, 0xf9, 0x80, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0x03, 0xff, 0xff, 0xx 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xf0, 0x1f, 0x80, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff0, 0xff, 0xff, 0xc0, 0x00 0x06, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff0xx, 0xff, 0xc0, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x00, 0x00 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x0f, 0x00, 0x80, 0x00, 0x00, 0x01, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x1e, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x3c, 0x03, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x7c, 0x03, 0x3f, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xf8, 0x01, 0xe0, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x03, 0xb0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0x00, 0x03, 0x18, 0x01, 0xff, 0xff, 0xff, 0xffx 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x03, 0xbc, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00x 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0xff, 0xff, 0x80, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff0, 0x00, 0x1f, 0xff, 0x00, 0x0x0x 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x07, 0xfc, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x03, 0xf0, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x01, 0xc0, 0x00, 0x00, 0x0x, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x03, 0x0x 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0xff, 0xe0, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x3f, 0xe0, 0x00, 0xff, 0xff 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x0e, 0x30, 0x00, 0x7f, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x07, 0x70, 0x00, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x03, 0xe0, 0x1B, 0xfc, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xc0, 0x7f, 0xf0, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff 0x7f, 0xc0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x67, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0xff, 0x00, 0x1x, 0xff 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x7e, 0x00, 0x7f, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x3c, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xffx 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xuff 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; display.drawBitmap (35, 0, myBitmap, 128, 64, JUODAS, BALTAS); display.display ();
Konvertuokite vaizdą į „Bitmap Values“
Internetinį „Bitmap“ galite sukurti iš http://javl.github.io/image2cpp/. Įkelkite vaizdo failą, kurį norite rodyti OLED, ir nustatykite dydį 128x64. Bus rodomas peržiūros vaizdas, tada bus sugeneruotas taškų masyvas.
Žemiau pateiktose ekrano kopijose parodomas bet kokio vaizdo bitų žemėlapio vertės generavimo procesas.
Galiausiai įkelkite visą kodą į „NodeMCU ESP8266“ ir pamatysite vaizdą, rodomą OLED ekrane. Čia OLED ekrane rodome „ CircuitDigest“ logotipą.