{"id":2846,"date":"2024-05-01T10:11:43","date_gmt":"2024-05-01T05:11:43","guid":{"rendered":"https:\/\/yarat.uz\/?p=2846"},"modified":"2025-03-19T15:27:03","modified_gmt":"2025-03-19T10:27:03","slug":"xotira-bilan-ishlash","status":"publish","type":"post","link":"https:\/\/yarat.uz\/?p=2846","title":{"rendered":"Arduino xotira vositalari [18+]"},"content":{"rendered":"<p style=\"text-align: center;\"><strong>EEPROM-xotira bilan ishlash<\/strong><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/yarat.uz\/?p=38\">Ma&#8217;lumki<\/a>, Arduinoda foydalanuvchi qurilmaga doir sozlamalarni saqlashda EEPROM-xotiradan foydalanishi mumkin. Buning uchun avvalo foydalanuvchi qo&#8217;llanilayotgan aniq bir mikrokontrollerning xotirasi hajmini aniqlab olishi zarur. Odatda u AVR oilasi (UNO, Nano, Mega va hokazo) mikrokontrollerlarida 0,5&#8230;1 kBayt oralig&#8217;ida, ESP mikrokontrollerlarida esa, 1-4 kBayt oralig&#8217;ida bo&#8217;ladi. EEPROM-xotiradan foydalanish uchun asosan Arduinoning &#8220;EEPROM&#8221; ichki bibliotekasi qo&#8217;llaniladi. Lekin kamroq hollarda bo&#8217;lsa-da, ayrim foydalanuvchilar &#8220;avr\/eeprom.h&#8221; (faqat AVR oilasi uchun) va &#8220;EEManager.h&#8221; bibliotekalaridan ham foydalanishadi. Qulaylik uchun, biz ham &#8220;EEPROM&#8221; bibliotekasidan foydalanamiz.<\/p>\n<p style=\"text-align: justify;\">Ilgari ma&#8217;lum qilinganidek, EEPROM-xotiraga ma&#8217;lumotlar manzili bo&#8217;yicha saqlanadi. Har bir xotira katagiga 1 baytlik yozuv saqlanishi mumkin. Saqlanayotgan <a href=\"https:\/\/yarat.uz\/?p=1196\">qiymat turidan<\/a> kelib chiqib, qiymat uchun xotiradan kerak bo&#8217;ladigan hajmi turlicha bo&#8217;lishi mumkin va ular baytlarda quyidagicha o&#8217;chanadi:<\/p>\n<p>&#8220;byte&#8221; qiymat turi uchun &#8211; 1 bayt;<br \/>\n&#8220;int&#8221; qiymat turi uchun &#8211; 2 bayt (ESP8266\/ESP32 da 4 bayt);<br \/>\n&#8220;float&#8221; qiymat turi uchun &#8211; 4 bayt;<br \/>\n&#8220;String&#8221; qiymat turi uchun &#8211; har bir belgi uchun 1 baytdan;<\/p>\n<p style=\"text-align: justify;\">&#8220;EEPROM&#8221; bibliotekasi sketchga qo&#8217;shib olinganidan keyin (&#8220;#include &lt;EEPROM.h&gt;&#8221;) quyidagi buyruq-funksiyalardan foydalanish mumkin bo&#8217;ladi:<\/p>\n<ul>\n<li style=\"text-align: justify;\"><strong>EEPROM.read(xotira_manzili)<\/strong> &#8211; ko&#8217;rsatilgan xotira manzilidagi yozuvni (yoki shu manzildan boshlangan yozuvlar massivini) o&#8217;qish. Yozuvlar massivini o&#8217;qish uchun qiymat turi ko&#8217;rsatilgan holda, massiv o&#8217;zgaruvchisi oldindan e&#8217;lon qilingan bo&#8217;lishi kerak. Xotira manzili 0 dan boshlab ko&#8217;rsatiladi;<\/li>\n<li style=\"text-align: justify;\"><strong>EEPROM.get(xotira_manzili, o&#8217;zgaruvchi_nomi)<\/strong> &#8211; ko&#8217;rsatilgan xotira manzilidagi yozuvni (yoki shu manzildan boshlangan yozuvlar massivini) o&#8217;qish va bir yo&#8217;la ko&#8217;rsatilgan o&#8217;zgaruvchi nomiga o&#8217;zlashtirish. O&#8217;zgaruvchi oldindan e&#8217;lon qilingan bo&#8217;lishi kerak;<\/li>\n<li style=\"text-align: justify;\"><strong>EEPROM.put(xotira_manzili, qiymat)<\/strong> &#8211; ko&#8217;rsatilgan xotira manziliga ko&#8217;rsatilgan qiymatni (yoki shu manzildan boshlab yozuvlar massivini) saqlash (ESP8266\/ESP32 da <strong>EEPROM.commit()<\/strong> buyrug&#8217;idan keyin kuchga kiradi). Qiymat sifatida har qanday qiymat turidagi ma&#8217;lumotlar ko&#8217;rsatilishi mumkin, biroq ularning hajmi turlicha bo&#8217;lishi, o&#8217;z navbatida xotiradan shuncha hajmdagi joy talab qilishi mumkin. Qiymat egallaydigan xotira hajmini kompilyator avtomatik ravishda aniqlaydi va unga shuncha bayt joy ajratadi. Lekin, keyingi yoziladigan yozuv manzilini ko&#8217;rsatishda shuncha sondagi katak tashlab ko&#8217;rsatilishi kerak bo&#8217;ladi;<\/li>\n<li style=\"text-align: justify;\"><strong>EEPROM.write(xotira_manzili, qiymat)<\/strong> &#8211; ko&#8217;rsatilgan xotira manziliga ko&#8217;rsatilgan <strong>1 bayt<\/strong> qiymatni saqlash. EEPROM.put() dan farqi shuki, EEPROM.write() faqat 1 bayt ma&#8217;lumotni (0&#8230;255 oraliqdagi ASCII jadvali bo&#8217;yicha belgi kodini) saqlaydi, agar belgilar soni 1 tadan ortiq bo&#8217;lsa, faqat oxirgisining kodi saqlanadi;<\/li>\n<li style=\"text-align: justify;\"><strong>EEPROM.update(xotira_manzili, qiymat)<\/strong> &#8211; ko&#8217;rsatilgan xotira manzilidagi qiymatni ko&#8217;rsatilgan qiymat bilan yangilash (agar o&#8217;zgargan bo&#8217;lsa). Bu buyruq ESP8266 va ESP32 da qo&#8217;llanmaydi.<\/li>\n<\/ul>\n<div style=\"text-align: justify;\">ESP8266 va ESP32 da EEPROM-xotiradan foydalanishni boshlash uchun qo&#8217;shimcha ravishda <strong>&#8220;EEPROM.begin(hajm);&#8221;<\/strong> buyruq-funksiyasi yordamida uni faollashtirish kerak bo&#8217;ladi (odatda setup() funksiyasi tarkibida ko&#8217;rsatiladi). Bu yerda argumentda EEPROM-xotiraning foydalaniladigan maksimal hajmi ko&#8217;rsatiladi (bu talab ESP8266 va ESP32 da EEPROM-xotira flesh-xotiraning bir qismi ekanligi bilan bog&#8217;liq bo&#8217;lib, mos ravishda bo&#8217;sh flesh-xotira hajmi shuncha joyga kamayadi).<\/div>\n<div class=\"enlighter-default enlighter-v-inline enlighter-t-wpcustom enlighter-l-cpp wp-dark-mode-ignore\" style=\"text-align: justify;\"><span class=\"enlighter wp-dark-mode-ignore\"><span class=\"enlighter-text wp-dark-mode-ignore\">EEPROM-xotirani &#8220;byte&#8221; (uint8_t) turidagi bir o&#8217;lchovli massiv sifatida ifodalash ham mumkin. Buning uchun massiv nomi o&#8217;rniga <\/span><\/span><strong><span class=\"enlighter wp-dark-mode-ignore\"><span class=\"enlighter-text wp-dark-mode-ignore\">EEPROM<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">[]<\/span><\/span><\/strong> yozuvidan foydalaniladi (uning ustida massiv bilan ishlashga mo&#8217;ljallangan barcha amallarni bajarish mumkin). Argumentda ko&#8217;rsatiladigan massiv manzili EEPROM-xotira katagi manziliga mos keladi.<\/div>\n<div style=\"text-align: justify;\">Yuqorida aytib o&#8217;tilganidek, ESP8266 va ESP32 mikrokontrollerlari uchun sketchda &#8220;EEPROM.begin()&#8221; va &#8220;EEPROM.commit()&#8221; buyruq-funksiyalari ham qo&#8217;llanilishi talab etiladi (amaliy mashg&#8217;ulot misollariga qarang).<\/div>\n<div style=\"text-align: justify;\">EEPROM-xotira bilan ishlashga doir amaliy misollarga bevosita kelgusida Arduino qurilmalarini yaratishga doir sketchlarda tez-tez duch kelamiz.<\/div>\n<div><\/div>\n<p style=\"text-align: center;\"><strong>PROGMEM-xotira<\/strong><\/p>\n<p style=\"text-align: justify;\"><strong>Progmem<\/strong> (program memory) &#8211; mikrokontroller (ichki yoki tashqi) flesh-xotirasining dastur tomonidan qiymatlari o&#8217;zgarmaydigan o&#8217;zgaruvchilarni saqlab qo&#8217;yish mumkin bo&#8217;lgan qismi.<\/p>\n<p style=\"text-align: justify;\">Progmem-xotira (bundan keyin <strong>PROGMEM<\/strong> deb yuritamiz) ham bajaradigan vazifasiga ko&#8217;ra tezkor (SRAM) xotiraga o&#8217;xshab ketadi. Chunki, unga ma&#8217;lumotni saqlash va undan o&#8217;qish xuddi o&#8217;zgaruvchilar bilan ishlagandek va bevosita dasturning o&#8217;zidan bajariladi. Vaholanki, yuqorida aytilganidek, PROGMEM &#8211; flesh-xotiraning bir qismi xolos.<\/p>\n<p style=\"text-align: justify;\">Ma&#8217;lumki, sketchni flesh-xotiraga yozish (proshivka qilish) vazifasini programmator bajaradi. PROGMEMga ma&#8217;lumot yozish uchun esa, bunday vosita talab etilmaydi. Bu &#8211; PROGMEMning asosiy qulayligi ham. Lekin uning yana bir muhim jihati &#8211; katta hajmli ma&#8217;lumotlarni PROGMEMga o&#8217;tkazish orqali tezkor xotira joyini tejash hisoblanadi (shuning uchun ham <strong>massivlar<\/strong> yoki xotiradan ko&#8217;p joy talab qiluvchi boshqa qiymat turlari uchun PROGMEM dan foydalanish ko&#8217;proq samara beradi). Ayniqsa, AVR mikrokontrollerlarining tezkor xotirasi (SRAM) 2 kB hajmga, flesh-xotirasi esa 32 kB hajmga egaligini hisobga olinsa, PROGMEM ularning imkoniyatlarini keskin oshirishga xizmat qiladi.<\/p>\n<p style=\"text-align: justify;\">PROGMEM bilan ishlash uchun Arduino IDE ning <strong>&#8220;<a href=\"http:\/\/avr-libc.narod.ru\/group__avr__pgmspace.html\">avr\/pgmspace.h<\/a>&#8220;<\/strong> ichki bibliotekasidan foydalaniladi. Uni o&#8217;rnatish va sketchga qo&#8217;shib olish talab etilmaydi, u sketchga avtomatik ravishda o&#8217;zi qo&#8217;shiladi. Aslida ushbu biblioteka AVR mikrokontrollerlari uchun ishlab chiqilgan bo&#8217;lsa-da, ESP8266\/ESP32 mikrokontrollerlari ham unga muvofiqlashtirilgan. Ya&#8217;ni ishlatilishda hech qanday farq yo&#8217;q.<\/p>\n<p style=\"text-align: justify;\">Sketchda PROGMEMga murojaat qilish quyidagicha amalga oshiriladi:<br \/>\n<strong>const &lt;qiymat_turi&gt; massiv[] PROGMEM = {};<\/strong> yoki<br \/>\n<strong>const PROGMEM &lt;qiymat_turi&gt; massiv[] = {};<br \/>\nconst &lt;qiymat_turi&gt; const massiv[] PROGMEM = {};<\/strong> (Ikki o&#8217;lchovli massiv uchun)<br \/>\nYa&#8217;ni PROGMEM o&#8217;zgaruvchi modifikatori qiymat turi va o&#8217;zgaruvchi (yoki massiv) nomidan oldin yoki keyin e&#8217;lon qilinishi mumkin. PROGMEM modifikatorini faqat global yoki statik (&#8220;static&#8221; modifikatorli) o&#8217;zgaruvchilarga nisbatan qo&#8217;llash mumkin.<\/p>\n<p style=\"text-align: justify;\">PROGMEMdagi ma&#8217;lumotni o&#8217;qish uchun, o&#8217;qiladigan qiymat turiga qarab quyidagi 4 ta funksiyalardan biridan foydalaniladi (funksiya argumentida <strong>xotira manzili<\/strong> yoki <strong><a href=\"https:\/\/alexgyver.ru\/lessons\/pointers\/\">ko&#8217;rsatkich<\/a><\/strong>, ya&#8217;ni <strong>o&#8217;zgaruvchining 1-bayti manzili<\/strong> keltiriladi):<\/p>\n<ul>\n<li style=\"text-align: justify;\"><strong>pgm_read_byte(manzil)<\/strong> &#8211; 1 ta bayt uchun (<em>char, byte, int8_t, uint8_t<\/em> qiymat turlari uchun);<\/li>\n<li style=\"text-align: justify;\"><strong>pgm_read_word(manzil)<\/strong> &#8211; 2 ta bayt uchun (<em>int, word, unsigned int, int16_t, uint16_t<\/em> qiymat turlari uchun);<\/li>\n<li style=\"text-align: justify;\"><strong>pgm_read_dword(manzil)<\/strong> &#8211; 4 ta bayt uchun (<em>long, unsigned long, int32_t, uint32_t<\/em>\u00a0qiymat turlari uchun);<\/li>\n<li><strong>pgm_read_float(manzil)<\/strong> &#8211; <em>float<\/em> qiymat turi uchun.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\"><em>Eslatma. O&#8217;zgaruvchi manfiy qiymatga ega bo&#8217;lishi mumkin bo&#8217;lgan hollarda, sketchda o&#8217;zgaruvchi nomidan oldin har doim qiymat turi ko&#8217;rsatilishi shart, chunki PROGMEM sonlarning ishorasini hisobga olmaydi!<\/em><\/p>\n<p>PROGMEM dan foydalanish bo&#8217;yicha misollar bilan amaliy mashg&#8217;ulotlarda batafsil tanishamiz.<\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: center;\"><strong>SD\/MicroSD xotira modullari<\/strong><\/p>\n<p style=\"text-align: justify;\">Arduino qurilmalarini yaratishda mikrokontrollerning ichki flesh-xotirasi hajmi cheklangani, shuningdek, unga uga fayl tizimi va sketchdan boshqa ma&#8217;lumotlarni saqlab bo&#8217;lmaganligi sababli, ayniqsa ko&#8217;p joy talab qiladigan matnli, rasmli, tovushli yoki boshqa katta hajmli fayllarni saqlash uchun tashqi xotira qurilmalaridan foydalanishga ehtiyoj tug&#8217;iladi. <strong>SD-kartani o&#8217;qish moduli<\/strong> yoki <strong>MicroSD-kartani o&#8217;qish moduli<\/strong> (qulaylik uchun bundan keyin materialda ularni umumiy qilib <strong>SD-modul<\/strong> deb ataymiz) shunday xotira qurilmalaridan hisoblanadi.<\/p>\n<p style=\"text-align: justify;\">Arduinoda SD-modullar bilan ishlashda quyidagi muhim qoidalarga e&#8217;tibor berish zarur:<\/p>\n<ul>\n<li style=\"text-align: justify;\">yangi kartani FAT16, FAT32 yoki exFAT formatida, standart usulda (tez emas!) formatlab olish zarur;<\/li>\n<li>kartadagi fayllar nomi va kengaytmasi &#8220;8.3&#8221; formatida saqlangan bo&#8217;lishi kerak;<\/li>\n<li>Arduino sketchidan bir vaqtning o&#8217;zida 1 tadan ortiq faylni ochib bo&#8217;lmaydi, yangisini ochishdan oldin eskisini yopish kerak.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Arduino qurilmalarini yaratishda SD-moduldan, masalan, turli datchiklar ko&#8217;rsatkichlarini vaqti-vaqti bilan SD-kartaga kartaga saqlab borish va uni o&#8217;qish uchun yoki &#8220;wav&#8221; formatidagi tovushli fayllarni eshitish uchun foydalanish mumkin (Datchik ko&#8217;rsatkichlari asosida keyinchalik kompyuterda diagrammalarni ham tuzish mumkin bo&#8217;ladi).<\/p>\n<p style=\"text-align: justify;\">Amaliy mashg&#8217;ulotlarda biz SD-kartada matnli fayllar yaratish hamda ularga analog va raqamli datchiklar ko&#8217;rsatkichlarini saqlash, ularni o&#8217;qish, fayllar ro&#8217;yxatini ko&#8217;rish, ularni o&#8217;chirish kabi asosiy operatsiyalarni bajarishni ko&#8217;rib chiqamiz. Shuningdek, 4-misolda MP3 formatidagi musiqani WAV formatiga o&#8217;tkazish va undan Arduinoda foydalanish tartibini ham ko&#8217;rib o&#8217;tamiz.<\/p>\n<p style=\"text-align: justify;\">Mikrokontrollerlarning ischi chastotalari MP3 formatidagi audiofayllar yoki video fayllarni o&#8217;qish imkonini bermaydi. Biroq, aksariyat MP3-modullari o&#8217;z ichiga SD-kartani o&#8217;qish blokini oladi va undan to&#8217;g&#8217;ridan-tog&#8217;ri MP3 formatdagi fayllarni o&#8217;qish (eshitish) imkoniyati ham mavjud. Mashg&#8217;ulotlarda Arduino yordamida MP3-modulni boshqarish, jumladan, undagi SD-kartaga yozilgan MP3 formatidagi musiqa fayllarini eshitish jarayonlarini ham ko&#8217;rib chiqamiz.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3456 size-medium alignleft\" src=\"https:\/\/yarat.uz\/wp-content\/uploads\/2023\/05\/mc_sd_card-291x300.jpg\" alt=\"\" width=\"291\" height=\"300\" srcset=\"https:\/\/yarat.uz\/wp-content\/uploads\/2023\/05\/mc_sd_card-291x300.jpg 291w, https:\/\/yarat.uz\/wp-content\/uploads\/2023\/05\/mc_sd_card.jpg 500w\" sizes=\"auto, (max-width: 291px) 100vw, 291px\" \/> <img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3457 size-medium alignright\" src=\"https:\/\/yarat.uz\/wp-content\/uploads\/2023\/05\/sd_tf_cards-300x271.jpg\" alt=\"\" width=\"300\" height=\"271\" srcset=\"https:\/\/yarat.uz\/wp-content\/uploads\/2023\/05\/sd_tf_cards-300x271.jpg 300w, https:\/\/yarat.uz\/wp-content\/uploads\/2023\/05\/sd_tf_cards.jpg 500w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: center;\"><strong>RFID-xotira bilan ishlash<\/strong><\/p>\n<p style=\"text-align: justify;\">Aslida, RFID (<strong>R<\/strong>adio<strong>f<\/strong>requency <strong>id<\/strong>entification &#8211; radiochastotali identifikatsiyalash) texnologiyasini to&#8217;laqonli xotira bilan ishlash texnologiyasi sifatida qarab bo&#8217;lmaydi. Chunki, xotira qurilmasi vazifasini faqat RFID-kalit bajarsa-da, unga foydalanuvchi o&#8217;zi xohlagan ma&#8217;lumotni saqlay olmaydi, xotira hajmi ham bir necha kilobaytdan oshmaydi. Ba&#8217;zi RFID-kalitlarga esa, umuman yangi ma&#8217;lumot yozib ham bo&#8217;lmaydi, ya&#8217;ni ular faqat o&#8217;qish uchun mo&#8217;ljallangan bo&#8217;ladi.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3713 size-medium alignright\" src=\"https:\/\/yarat.uz\/wp-content\/uploads\/2024\/08\/rfif_keyboard-300x300.webp\" alt=\"\" width=\"300\" height=\"300\" srcset=\"https:\/\/yarat.uz\/wp-content\/uploads\/2024\/08\/rfif_keyboard-300x300.webp 300w, https:\/\/yarat.uz\/wp-content\/uploads\/2024\/08\/rfif_keyboard-150x150.webp 150w, https:\/\/yarat.uz\/wp-content\/uploads\/2024\/08\/rfif_keyboard.webp 640w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-4094 size-medium\" src=\"https:\/\/yarat.uz\/wp-content\/uploads\/2024\/09\/rfid-300x300.webp\" alt=\"\" width=\"300\" height=\"300\" srcset=\"https:\/\/yarat.uz\/wp-content\/uploads\/2024\/09\/rfid-300x300.webp 300w, https:\/\/yarat.uz\/wp-content\/uploads\/2024\/09\/rfid-150x150.webp 150w, https:\/\/yarat.uz\/wp-content\/uploads\/2024\/09\/rfid-768x768.webp 768w, https:\/\/yarat.uz\/wp-content\/uploads\/2024\/09\/rfid.webp 1000w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p style=\"text-align: justify;\">Bundan tashqari, ularni o&#8217;qish uchun mo&#8217;ljallangan modul bilan RFID-kalit o&#8217;rtasidagi ma&#8217;lumot almashinishi faqat radioaloqa yo&#8217;li bilan amalga oshiriladi. Bu jihatdan ushbu texnologiyani radioboshqaruv texnologiyasiga ham o&#8217;xshatish mumkin. Biroq radioaloqa masofasi atigi bir necha santimetrni (uzog&#8217;i 6 sm gacha) tashkil etganligi uchun uni to&#8217;laqonli masofadan boshqarish texnologiyasi sifatida ham qaralmaydi (ayniqsa, Buyumlar Interneti qurilmalarini yaratishda undan foydalanish juda qiyin).<\/p>\n<p style=\"text-align: justify;\">Shu bilan birga, RFID ning qismlariga (kalit va qabul qilgich) shunchaki raqamli datchik sifatida ham qarash to&#8217;g&#8217;ri bo&#8217;lmaydi.<\/p>\n<p style=\"text-align: justify;\">Shuning uchun biz Arduino darslarida ushbu texnologiyani shartli ravishda (masofadan boshqariladigan) xotira texnologiyasi sifatida ko&#8217;rib chiqamiz.<\/p>\n<p style=\"text-align: justify;\">Amaliyotda ushbu texnologiyadan uy-joy binolari, qo&#8217;riqlanadigan obyektlar yoki ruxsatnoma asosida kirish talab etiladigan boshqa binolarga kirish-chiqishni nazorat qilish va tartibga solish maqsadlarida foydalaniladi. Bunda, har bir kalit egasi qo&#8217;riqlanadigan obyektga kirishi uchun kalitni qabul qilgichga 3-4 santimetrga yaqinlashtirishi talab etiladi.<\/p>\n<p style=\"text-align: justify;\">Kalit ma&#8217;lumotlari qabul qilgich orqali mikrokontrollerga uzatiladi va unda tahlil qilinib, ruxsat etilgan kalitlar ro&#8217;yxatida mavjudligi aniqlanadi. Demak, buning uchun dastlab, barcha kalitlar qabul qilgichda ro&#8217;yxatdan o&#8217;tkazilgan bo&#8217;lishi zarur. Kalitlar kodini o&#8217;zgartirish ham mumkin, lekin har doim ham emas. Buning uchun kalit qayta yoziladigan turga mansub bo&#8217;lishi va ishlab chiqaruvchi unga yozishga ruxsat etgan bo&#8217;lishi kerak.<\/p>\n<p style=\"text-align: justify;\">RFID-kalitlar bilan ishlashning o&#8217;ziga xosliklari batafsil xotira qurilmalari bilan ishlashga bag&#8217;ishlangan amaliy mashg&#8217;ulotda ko&#8217;rib chiqiladi.<\/p>\n<p style=\"text-align: center;\"><strong>Mikrokontrollerdan flesh-xotira sifatida foydalanish<\/strong><\/p>\n<p style=\"text-align: justify;\">ESP8266\/ESP32 mikrokontrollerlarining flesh-xotirasi o&#8217;lchami nisbatan katta ekanligidan foydalanib, uning bir qismini turli formatdagi kichik o&#8217;lchamli fayllar uchun flesh-disk sifatida ham foydalanish mumkin (ba&#8217;zi modullarning flesh-xotirasi o&#8217;lchamini Arduino IDE dasturi &#8220;\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b&#8221; menyusidagi &#8220;Flash Size&#8221; bo&#8217;limidan ko&#8217;rish va tanlash ham mumkin). Buning uchun maxsus SPIFFS fayl tizimi (bundan keyin, &#8220;tizim&#8221; deb yuritamiz) bilan ishlashga mo&#8217;ljallangan &#8220;FS.h&#8221; bibliotekasi ham taqdim etilgan. Bunday xotira bilan ishlash uchun bibliotekaning maxsus funksiyalaridan foydalaniladi.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5060\" src=\"https:\/\/yarat.uz\/wp-content\/uploads\/2024\/05\/SPIFFS_size.png\" alt=\"\" width=\"810\" height=\"742\" srcset=\"https:\/\/yarat.uz\/wp-content\/uploads\/2024\/05\/SPIFFS_size.png 810w, https:\/\/yarat.uz\/wp-content\/uploads\/2024\/05\/SPIFFS_size-300x275.png 300w, https:\/\/yarat.uz\/wp-content\/uploads\/2024\/05\/SPIFFS_size-768x704.png 768w\" sizes=\"auto, (max-width: 810px) 100vw, 810px\" \/><\/p>\n<p><strong>Asosiy buyruq va funksiyalar:<\/strong><\/p>\n<p style=\"text-align: justify;\"><strong>SPIFFS.begin()<\/strong> &#8211; tizimni faollashtirish ();<br \/>\n<strong>SPIFFS.format()<\/strong> &#8211; tizimga tegishli flesh-xotira sohasini formatlash;<br \/>\n<strong>SPIFFS.info(fs_info)<\/strong> &#8211; tizim haqida ma&#8217;lumot olish. fs_info &#8211; <strong>FSInfo<\/strong> obyekti klassi. Klass metodlari: <strong>totalBytes<\/strong> &#8211; tizim xotirasi sig&#8217;imi, usedBytes &#8211; band bo&#8217;lgan xotira, maxOpenFiles &#8211; bir vaqtda ochish mumkin bo&#8217;lgan fayllar maksimal soni, <strong>maxPathLength<\/strong> &#8211; fayl nomi maksimal uzunligi (32 ga teng, &#8220;\\0&#8221; belgisi bilan birga);<br \/>\n<strong>SPIFFS.openDir(&#8220;\/papka_nomi&#8221;)<\/strong> &#8211; kerakli (joriy) papkani tanlash, <strong>Dir<\/strong> obyekti o&#8217;zgaruvchisining qiymati sifatida o&#8217;zlashtiriladi;<br \/>\n<strong>SPIFFS.open(fayl_nomi, &#8220;w&#8221;)<\/strong> &#8211; ko&#8217;rsatilgan faylni ochish. <strong>File<\/strong> boyektining o&#8217;zgaruvchisi qiymati. Argumentda ochish rejimi ko&#8217;rsatiladi. <strong>&#8220;w&#8221;<\/strong> &#8211; o&#8217;qish va yozish uchun ochish, <strong>&#8220;r&#8221;<\/strong> &#8211; faqat o&#8217;qish uchun, <strong>&#8220;a&#8221;<\/strong> &#8211; fayl oxiriga yozuv qo&#8217;shish uchun;<br \/>\n<strong>SPIFFS.rename(filename, filename2)<\/strong> &#8211; fayl nomini o&#8217;zgartirish;<br \/>\n<strong>SPIFFS.remove(filename)<\/strong> &#8211; faylni o&#8217;chirish.<\/p>\n<p style=\"text-align: justify;\">Shu hamda boshqa funksiyalar, klasslar va metodlar haqida batafsil <a href=\"https:\/\/arduino-esp8266.readthedocs.io\/en\/latest\/filesystem.html\">bu yerdan<\/a> yoki <a href=\"https:\/\/projectalt.ru\/publ\/arduino_esp8266_i_esp32\/programmirovanie\/rabota_s_fajlovoj_sistemoj_v_addone_esp8266_dlja_ide_arduino\/11-1-0-24\">bu yerdan<\/a> ma&#8217;lumot olish mumkin. Yuqoridagi funksiyalar bo&#8217;yicha misollar bilan esa, amaliy mashg&#8217;ulot paytida tanishish mumkin.<\/p>\n<p style=\"text-align: justify;\"><strong>Cheklovlar:<br \/>\n<\/strong>&#8211; Fayl nomining uzunligi 32 ta (&#8220;\\0&#8221; baytidan dan tashqari 31 ta) belgidan oshmasligi kerak;<br \/>\n&#8211; Faqat fayllar ustida ayrim asosiy operatsiyalarni (fayllarni nusxalash, saqlash, o&#8217;chirish, matnli fayl yaratish) amalga oshirish mumkin. Unda papkalar bilan tog&#8217;ridan-to&#8217;g&#8217;ri ishlashning imkoni yo&#8217;q. Lekin, mavjud papkalar bilan ishlashda ularning nomlarini boshida &#8220;\/&#8221; belgisi bilan ajratish orqali fayl nomining bir qismi sifatida qo&#8217;llash mumkin (masalan, &#8220;DIR&#8221; papkasidagi &#8220;file1.txt&#8221; faylini &#8220;DIR\/file1.txt&#8221; fayli sifatida ko&#8217;rsatiliadi, &#8220;\/&#8221; belgisi fayl nomidagi belgi sifatida qabul qilinadi). Bunda ham fayl nomi uzunligiga oid cheklovga amal qilish zarur. Bundan tashqari, agar fayl papka ichida joylashgan bo&#8217;lsa, papka bilan ishlash imkoni yo&#8217;qligini hisobga olinsa, uning nomi jami uzunligi 31 ta belgidan oshmasligi kerak. Demak, papka va fayl nomlarini imkon qadar qisqa bo&#8217;lishiga harakat qilish zarur.<\/p>\n<p style=\"text-align: justify;\">Kompilyator yuqoridagi cheklovlarni xatolik deb qaramaydi. Shuning uchun fayl tizimi bilan bog&#8217;liq xatoliklarni ustaqil ravishda aniqlashga to&#8217;g&#8217;ri keladi.<\/p>\n<p style=\"text-align: justify;\">Yuqoridagilardan tashqari, kompyuter yoki smartfon yordamida ham mikrokontroller flesh xotirasidan foydalanish mumkin. Buning uchun mikrokontrollerda sketch yordamida <strong>FTP-server<\/strong> hosil qilish yoki Arduino IDE dasturiga qo&#8217;shish uchun dasturchi tomonidan yaratilgan <a href=\"https:\/\/medium.com\/@gkadusumilli\/spiffs-flash-file-system-in-nodemcu-356153383f3e\">add-on<\/a> (plagin) dan foydalanish mumkin (mazkur plagin Arduino IDE oxirgi versiyalari stabil ishlamasligi sababli, darslar davomida unga to&#8217;xtalmaymiz).<\/p>\n<p style=\"text-align: center;\"><strong>FTP-server<\/strong><\/p>\n<p style=\"text-align: justify;\">Kompyuterdagi yoki smartfondagi fayllarni FTP-mijoz ilovalari yordamida FTP-server rolidagi mikrokontrollerga yuborish yoki undagi fayllarni boshqarish (nusxalash, o&#8217;chirish, nomini o&#8217;zgatirish va hokazo) mumkin.<\/p>\n<p style=\"text-align: justify;\"><strong>Cheklovlar:<\/strong><br \/>\n&#8211; SPIFFS fayl tizimi barcha cheklovlari;<br \/>\n&#8211; Xotira hajmini ortiqcha band qilish proshivka uchun joy yetarli bo&#8217;lmay qolishiga olib kelishi mumkin. Xotiradan kichik fayllar, veb-sahifalar fayllarini saqlashda foydalanish maqsadga muvofiq.<\/p>\n<p style=\"text-align: justify;\">FTP-server hosil qilish uchun qo&#8217;shimcha ravishda o&#8217;rnatiladigan &#8220;ESP8266FtpServer.h&#8221; biblioteka faylidan foydalanamiz. FTP-mijoz sifatida esa, kompyuter Windows operatsion tizimi uchun &#8220;WinSCP&#8221; yoki Total Commander (&#8220;FTP&#8221; menyusi) ilovalaridan, smartfonda ham ixtiyoriy ftp-mijoz dasturidan yoki Total Commander mobil ilovasi hamda maxsus ftp-mijoz plagini juftligidan foydalanish mumkin.<\/p>\n<p>Batafsil xotira qurilmalari bilan ishlashga bag&#8217;ishlangan amaliy mashg&#8217;ulotda ko&#8217;rib chiqiladi.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>EEPROM-xotira bilan ishlash Ma&#8217;lumki, Arduinoda foydalanuvchi qurilmaga doir sozlamalarni saqlashda EEPROM-xotiradan foydalanishi mumkin. Buning uchun avvalo foydalanuvchi qo&#8217;llanilayotgan aniq bir mikrokontrollerning xotirasi hajmini aniqlab olishi zarur. Odatda u AVR oilasi (UNO, Nano, Mega va hokazo) mikrokontrollerlarida 0,5&#8230;1 kBayt oralig&#8217;ida, ESP mikrokontrollerlarida esa, 1-4 kBayt oralig&#8217;ida bo&#8217;ladi. EEPROM-xotiradan foydalanish uchun asosan Arduinoning &#8220;EEPROM&#8221; ichki bibliotekasi qo&#8217;llaniladi. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-2846","post","type-post","status-publish","format-standard","hentry","category-arduino"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/yarat.uz\/index.php?rest_route=\/wp\/v2\/posts\/2846","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/yarat.uz\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/yarat.uz\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/yarat.uz\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/yarat.uz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2846"}],"version-history":[{"count":77,"href":"https:\/\/yarat.uz\/index.php?rest_route=\/wp\/v2\/posts\/2846\/revisions"}],"predecessor-version":[{"id":5063,"href":"https:\/\/yarat.uz\/index.php?rest_route=\/wp\/v2\/posts\/2846\/revisions\/5063"}],"wp:attachment":[{"href":"https:\/\/yarat.uz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2846"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/yarat.uz\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2846"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/yarat.uz\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2846"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}