ESP32 سبق 36/55 - نمبر اندازہ لگانے کا کھیل | سن فاؤنڈر کا ESP32 IoT سیکھنے کا کٹ
اس ٹیوٹوریل میں، ہم ESP32 مائیکروکنٹرولر کے ساتھ ایک انفراریڈ ریموٹ اور LCD ڈسپلے استعمال کرتے ہوئے ایک دلچسپ اندازہ لگانے والا نمبر گیم بنائیں گے۔ کھلاڑی 0 اور 99 کے درمیان تصادفی طور پر پیدا ہونے والے نمبر کا اندازہ لگانے کی کوشش کرے گا، اور گیم اس بارے میں اشارے فراہم کرے گی کہ اندازہ بہت زیادہ ہے یا بہت کم۔ اس پروجیکٹ کے ذریعے، آپ سیکھیں گے کہ انفراریڈ ریسیور کیسے استعمال کریں، LCD پر ویلیوز ڈسپلے کریں، اور ریموٹ کنٹرول سے صارف کے ان پٹ کو کیسے منظم کریں۔ اضافی وضاحت کے لیے آپ ویڈیو کا حوالہ دے سکتے ہیں (ویڈیو میں 00:00 پر)۔
ہارڈویئر کی وضاحت
اس پروجیکٹ میں استعمال ہونے والے بنیادی اجزاء میں ESP32 مائیکروکنٹرولر، ایک انفراریڈ ریموٹ کنٹرول، ایک انفراریڈ ریسیور، اور LCD ڈسپلے شامل ہیں۔ ESP32 مرکزی پروسیسنگ یونٹ کے طور پر کام کرتا ہے اور وائرلیس کمیونیکیشن کو سنبھالنے کی صلاحیت رکھتا ہے، جو اسے IoT پروجیکٹس کے لیے ایک ورسٹائل انتخاب بناتا ہے۔ انفراریڈ ریموٹ صارفین کو بورڈ کے ساتھ جسمانی تعامل کے بغیر اندازے درج کرنے کی اجازت دیتا ہے، جبکہ LCD گیم کی حالت اور پرامپٹس ڈسپلے کرتا ہے۔
انفراریڈ ریسیور ریموٹ کنٹرول سے سگنلز کا پتہ لگاتا ہے اور انہیں گیم میں استعمال کے لیے ڈی کوڈ کرتا ہے۔ ریموٹ پر ہر بٹن پریس ایک مخصوص ویلیو سے مطابقت رکھتا ہے جسے ESP32 تشریح کر سکتا ہے۔ LCD ڈسپلے صارف کے لیے ایک بصری انٹرفیس فراہم کرتا ہے، جو موجودہ اندازے کی حد اور یہ دکھاتا ہے کہ اندازہ درست تھا یا نہیں۔
ڈیٹاشیٹ کی تفصیلات
| مینوفیکچرر | سن فاؤنڈر |
|---|---|
| پارٹ نمبر | ESP32 |
| لاجک/آئی او وولٹیج | 3.3 V |
| سپلائی وولٹیج | 5 V (USB کے ذریعے) |
| آؤٹ پٹ کرنٹ (فی چینل) | 12 mA (زیادہ سے زیادہ) |
| PWM فریکوئنسی رہنمائی | 1 kHz |
| ان پٹ لاجک تھریشولڈز | 0.3 * Vcc سے 0.7 * Vcc |
| وولٹیج ڈراپ / RDS(on) / سیچوریشن | 0.2 V |
| تھرمل حدود | آپریٹنگ درجہ حرارت: -40 سے 85 °C |
| پیکیج | WROOM-32 ماجیول |
| نوٹس / ویریئنٹس | وائی-فائی اور بلوٹوتھ کو سپورٹ کرتا ہے |
- یقینی بنائیں کہ تمام اجزاء 3.3 V اور 5 V کے لیے موزوں ہیں جہاں قابل اطلاق ہو۔
- فلوٹنگ ان پٹ سے بچنے کے لیے IR ریسیور کے لیے مناسب پل-اپ ریزسٹرز استعمال کریں۔
- اگر زیادہ سے زیادہ آؤٹ پٹ کرنٹ پر طویل عرصے تک چل رہے ہیں تو ہیٹ سنک استعمال کرنے پر غور کریں۔
- PWM استعمال کرتے وقت، بہترین کارکردگی کے لیے تقریباً 1 kHz کی فریکوئنسی برقرار رکھیں۔
- وائرنگ میں محتاط رہیں؛ وقفے وقفے سے ناکامیوں سے بچنے کے لیے کنکشنز کو محفوظ یقینی بنائیں۔
وائرنگ ہدایات

