RisalDash RisalDash

Qoʻllanma · ESP32 · Maslahatlar

ESP32 allaqachon qiladigan 5 narsa

Koʻpchilik ESP32’ni Wi-Fi’li kichik Arduino kabi ishlatadi va qolganiga tegmaydi. Ammo chipda beshta kuchli imkoniyat allaqachon bor — qoʻshimcha temirsiz, kutubxona qidirmasdan. Mana bu nima, nega arziydi va beshtasi uchun tayyor kod misoli.

ESP32ESP-NOWChuqur uyquOTAPWM
ESP32 ning besh yashirin imkoniyati: ESP-NOW, touch GPIO, chuqur uyqu, OTA va PWM
Beshtasi ham chip ichida — faqat yoqish kerak.

1. ESP-NOW — routersiz boshqa ESP32 bilan gaplash

ESP-NOW ikki (yoki koʻp) ESP plataga kichik paketlarni toʻgʻridan-toʻgʻri almashish imkonini beradi — Wi-Fi routersiz va internetsiz — faqat MAC manzillari boʻyicha. Tez (~1 ms), kam quvvatli, pultlar, datchik tugunlari va robot-robot aloqasi uchun ideal. Wi-Fi radiosida yuradi, ammo butun TCP/IP stekini chetlab oʻtadi; u Wi-Fi va BLE yonida qayerda ekani protokollar qoʻllanmasida.

ESP-NOW: yuboruvchi ESP32 qabul qiluvchi ESP32 bilan toʻgʻridan gaplashadi, Wi-Fi routersiz
#include <esp_now.h>
#include <WiFi.h>

uint8_t peer[] = {0x24, 0x6F, 0x28, 0xAA, 0xBB, 0xCC};  // qabul qiluvchi MAC
typedef struct { int id; float temp; } Msg;
Msg data;

void setup() {
  WiFi.mode(WIFI_STA);
  esp_now_init();
  esp_now_peer_info_t p = {};
  memcpy(p.peer_addr, peer, 6);
  esp_now_add_peer(&p);
}

void loop() {
  data.id = 1; data.temp = 24.5;
  esp_now_send(peer, (uint8_t *)&data, sizeof(data));  // routersiz, ~1 ms
  delay(2000);
}

2. Sigʻim touch — istalgan maydoncha tugmaga aylanadi

Klassik ESP32’da 10 ta touch’ga mos GPIO bor. Pinni mis, folga yoki vint boshiga ulang — touchRead() barmoq yaqinlashganda kamayadigan son qaytaradi — tugmasiz, qoʻshimcha chipsiz. Chiroyli panellar, yashirin boshqaruv va teginish bilan uygʻonish uchun zoʻr. (S2/S3 da touch-API biroz boshqacha; klassik ESP32 touchRead(T0..T9) ishlatadi.)

Sigʻim touch: barmoq tekkanda touchRead ~72 dan ~18 ga tushadi
void setup() {
  Serial.begin(115200);
}

void loop() {
  int v = touchRead(T0);            // T0 = klassik ESP32 da GPIO4
  if (v < 40) Serial.println("touched!");   // kichik = barmoq yaqin
  delay(100);
}

3. Chuqur uyqu — batareyada oylab ishlash

Ish portlashlari orasida ESP32 ~10 µA da chuqur uyquga tushib, taymer yoki pin boʻyicha uygʻonishi mumkin. Bu batareyali tugunning bir kun yoki bir yil ishlashi orasidagi farq. Kamchilik: uygʻonishda chip qayta yuklanadi va setup() qaytadan ishlaydi, shuning uchun holatni RTC xotirada saqla. Batafsil — chuqur uyqu qoʻllanmasida.

Chuqur uyqu toki vaqt boʻyicha: qisqa faol choʻqqilar, uzun kam quvvatli pastliklar
#define uS_PER_S 1000000ULL

void setup() {
  Serial.begin(115200);
  Serial.println("uygʻonildi — ish bajarildi, uxlaymiz");
  // ... datchik oʻqiladi, yuboriladi ...
  esp_sleep_enable_timer_wakeup(10 * uS_PER_S);  // 10 s dan keyin uygʻonish
  esp_deep_sleep_start();                        // uygʻongunicha ~10 µA
}

void loop() {}   // ishlamaydi — har uygʻonishda setup() qayta ishlaydi

4. OTA — proshivkani havodan yangila

Plata devorda turganda uni qayta proshivka uchun sugʻurib olishni xohlamaysan. OTA yangi proshivkani Wi-Fi orqali yuklaydi: bir necha qator qoʻsh — Arduino IDE’da tarmoq porti paydo boʻladi. Joylashtirilgan qurilmalar uchun shart — va agar bir qatorda xohlasang, RisalDash dashboardi dash.enableOTA() orqali «Proshivkani yangilash» tugmasini beradi.

OTA: kompyuter .bin ni Wi-Fi orqali devordagi ESP32 ga yuboradi, USB’siz
#include <WiFi.h>
#include <ArduinoOTA.h>

void setup() {
  WiFi.begin("your-ssid", "your-pass");
  while (WiFi.status() != WL_CONNECTED) delay(300);
  ArduinoOTA.begin();          // endi plata Wi-Fi orqali proshivka boʻladi
}

void loop() {
  ArduinoOTA.handle();         // IDE da tarmoq porti paydo boʻladi
}

5. Deyarli istalgan pinda PWM — yorqinlik, tezlik, servo

ESP32’ning LEDC periferiyasi deyarli istalgan GPIO’da apparatli PWM generatsiya qiladi — LED’ni xiralashtir, motor tezligini yoki servo pozitsiyasini belgila, hammasi CPU’ni bloklamasdan. Pin, chastota va aniqlikni tanlaysan, keyin shunchaki duty qiymatini yozasan. Arduino-ESP32 core 3.x da bu quyidagi ozoda ledcAttach() API (eski 2.x da ledcSetup() + ledcAttachPin() edi).

PWM skvajnosti va LED yorqinligi: 0%, 50% va 100%
void setup() {
  ledcAttach(18, 5000, 8);     // pin 18, 5 kHz, 8-bit (0..255)  [core 3.x]
}

void loop() {
  for (int d = 0; d <= 255; d++) { ledcWrite(18, d); delay(4); }  // yorishuv
  for (int d = 255; d >= 0; d--) { ledcWrite(18, d); delay(4); }  // soʻnish
}

Hammasini birlashtir

Bularning hech biri shild yoki xarid roʻyxati talab qilmaydi — bu sende allaqachon bor kremniy. Teginish bilan uygʻonadigan, oʻqiydigan, qiymatni ESP-NOW orqali yuboradigan va yana chuqur uyquga tushadigan batareyali datchik — dalada OTA bilan yangilanadigan, PWM status-LED bilan — bu besh «yashirin» funksiya va nol qoʻshimcha qism. Gap shunda: ESP32’ing miltillashdan koʻra ancha koʻp narsani qiladi.

Ustiga UI kerakmi? Toʻliq jonli dashboard — OTA ichida — bir necha qator C++.