Tutorial ESP32 36/55 - Ciyaarta Qiyaasta Nambarka | Qalabka Barashada IoT ee SunFounder ee ESP32
Cashiggan, waxaan ku samayn doonnaa ciyaar qiyaasidda lambar oo madadaalo ah iyadoo la adeegsanayo ESP32 microcontroller oo ay weheliso infrared remote iyo LCD display. Ciyaartoygu wuxuu isku dayi doonaa inuu qiyaaso lambar si kedis ah loo soo saaray oo u dhexeeya 0 iyo 99, iyadoo ciyaartu bixinayso tilmaamo ku saabsan in qiyaastu aad u sarreyso ama aad u hooseyso. Iyadoo loo marayo mashruucan, waxaad baran doontaa sida loo isticmaalo infrared receiver, sida loo muujiyo qiimayaasha LCD, iyo sida loo maareeyo gelinta isticmaalaha ee remote control. Waxaad tixraaci kartaa fiidiyowga si faahfaahin dheeri ah (fiidiyowga 00:00).
Qalabka La Sharaxay
Qaybaha aasaasiga ah ee loo isticmaalo mashruucan waxaa ka mid ah ESP32 microcontroller, infrared remote control, infrared receiver, iyo LCD display. ESP32 wuxuu u shaqeeyaa sidii unugga habaynta ugu weyn wuxuuna awood u leeyahay inuu maareeyo isgaarsiinta wireless-ka, taasoo ka dhigaysa doorasho kala duwan oo ku habboon mashruucyada IoT. Infrared remote wuxuu u oggolaanayaa isticmaalayaasha inay galiyaan qiyaaso iyagoon u baahnayn inay si jireed ula falgalaan board-ka, halka LCD uu muujiyo heerka ciyaarta iyo farriimaha.
Infrared receiver wuxuu ogaadaa calaamadaha ka imanaya remote control wuxuuna u furaa si loogu isticmaalo ciyaarta. Cadaadiska badhanka kasta ee remote-ka wuxuu u dhigmaa qiime gaar ah oo ESP32 uu fasiri karo. LCD display wuxuu siiyaa isticmaalaha interface muuqaal ah, isagoo muujinaya kala duwanaanshaha qiyaasta hadda iyo in qiyaastu sax ahayd iyo in kale.
Faahfaahinta Xogta
| Soo saaraha | SunFounder |
|---|---|
| Nambarka qaybta | ESP32 |
| Logic/IO voltage | 3.3 V |
| Korantada sahayda | 5 V (via USB) |
| Korantada soo saarista (kanal kasta) | 12 mA (ugu badnaan) |
| Hagaha soo noqnoqoshada PWM | 1 kHz |
| Heerarka xadka gelinta | 0.3 * Vcc ilaa 0.7 * Vcc |
| Hoos u dhaca korantada / RDS(on) / saturation | 0.2 V |
| Xadka kulaylka | Heerkulka shaqada: -40 ilaa 85 °C |
| Baakad | WROOM-32 module |
| Qoraallo / noocyo kale | Wuxuu taageeraa Wi-Fi iyo Bluetooth |
- Hubi in dhammaan qaybaha lagu qiimeeyay 3.3 V iyo 5 V halka ay khusayso.
- Isticmaal resistors-ka pull-up ee habboon ee IR receiver si looga fogaado gelinta sabeynaysa.
- Tixgeli inaad isticmaasho heat sink haddii aad ku shaqeyneyso heerka korantada ugu sarreeya muddo dheer.
- Markaad isticmaalayso PWM, ilaali soo noqnoqoshada ku saabsan 1 kHz si waxqabadka ugu fiican.
- Ka digtoonow fiilooyinka; hubi in xiriirada ay adag yihiin si looga fogaado cilladaha isdaba jooga.
Tilmaamaha Fiilooyinka