اندازہ لگانے والے نمبر گیم کے لیے وائرنگ ترتیب دینے کے لیے، انفراریڈ ریسیور کو جوڑ کر شروع کریں۔ ریسیور کے دائیں پن سے سرخ تار کو ESP32 پر 3.3 V پاور سپلائی سے جوڑیں۔ کالی تار گراؤنڈ پر جانی چاہیے، جبکہ انفراریڈ ریسیور کا بایاں پن ESP32 پر پن 14 سے جڑتا ہے۔
اگلا، LCD ڈسپلے کو وائر کریں۔ LCD کے VCC پن کو ESP32 پر 5 V سپلائی سے اور گراؤنڈ پن کو گراؤنڈ سے جوڑیں۔ LCD کے SDA اور SCL پنوں کو بالترتیب پنوں 21 اور 22 سے جوڑا جانا چاہیے۔ یقینی بنائیں کہ پن تصادم سے بچنے کے لیے SDA اور SCL کنکشنز کے درمیان دو خالی جگہیں ہیں۔ آخر میں، بورڈ کو پاور کرنے سے پہلے بیٹری سے کسی بھی پلاسٹک کور کو ہٹانا یقینی بنائیں۔
کوڈ مثالیں اور واک تھرو
مندرجہ ذیل کوڈ سنیپٹس اندازہ لگانے والے نمبر گیم کے لیے استعمال ہونے والے پروگرام کے ضروری حصوں کی وضاحت کرتے ہیں۔ ہم ضروری لائبریریاں شامل کرکے اور کلیدی شناخت کنندگان کی وضاحت کرکے شروع کرتے ہیں۔
#include
#include
#include
#include
const uint16_t IR_RECEIVE_PIN = 14;
IRrecv irrecv(IR_RECEIVE_PIN);
decode_results results;
اس اقتباس میں، ہم LCD اور IR ریسیور فعالیت کو سنبھالنے کے لیے لائبریریاں شامل کرتے ہیں۔ انفراریڈ ریسیور کے لیے پن کو 14 کے طور پر بیان کیا گیا ہے، اور ہم ان پٹ اور آؤٹ پٹ کو منظم کرنے کے لیے ضروری اشیاء کے انسٹینسز بناتے ہیں۔
void setup() {
lcd.init();
lcd.backlight();
Serial.begin(9600);
irrecv.enableIRIn();
initNewValue();
}
یہ سنیپٹ سیٹ اپ فنکشن دکھاتا ہے جہاں ہم LCD کو انیشیالائز کرتے ہیں، سیریل کمیونیکیشن شروع کرتے ہیں، اور IR ریسیور کو فعال کرتے ہیں۔ کھلاڑی کے اندازے کے لیے ایک نیا تصادفی نمبر پیدا کرنے کے لیے فنکشن initNewValue() کو کال کیا جاتا ہے۔
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;
}
یہ فنکشن کھلاڑی کے اندازے کو تصادفی طور پر پیدا ہونے والے نمبر کے خلاف چیک کرتا ہے، اوپری اور نچلی حدود کو اس کے مطابق ایڈجسٹ کرتا ہے۔ اگر اندازہ درست ہے، تو یہ شمار کو دوبارہ ترتیب دیتا ہے اور درست لوٹاتا ہے۔
مکمل کوڈ آپ کے حوالے کے لیے مضمون کے نیچے لوڈ کیا گیا ہے۔
ڈیمونسٹریشن / کیا توقع کریں
ایک بار جب سب کچھ وائرڈ ہو جائے اور کوڈ اپ لوڈ ہو جائے، تو گیم آپ کو ریموٹ کنٹرول پر کوئی بھی نمبر دبانے کا کہے گی۔ اس کے بعد گیم آپ کے اندازوں پر رائے دے گی، ممکنہ نمبروں کی حد کو اپ ڈیٹ کرتی رہے گی جب تک کہ آپ ہدف والے نمبر کا درست اندازہ نہ لگا لیں۔ اگر آپ پاور بٹن دبائیں گے، تو گیم ری سیٹ ہو کر دوبارہ شروع ہو جائے گی (ویڈیو میں 02:30 پر)۔
عام غلطیوں میں یہ شامل ہے کہ انفراریڈ ریسیور صحیح سمت میں ہو اور تمام کنکشن محفوظ ہوں۔ اگر گیم جواب نہ دے، تو بجلی کی فراہمی چیک کریں اور تصدیق کریں کہ Arduino IDE میں صحیح بورڈ اور پورٹ منتخب ہیں۔
ویڈیو ٹائم اسٹیمپس
- 00:00 آغاز
- 2:17 گیم پروجیکٹ کا تعارف
- 4:37 وائرنگ
- 6:15 Arduino کوڈ کی وضاحت
- 12:32 Arduino IDE میں ESP32 بورڈ اور COM پورٹ کا انتخاب
- 16:16 نمبر اندازہ لگانے والی گیم کھیلنا
#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
وسائل اور حوالہ جات
-
دستاویزاتESP32 Tutorial 36/55 - SunFounder doc page for guessing numberdocs.sunfounder.com
فائلیں📁
کوئی فائلیں دستیاب نہیں ہیں۔