Ilgari aytib o’tilganidek, aksariyat standart bibliotekalar qaysidir datchik, modul yoki bog’lanish interfeysidan foydalanishni osonlashtirish maqsadida yaratiladi. Biroq foydalanuvchi o’zi ko’p qo’llaydigan dasturiy bloklarni va funksiyalarini ham alohida tashqi faylga sodda biblioteka sifatida saqlab olishi mumkin. Natijada, har safar shu funksiyagadan foydalanish zarurati tug’ilganda, shunchaki kerakli sketchga uni biblioteka sifatida “#include” buyrug’i yordamida qo’shib olish yetarli bo’ladi.
Biz quyida foydalanuvchi bibliotekasini yaratishning sodda va nisbatan murakkab (standart biblioteka) bo’lgan 2 ta variantini alohida-alohida ko’rib chiqamiz. Shuningdek, har bir usulni 2 tadan misolning bir nechta versiyalari yordamida ko’ramiz.
Yangi biblioteka yaratish
Aksariyat hollarda qulaylik uchun, standart biblioteka asosan 2 ta fayldan tashkil topadi. Ulardan biri “sarlavha fayli” deb (bunday deyilishiga sabab, bu fayl bibliotekaning barcha boshqa fayllariga havolalarni o’z ichiga oladi), 2-si esa, “realizatsiya fayli” deb yuritiladi (bunday deyilishiga sabab, asosiy bajariladigan kod shu faylda saqlanadi). Biblioteka sarlavha va realizatsiya fayllari nomi bir xil bo’lishi shart. Sarlavha fayli “.h” (header), realizatsiya fayli esa “.cpp” (C++) kengaytmasiga ega bo’ladi.
Bundan tashqari, standart biblioteka tarkibida “keywords.txt” matnli fayli va “examples” ichki papkasi ham bo’lishi mumkin. “keywords.txt” faylining vazifasi faqat biblioteka ayrim elementlarini (klass, metodlarni) alohida ranglarda ajratib ko’rsatish hisoblanadi. “examples” papkasida, nomidan ko’rinib turibdiki, biblioteka funksiyalarini namoyish qilishga mo’ljallangan misollar (sketchlar) saqlanadi.
Agar biblioteka kam sondagi vazifalarni bajarishga mo’ljallangan bo’lsa, sarlavha va realizatsiya fayllari kodini yagona faylga – sarlavha (.h) fayliga birlashtirish ham mumkin. Bunda, realizatsiya faylidagi kod asosiy faylga ko’chirib olib o’tilishi kerak. Shuning uchun o’rganish davomida bibliotekaning 1 ta faylli variantini ham ko’rib o’tamiz.
Sodda biblioteka
Sodda biblioteka yaratish uchun C++ dasturlash tiliga murojaat qilish talab etilmaydi. Jumladan, .cpp kengaytmali faylimizda ham o’zimizga tanish bo’lgan Wiring tilidagi kodlarni qo’llash bilan cheklanamiz. Chunki, ilgari ham tilga olinganidek, Wiring ham C++ ning soddalashtirilgan ko’rinishlaridan biri xolos.
1-misol. Ushbu usulni o’rganish uchun, “Blink” sketchi qanchalik sodda bo’lmasin, biz uni biblioteka yordamida boshqariladigan boshqacha ko’rinishga keltiramiz. Aynan sketchning soddaligi va hammaga tanishligi ham yangi biblioteka yaratish jarayonini osonlashtiradi. Bundan tashqari, bibliotekaga pirpirash davomiyligi, takrorlanishlar sonini ko’rsatish rejimlarini ham qo’shamiz.
Ma’lumki, sketchning dastlabki ko’rinishi quyidagicha:
Alohida faylga olib o’tishdan oldin sketchning bajarish (realizatsiya) qismini alohida funksiyaga aylantiramiz va skecthni ushbu ko’rinishida ifodalab olamiz. Bundan tashqari, sketch aksariyat mikrokontrollerda ishlashi uchun 13-pin o’rniga LED_BUILTIN yozuvini qo’llaymiz:Sketchni mikrokontrollerga yuklasak, avvalgidek ishlayotganini kuzatishimiz mumkin. Asosiy kodni alohida funksiyaga ajratib olishimizdan maqsad shuki, uni bo’lajak bibliotekamizning realizatsiya (bajarish) qismi sifatida foydalanamiz.
Shu yerda sketchimizni yanada takomillashtiramiz. Sketchdagi miltilla() funksiyasiga yangi “hisobchi” argumentini qo’shamiz. Keyinchalik ham sketchning faqat shu variantini takomillashtirib boramiz. Oldingi “Blink” sketchidan farqlash uchun uni “miltillash” deb nomlaymiz. Demak, “miltillash.ino” sketchining kodi quyidagicha bo’ladi:
Bu yerdagi “hisobchi” o’zgaruvchisi qiymatini setup() funksiyasi sohasida o’zgartirish orqali takrorlanishlar sonini cheklash mumkin bo’ladi. loop() funksiyasida esa, takrorlanishlar sonini ko’ratishning ma’nosi yo’q.
Endi standart bibliotekaning 1-varianti yaratishga kirishamiz. Bunday bibliotekada, shunchaki yuqoridagi misolda dasturning ichki funksiyasi sifatida qaralgan miltilla() funksiyasini va unga taalluqli o’zgaruvchilarni alohida fayllarga olib o’tamiz.
Bunday fayllarni yaratish uchun, dastlab Arduino IDE dasturi sketchlari saqlanadigan papkadagi “libraries” papkasini topamiz va yangi “YangiBlinkLib” deb nomlangan yangi papka hosil qilamiz (sketchlar papkasiga “Скетч” menyusidagi “Показать папку скетча” elementi yoki “Ctrl+K” klavishalar kombinatsiyasi orqali o’tish mumkin). Uning ichida esa, ixtiyoriy matnli redaktor yordamida “YangiBlink.h” sarlavha fayli, “YangiBlink.cpp” nomli realizatsiya fayli va “keywords.txt” kalit-so’zlar faylini yaratib olamiz. Bundan tashqari “YangiBlinkLib” papkasi ichida “examples” papkasini ham yaratib qo’yamiz. Unga keyinchalik, yaratilgan bibliotekadan foydalanishga misol tariqasida o’zimiz yaratadigan sketch faylini nusxalab qo’yamiz.
Biblioteka fayllarini Arduino IDE yordamida ham hosil qilishimiz mumkin. Buni 2 xil usulda amalga oshirsa bo’ladi:
1-usulda fayllar sketch ko’rinishida yaratiladi va alohida papka ichida .ino kengaytmasi bilan saqlanadi. Shundan keyin, har bir fayl yaratilganidan keyin fayl menejeri orqali (masalan, Total Commanderda) uning kengaytmasini .h, .cpp va txt ga o’zgartirilishi, sketchlarni o’z ichiga olgan papkalar o’chirib yuborilishi, “libraries” papkasi ichida “YangiBlinkLib” papkasini yaratib, sketchlarni unga ko’chirish kerak bo’ladi.
2-usulda Arduino IDE dasturida yangi sketch yaratib, dastur oynasidag sketch nomidan o’ng tomonda joylashgan menyudan “Новая вкладка” buyrug’i yoki “Ctrl+Shift+N” klavishalari kombinatsiyasi yordamida yangi oynalar yaratamiz, ularga biblioteka nomi bilan bir xil, lekin .h va .cpp kengaytmaga ega bo’lgam nomlar beramiz: “YangiBlink.h” va “YangiBlink.cpp” (Bunday usul bilan .txt kengaytmali fayl yaratib bo’lmaydi. Lekin “keywords.txt” faylini sketch ko’rinishida yaratib, keyin uning kengaytmasini .ino dan .txt ga o’zgartirib olish mumkin). Bu fayllar sketch bilan bitta papkaga saqlanadi. Ularni yuqorida ko’rsatilgan tartibda “libraries” papkasi ichida yangi “YangiBlinkLib” papkasini yaratib, shu papkaga ko’chirib olib o’tamiz.
Biblioteka fayllarini quyidagi ko’rinishga keltiramiz:
“YangiBlink.h” fayli:
“YangiBlink.cpp” fayli:
Ko’rinib turibdiki, realizatsiya faylida PinMode() funksiyasi ham kodga kiritilgan. Natijada, yaratilayotgan sketchda setup() funksiyasi tarkibida uni alohida ko’rsatib qo’yishga hojat qolmaydi. “keywords.txt” faylida quyidagi ma’lumotlar mavjud bo’lishi kerak:
Shu yo’l bilan, fayldagi KETWORD1 yozuvi yordamida “YangiBlink” va “miltilla” so’zlarini kalit-so’z sifatida alohida rangda ko’rsatilishi kerakligini belgilab qo’yilmoqda.
Shundan keyin, Arduino IDE ni to’liq yopib, qayta ishga tushiramiz va yangi sketch yaratib, “Скетч/Подключить библиотеку” menyusidan “YangiBlinkLib” (biz yaratgan biblioteka papkasining nomi) yozuvini topib tanlaymiz (Agar menyuda “YangiBlinkLib” yozuvi mavjud bo’lmasa, bu biblioteka yaratilishi jarayonida xatolik yuz berganini bildiradi). Xatolik kuzatilmasa, sketchda #include <YangiBlink.h> yozuvi paydo bo’lishi kerak.
Yangi sketchmizni quyidagi holga keltiramiz va ishga tushiramiz:
Sketchdagi pauza davomiyligi ko’rsatilmaydigan variantda uning davomiyligi 1000 ms (1 sekund) deb qabul qilinadi, chunki bibliotekadagi tegishli funksiyada delay() funksiyasi argumentida o’zgaruvchi o’rniga “1000” qiymati aniq belgilab qo’yilgan. Xuddi shuningdek, takrorlanishlar soni ko’rsatilmagan variantda takrorlanish qiymati 1 ga teng deb qabul qilinadi.
Dasturni ishga tushirib, LED_BUILTIN raqamli piniga ulangan svetodiod dastlab 200 millisekundlik pauza bilan 10 marta, keyin 3000 millisekundlik pauza bilan 1 marta, undan keyin esa, uzluksiz 1000 millisekundlik pauza bilan miltillayotganini kuzatishimiz mumkin.
Yuqorida aytib o’tilganidek, oxirgi sketchimizni biblioteka asosiy papkasi ichidagi “examples” papkasiga nusxalab qo’ysak, u biz yaratgan yangi biliotekadan foydalanishga misol sifatida Arduino IDE dasturi menyusining “Файл/Примеры/YangiBlinkLib” bo’limida ham doim ko’rinadi. Ya’ni, bibliotekamiz asosidagi yangi sketchni har safar boshidan yaratib o’tirmasdan shu sketchga o’zgartirish kiritib, yangi nom bilan saqlab olish qulayroq bo’ladi.
2-misol. Ushbu misolda yuqoridagidek sodda sketch yaratish usuli bilan, matnli formatdagi o’zgaruvchi qiymatini sozlama sifatida EEPROM-xotiraga saqlash va undan o’qish bibliotekasini yaratamiz.
Ma’lumki, EEPROM-xotiraga yozuvlar baytlar ko’rinishida saqlanadi va unga matnni to’g’ridan-to’g’ri saqlash uchun tayyor funksiya mavjud emas. Shuning uchun har safar sketchga shunday vazifani bajaruvchi alohida kod qo’sishga to’g’ri keladi. Agar matnni EEPROM-xotiraga saqlash va undan o’qish uchun maxsus biblioteka yaratilsa, sketchlarda undan oson foydalanish mumkin bo’ladi.
Biz bunday bibliotekaning asosida, WiFi tarmog’i asosiy parametrlarini saqlash va aksincha ularni xotiradan o’qish sketchlarini yaratamiz, keyinchalik esa, ularni yagona sketchga birlashtiramiz. Ushbu misolni keltirishimizga sabab, keyinroq standart bibliotekani yaratish davomida ham shu misolga o’zgartirishlar kiritib, sodda biblioteka bilan standart bibliotekaning farqini tushunib olishimiz osonroq bo’ladi. Dastlab, ilgari o’rganilgan material asosida qiymat turlarini, jumladan matnli qatorni konvertatsiyalash buyruqlarini eslab olamiz.
Ma’lumki, matnli qatorni EEPROM-xotiraga saqlashda unga massiv sifatida qarash eng oson usul hisoblanadi. Ixtiyoriy matnli qatorni, xususan WiFi tarmog’i nomi (SSID) va parolini EEPROM-xotiradan o’qishda ulardagi belgilar xotira kataklarining qaysi diapazonida (kataklar oralig’ida) saqlanganini bilish zarurati tug’iladi. Shuning uchun, har bir matnli qatorni saqlashdan oldin matnning uzunligi ko’rsatib qo’yilishi maqsadga muvofiq.
Shulardan kelib chiqsak, matnli qatorni EEPROM-xotiraga saqlash (‘MatnniSaqlash.ino’) sketchi quyidagi ko’rinishda bo’ladi:
Dasturni ishga tushirsak, dastlab ko’rsatilgan matnlarning uzunligi EEPROM-xotiraning ko’rsatilgan manzillariga (ushbu misolda WiFi nomi uzunligi 0-katakka, parol uzunligi esa, 21-katakka) saqlanadi. Keyingi (1- va 22-) katakdan boshlab esa, matn belgilari ketma-ket saqlab qo’yiladi.
Matnli qatorni EEPROM-xotiradan o’qish (‘MatnniUqish.ino’ ) sketchi esa, quyidagi ko’rinishda bo’ladi:
Dasturni ishga tushirib, oldingi misol yordamida saqlangan SSID hamda parol uzunligi va ularning matnini port monitorida ko’rishimiz mumkin.
Endi yuqoridagi standart bibliotekaning 1-varianti kabi, yangi “TextToEEPROM” nomli biblioteka yaratib olamiz (yuqorida keltirilgan tartibda “TextToEEPROMLib” biblioteka papkasini hosil qilib, uning ichida “TxtEEPROM.h“, “TxtEEPROM.cpp” matnli fayllarini yaratamiz). Sketchdagi funksiyalarni biblioteka fayllariga ko’chirilganligi sababli, biblioteka fayllari quyidagi ko’rinishga keladi:
Arduino IDE menyusidagi bibliotekalari ro’yxatida esa, “TextToEEPROMLib” papkasi nomi ham ko’rinishi kerak. Yuqoridagi 2 ta sketchlar esa, tegishli o’zgarishlardan so’ng quyidagi ko’rinishlarga keladi:
Har ikki dasturni navbat bilan ishga tushirib, matn xotiraga to’g’ri saqlanganiga ishonch hosil qilishimiz mumkin.
Standart bibliotekaning 2-varianti
Bibliotekaning bunday turini yaratish uchun, Wiring dasturlash tilidan tashqari, C++ imkoniyatlaridan ham foydalanishga to’g’ri keladi.
Bibliotekaning bunday variantida ham, odatda biblioteka fayllari soni 2 ta va undan ortiq bo’ladi. Bundan tashqari, biblioteka asosiy papkasi ichida “src“, “examples” nomli va yana boshqa yordamchi papkalar yaratilishi ham mumkin. Asosiy biblioteka (“.h“, “.cpp“) fayllari “src” papkasi ichida joylashadi. Agar biblioteka ko’plab fayllardan tashkil topgan bo’lsa, ularning barcha fayllari aynan shu papkada joylashadi.
Standart bibliotekani yaratish uchun avvalo boshqa darsda o’rganilgan, C++ ning klass va metod tushunchalari bilan tanishib olishimiz kerak bo’ladi. Ushbu tushunchalar C++ dasturlash tilidan Arduino IDE da qo’llaniladigan Wiring dasturlash tiliga meros bo’lib o’tgan. Aslida, klass yaratildi degani – deyarli yangi biblioteka ham yaratildi degani bo’ladi. Chunki, klass yaratilganidan keyingi bosqichlar shunchaki bibliotekani rasmiylashtirish bosqichi hisoblanadi.
Klassni yaratish
Yuqorida aytilganidek, klass va uning elementlari bevosita asosiy dasturda yoki bibliotekaning sarlavha hamda realizatsiya fayllarida hosil qilinishi mumkin. Bevosita bibliotekada klassni yaratishga o’tishdan oldin, qulaylik uchun biz uni dastlab asosiy dasturning o’zida yaratib, uning ishlash prinsipi bilan yaqindan tanishib olamiz.
Klassning e’lon qilinishi va qo’llanilishi, o’z xususiyatlariga ko’ra, strukturaga o’xshab ketadi. Lekin, aslida uning ichki imkoniyatlari juda keng va obyektga yo’naltirilgan dasturlash konsepsiyasining asoslaridan biri hisoblanadi.
Klassning strukturadan eng muhim farqi – uning sohalarga ajratilishi hisoblanadi: public (ochiq) va private (yopiq) sohalariga. Bir soha boshqa soha boshlanadigan joygacha yoki klassdagi yopuvchi figurali qavsgacha amal qiladi.
public sohasi a’zolari obyekt yaratilgan asosiy dasturdan (sketchdan) murojaat qilish uchun ochiq hisoblanadi. U klassning a’zolariga (o’zgaruvchi va kontantalariga) obyekt yaratiladigan asosiy dastur (sketch) dan murojaat qilish mumkin bo’lgan (global) soha hisoblanadi. Ushbu sohani sketchning global o’zgaruvchilar e’lon qilinadigan sohasiga qiyoslash mumkin.
private sohasi a’zolari faqat klass ichida murojaat qilish uchun ochiq, asosiy dastur uchun esa yopiq hisoblanadi. Ushbu sohani sketchning ma’lum bir funksiyasi ichida amal qiladigan lokal o’zgaruvchilar sohasiga qiyoslash mumkin.
Demak, sohalarini hisobga olgan holda, klassni quyidagicha e’lon qilish mumkin:
class <KLASS_NOMI>{
public:
// dasturdan murojaat qilish uchun ochiq soha
<klass_1-a’zosi>;
<klass_2-a’zosi>;
private:
// faqat klass ichida murojaat qilish uchun ochiq soha
<klass_3-a’zosi>;
<klass_4-a’zosi>;
};
Klassda kamida 1 ta soha ko’rsatib ketilishi kerak. Masalan, faqat public sohasi.
Ba’zi bibliotekalarni yaratishda klassning public sohasida konstruktor ham qo’llanilishi mumkin. U obyektni yaratish paytida chaqiriladi va klass nomi bilan bir xil bo’lgan nomga ega bo’ladi. Konstruktor klassga murojaat qilishning bir nechta variantlarini yaratish imkonini beradi. Masalan:
class <KLASS_NOMI> {
public:
<konstruktor_nomi>(int a, String b){
_a=a;
_b=b;
}
<konstruktor_nomi>(int a){
_a=a;
_b=”matn”;
}
// dasturdan murojaat qilish uchun ochiq soha
private:
// faqat klass ichida murojaat qilish uchun ochiq soha
};
Misolda ko’rinib turibdiki, asosiy dasturdan klass ekzemplyariga murojaat qilinganda, uni obyekt argumentlari sonidan kelib chiqib, 2 xil usul bilan amalga oshirish mumkin: 2 ta argument bilan yoki faqat 1-argument bilan. 2-variantdagi 2-argument o’rniga, klassda har doim o’zgarmaydigan qiymat qo’llaniladi.
Klass obyektini yaratish
Obyekt yaratish, yuqorida aytib o’tilganidek, asosiy dasturda bajariladi. Agar klass asosiy dasturda yaratilgan bo’lsa, obyekt undan keyingi navbatda yaratilishi kerak, aksincha xatolik yuz beradi. Obyektni yaratish xuddi strukturani yaratishdek – klass nomi bo’yicha bajariladi:
<KLASS_NOMI> <obyekt_nomi>; obyekt yaratish
<KLASS_NOMI> <obyekt_nomi>[10]; obyektlar massivini yaratish
Klass a’zolariga murojaat qilish ham xuddi struktura a’zolariga murojaat qilgandek bajariladi. Ya’ni, klass nomi va metodi o’rtasida “.” (nuqta) qo’llaniladi:
<obyekt_nomi>.<metod_nomi>(); obyekt metodini chaqirish, yoki
<obyekt_nomi[tartib_raqami]>.<metod_nomi>(); obyektlar massividan obyekt metodini chaqirish.
Sodda hamda standart bibliotekalarning klass yordamida yaratiladigan 2-variantlarini misollar yordamida, aniqrog’i yuqoridagi misollarga o’zgartirish kiritish orqali ko’rib chiqamiz. Bunda ham dastlab klassni bevosita asosiy dasturimiz kodida qo’llaymiz. Shundan keyin uni alohida biblioteka fayllariga olib o’tamiz.
3-misol. Dastlab, yuqoridagi “miltillash” sketchini klass yordamida takomillashtirib, uning yangi versiyasini hosil qilamiz. Yuqoridagi bazaviy ma’lumotlarimiz asosida sketchning bibliotekalar va o’zgaruvchilarni e’lon qilish sohasida yangi klass yaratamiz. Uni “LED” deb nomlaymiz. Natijada sketchimiz quyidagi holatga keladi:
Sketch ishga tushirilgach, dastlab 2-raqamli pinga ulangan svetodiod (led1 obyekti) 200 ms pauza bilan 10 marta va 3-raqamli pinga ulangan svetodiod (led2 obyekti) 500 ms pauza bilan uzliksiz miltillaganini kuzatish mumkin.
Ushbu sketchning bir nechta konstruktorli varianti, masalan quyidagicha bo’lishi mumkin:
Ushbu sketch ishga tushirilganda, dastlab 2-raqamli pinga ulangan svetodiod (led1 obyekti) 200 ms pauza bilan 10 marta, 3-raqamli pinga ulangan svetodiod (led2 obyekti) 500 ms pauza bilan 1 marta, keyin xuddi shu svetodiod 1000 ms pauza bilan 5 marta va 4-raqamli pinga ulangan svetodiod (led3 obyekti) 1000 ms pauza bilan uzliksiz miltillaganini kuzatish mumkin.
Yuqoridagi “LED” klassini asosiy dasturdan alohida biblioteka fayliga olib o’tish orqali, undan boshqa dasturlarda ham imkoniyatini yaratishimiz mumkin. Yuqorida aytib o’tilganidek, bunday bibliotekani faqat 1 ta sarlavha fayli yordamida ham yaratishimiz mumkin. Chunki, biz yaratgan klass unchalik murakkab emas. Lekin, shunday bo’lsa-da, ushbu klass asosida 2 ta asosiy fayldan iborat standart biblioteka yaratish variantini ham ko’rib chiqamiz. Har ikki hol uchun alohida bibliotekalar yaratiladi va har ikki holda ham, sketchga deyarli o’zgartirish talab etilmaydi (faqat kerakli biblioteka fayli nomi ko’rsatilishi kerak xolos).
Faqat 1 ta fayldan iborat bo’lgan “YangiBlink2” bibliotekasi kodi (“YangiBlink2.h” sarlavha faylidagi “#pragma once” operatori quyida sanab o’tiladigan bibliotekalar faqat 1 marta qo’llanilishi kerakligini qat’iy belgilab qo’yadi, murakkab biblioteka fayllarida ularning tasodifan qayta qo’llanilishining oldini oladi. Arduino IDE ning eski versiyalarida uning o’rniga “#ifndef/#define/#endif” operatorlari juftligi qo’llanilgan):
Ushbu biblioteka imkoniyatlarini ko’rsatib beruvchi sketch kodi :
Sketch ishga tushirilsa, dastlab 2-pinga ulangan svetodiod 200 ms pauza bilan 10 marta, keyin aynan shu svetodiod 1000 ms pauza bilan 5 marta (chunki pauza va takrorlanishlar soni mos holda “pauzaUrnat” va “hisobchiUrnat” metodlari yordamida o’zgartirildi), shundan keyin 3-pinga ulangan svetodiod (led2 obyekti) dastlab 500 ms pauza bilan 1 marta va 2000 ms pauza bilan yana 1 marta miltillaydi. Oxirida esa, 4-pinga ulangan svetodiod (led3 obyekti) 1000 ms pauza bilan uzluksiz miltillay boshlaydi. Bundan tashqari, 4-pindagi svetodiod bilan birga ketma-ket portda har bir svetodiodning miltillash parametrlari ko’rsatila boshlaydi.
Yuqoridagi yagona biblioteka faylini standart biblioteka sifatida 2 ta alohida fayllarga ajratilib, oxirgi sketch qo’llanilsa ham oxirgi natijalarni kuzatish mumkin. Asosiysi, sketch boshida “YangiBlink2.h” fayli o’rniga “YangiBlink3.h” fayli ko’rsatilib qo’yilishi kerak:
4-misol. Xuddi yuqoridagidek, “MATN” nomli yangi klass yaratib, yuqoridagi 2-misolda ko’rsatilgan matnli qatorni EEPROM-xotiraga saqlash hamda undan o’qish sketchlari kodini va tegishli bibliotekalar kodlarini ham quyidagicha ifodalash mumkin:
Klassni 1 ta fayldan iborat biblioteka fayli ko’chirilgan variant va unga mos sketch:
Klassni 2 ta standart biblioteka fayllariga ko’chirilgan variant va unga mos sketch:
4-misolning yuqoridagi barcha variantlarida sketch ishga tushirilganda, dastlab WiFi tarmog’i parametrlari (SSID va paroli) EEPROM-xotiraga MATN klassining matn1 obyekti hamda saqla metodi yordamida saqlanadi. uqi metodi yordamida esa, matn xotiradan o’qiladi. Natijalar port monitoriga chiqarib boriladi.