Si aad u dejiso fiilooyinka ciyaarta qiyaasidda lambarka, ku bilow adigoo ku xira infrared receiver. Ku xir fiilada cas ee bidixda midig ee receiver-ka korantada 3.3 V ee ESP32. Fiilada madow waa inay tagtaa dhulka, halka bidixda bidix ee infrared receiver ay ku xiran tahay pin-ka 14 ee ESP32.
Marka xigta, ku xir LCD display. Ku xir pin-ka VCC ee LCD-ga korantada 5 V ee ESP32 iyo pin-ka dhulka dhulka. Pin-yada SDA iyo SCL ee LCD-ga waa in lagu xiraa pin-yada 21 iyo 22 siday u kala horreeyaan. Hubi inay jiraan laba meelood oo madhan oo u dhexeeya xiriirada SDA iyo SCL si looga fogaado isku dhacyada pin-ka. Ugu dambeyntii, hubi inaad ka saarto daboolka caagga ah ee batteriga ka hor intaadan shidin board-ka.
Tusaalooyinka Koodhka & Sharaxaad
Qaybaha koodhka ee soo socda waxay muujinayaan qaybo muhiim ah oo ka mid ah barnaamijka loo isticmaalo ciyaarta qiyaasidda lambarka. Waxaan ku bilaabaynaa inaan ku darro maktabado lagama maarmaan ah iyo inaan qeexno aqoonsiyeyaasha muhiimka ah.
#include
#include
#include
#include
const uint16_t IR_RECEIVE_PIN = 14;
IRrecv irrecv(IR_RECEIVE_PIN);
decode_results results;
Qaybtan, waxaan ku darnaa maktabado loogu talagalay inay maareeyaan shaqada LCD iyo IR receiver. Pin-ka infrared receiver waxaa lagu qeexay 14, waxaanan abuuraynaa tusaalooyin shay kasta oo lagama maarmaan ah si loo maareeyo gelinta iyo soo saarista.
void setup() {
lcd.init();
lcd.backlight();
Serial.begin(9600);
irrecv.enableIRIn();
initNewValue();
}
Qaybtani waxay muujinaysaa shaqada setup halkaas oo aan ku bilaabayno LCD, bilowna isgaarsiinta serial, oo awood u siinno IR receiver. Shaqada initNewValue() waa la wacaa si loo soo saaro lambar cusub oo random ah oo ciyaartoygu uu qiyaaso.
bool detectPoint() {
if (count > pointValue) {
if (count < upper) upper = count;
} else if (count < pointValue) {
if (count > lower) lower = count;
} else if (count == pointValue) {
count = 0;
return 1;
}
count = 0;
return 0;
}
Shaqadani waxay hubisaa qiyaasta ciyaartoyga marka loo eego lambarka si kedis ah loo soo saaray, iyadoo la hagaajinayo xadka sare iyo hoose si waafaqsan. Haddii qiyaastu sax tahay, waxay dib u dejisaa count waxayna soo celisaa run.
Koodhka buuxa ayaa hoos ku xiran maqaalka si aad u tixraacdo.
Muuujin / Waxa Laga Filan Karo
Marka wax walba la xiro oo koodhka la soo geliyo, ciyaartu waxay kugu boorin doontaa inaad riixdo lambar kasta oo ku yaal kantaroolka. Ciyaartu markaas waxay ku siin doontaa jawaab celin ku saabsan qiyaasahaaga, iyada oo cusboonaysiinaysa tirada suurtagalka ah ilaa aad si sax ah u qiyaasto lambarka la beegsanayo. Haddaad riixdo badhanka POWER, ciyaartu way dib u bilaabataa oo mar kale ayay ka bilowdaa (fiidiyowga 02:30).
Khaladaadka caadiga ah waxaa ka mid ah hubinta in qaab-dhawaynta infrared-ka si habboon loo jiheeyo iyo in dhammaan xiriirada ay adag yihiin. Haddii ciyaartu aysan jawaabin, hubi korontada iyo in loo doortay board-ka iyo port-ka saxda ah ee Arduino IDE.
Waqtiyada Fiidiyowga
- 00:00 Bilow
- 2:17 Hordhac mashruuca ciyaarta
- 4:37 Xirista
- 6:15 Sharaxaada koodhka Arduino
- 12:32 Doorashada Board-ka ESP32 iyo COM Port ee Arduino IDE
- 16:16 Ciyaarista ciyaarta qiyaasta lambarka
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <IRremoteESP8266.h>
#include <IRrecv.h>
// Define the IR receiver pin
const uint16_t IR_RECEIVE_PIN = 14;
// Create an IRrecv object
IRrecv irrecv(IR_RECEIVE_PIN);
// Create a decode_results object
decode_results results;
const long interval = 1000;
unsigned long previousMillis = 0;
// Initialize the LCD object
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Initialize the input number value
int count = 0;
// Initialize the random lucky point
int pointValue = 0;
// Initialize the upper and lower limit tips
int upper = 99;
int lower = 0;
void setup() {
// Initialize the LCD screen
lcd.init();
lcd.backlight();
// Start the serial communication
Serial.begin(9600);
// Enable the IR receiver
irrecv.enableIRIn();
// Initialize a new lucky point value
initNewValue();
}
void loop() {
// If a signal is received from the IR receiver
if (irrecv.decode(&results)) {
bool result = 0;
String num = decodeKeyValue(results.value);
// If the POWER button is pressed
if (num == "POWER") {
initNewValue(); // Initialize a new lucky point value
}
// If the CYCLE button is pressed
else if (num == "CYCLE") {
result = detectPoint(); // Detect the input number
lcdShowInput(result); // Show the result on the LCD screen
}
// If a number button (0-9) is pressed,
//add the digit to the input number
//and detect the number if it is greater than or equal to 10
else if (num >= "0" && num <= "9") {
count = count * 10;
count += num.toInt();
if (count >= 10) {
result = detectPoint();
}
lcdShowInput(result);
}
irrecv.resume();
}
}
// Function to initialize a new lucky point value
void initNewValue() {
// Set the random seed based on the analog value from pin A0
randomSeed(analogRead(A0));
// Generate a new random lucky point value
pointValue = random(99);
// Reset the upper and lower limit tips
upper = 99;
lower = 0;
// Show the welcome message on the LCD screen
lcd.clear();
lcd.print(" Welcome!");
lcd.setCursor(0, 1);
lcd.print("Press Any Number");
// Reset the input number value
count = 0;
// Print the lucky point value to the serial monitor
Serial.print("point is ");
Serial.println(pointValue);
}
// Detect the input number
//and update the upper/lower limit tips accordingly
bool detectPoint() {
if (count > pointValue) {
if (count < upper)upper = count;
}
else if (count < pointValue) {
if (count > lower)lower = count;
}
// If the input number is equal to the lucky point value,
else if (count == pointValue) {
// Reset the input number and return true
count = 0;
return 1;
}
// Reset the input number and return false
count = 0;
return 0;
}
// Show the input number and the upper/lower limit tips
void lcdShowInput(bool result) {
lcd.clear();
// If the input number is equal to the lucky point value
if (result == 1)
{
// Show the success message and initialize a new lucky point value
lcd.setCursor(0, 1);
lcd.print(" You've got it! ");
delay(5000);
initNewValue();
return;
}
lcd.print("Enter number:");
lcd.print(count);
lcd.setCursor(0, 1);
lcd.print(lower);
lcd.print(" < Point < ");
lcd.print(upper);
}
// Function to decode the key value from the IR receiver signal
String decodeKeyValue(long result)
{
switch(result){
case 0xFF6897:
return "0";
case 0xFF30CF:
return "1";
case 0xFF18E7:
return "2";
case 0xFF7A85:
return "3";
case 0xFF10EF:
return "4";
case 0xFF38C7:
return "5";
case 0xFF5AA5:
return "6";
case 0xFF42BD:
return "7";
case 0xFF4AB5:
return "8";
case 0xFF52AD:
return "9";
case 0xFF906F:
return "+";
case 0xFFA857:
return "-";
case 0xFFE01F:
return "EQ";
case 0xFFB04F:
return "U/SD";
case 0xFF9867:
return "CYCLE";
case 0xFF22DD:
return "PLAY/PAUSE";
case 0xFF02FD:
return "BACKWARD";
case 0xFFC23D:
return "FORWARD";
case 0xFFA25D:
return "POWER";
case 0xFFE21D:
return "MUTE";
case 0xFF629D:
return "MODE";
case 0xFFFFFFFF:
return "ERROR";
default :
return "ERROR";
}
}
Common Course Links
Common Course Files
Kheyraadka & Tixraacyada
-
DukumentiESP32 Tutorial 36/55 - SunFounder doc page for guessing numberdocs.sunfounder.com
Faylasha📁
Fayl la'aan.