ESP ماڈیولز ان کی Wi-Fi فعالیتوں جیسے ESP8266 ، ESP-12E ، وغیرہ کے لئے مشہور ہیں۔ یہ تمام Wi-Fi فنکشنلٹی کے ساتھ طاقتور مائکروکانٹرولر ماڈیول ہیں۔ ایک اور ESP ماڈیول ہے جو پچھلے ESP ماڈیولز سے زیادہ طاقت ور اور ورسٹائل ہے- اس کا نام ESP32 ہے ۔ اس میں بلوٹوتھ اور وائی فائی رابطہ ہے اور ہم نے پہلے ہی ESP32 کی BLE صلاحیتوں کی وضاحت کی ہے اور بہت سے IOT پروجیکٹس میں ESP32 کا استعمال کیا ہے۔ لیکن بہت کم لوگ جانتے ہیں کہ ESP32 ایک ڈوئل کور مائکروکانٹرولر ہے ۔
ای ایس پی 32 میں دو 32 بٹ ٹینسیلیکا ایکسٹینسا ایل ایکس 6 مائکرو پروسیسرز ہیں جو اسے ایک طاقتور ڈبل کور (کور0 اور کور 1) مائکروکنٹرولر بناتا ہے۔ یہ دو مختلف حالتوں میں سنگل کور اور ڈبل کور میں دستیاب ہے۔ لیکن ڈبل کور مختلف حالت زیادہ مقبول ہے کیونکہ قیمت میں کوئی خاص فرق نہیں ہے۔
ESP32 کو آرڈینوو IDE ، ایسپریسیف IDF ، Lua RTOS ، وغیرہ کا استعمال کرتے ہوئے پروگرام کیا جاسکتا ہے جبکہ ارڈینو IDE کے ساتھ پروگرام کرتے ہوئے ، کوڈ صرف Core1 پر چلتا ہے کیونکہ CF0 پہلے ہی RF مواصلات کے لئے پروگرام ہے۔ لیکن یہاں یہ ٹیوٹوریل ہم دکھائیں گے کہ ESP32 کے دونوں کور کو بیک وقت دو کام انجام دینے کے لئے کس طرح استعمال کیا جائے ۔ یہاں پہلا کام جہاز کے ایل ای ڈی کو جھپکانا ہوگا اور دوسرا کام ڈی ایچ ٹی 11 سینسر سے درجہ حرارت کا ڈیٹا لانا ہوگا۔
آئیے پہلے ایک کور پر ملٹی کور پروسیسر کے فوائد دیکھتے ہیں۔
ملٹی کور پروسیسر کے فوائد
- ملٹی کور پروسیسرز اس وقت کارآمد ہیں جب بیک وقت کام کرنے کے لئے 2 سے زیادہ عمل ہوں۔
- چونکہ کام مختلف کوروں میں تقسیم ہوتا ہے ، اس کی رفتار بڑھتی ہے اور ایک ہی وقت میں متعدد عمل ختم ہوسکتے ہیں۔
- بجلی کی کھپت کو کم کیا جاسکتا ہے کیونکہ جب جب کوئی کور بیکار حالت میں ہوتا ہے تو اس سے اس وقت تک استعمال نہ ہونے والے گھریلو سامان کو بند کرنے کے لئے استعمال کیا جاسکتا ہے۔
- ڈوئل کور پروسیسروں کو سنگل کور پروسیسروں کے مقابلے میں اکثر مختلف دھاگوں کے مابین تبدیل ہونا پڑتا ہے کیونکہ وہ ایک وقت میں ایک کی بجائے دو ایک ساتھ ہینڈل کرسکتے ہیں۔
ESP32 اور FreeRTOS
ESP32 بورڈ میں پہلے ہی اس پر فری آر ٹی او ایس فرم ویئر نصب ہے۔ فری آر ٹی او ایس ایک اوپن سورس ریئل ٹائم آپریٹنگ سسٹم ہے جو ملٹی ٹاسکنگ میں بہت مفید ہے۔ آر ٹی او ایس وسائل کے انتظام اور نظام کی کارکردگی کو زیادہ سے زیادہ کرنے میں مدد کرتا ہے۔ فری آر ٹی او ایس کے بہت سے API فنکشنز مختلف مقاصد کے ل and ہیں اور ان APIs کا استعمال کرتے ہوئے ، ہم کاموں کو تشکیل دے سکتے ہیں اور انہیں مختلف کوروں پر چلانے کے لئے تیار کرسکتے ہیں۔
فری آر ٹی او ایس API کی مکمل دستاویزات یہاں پاسکتی ہیں۔ ہم اپنے کوڈ میں ملٹی ٹاسکنگ ایپلیکیشن بنانے کے لئے کچھ APIs استعمال کرنے کی کوشش کریں گے جو دونوں کوروں پر چل سکے گی۔
ESP32 بنیادی ID تلاش کرنا
یہاں ہم کوڈ کو ESP32 میں اپ لوڈ کرنے کے لئے اردوینو IDE استعمال کریں گے۔ کور آئی ڈی کو جاننے کے لئے جس پر کوڈ چل رہا ہے ، وہاں ایک API فنکشن ہے
x پورٹ گیٹ کوریڈ ()
اس فنکشن کو کور آئی ڈی کو جاننے کے لئے باطل سیٹ اپ () اور باطل لوپ () فنکشن سے کہا جاسکتا ہے جس پر یہ افعال چل رہے ہیں۔
آپ ذیل میں خاکہ اپ لوڈ کرکے اس API کو جانچ سکتے ہیں:
باطل سیٹ اپ () { سیریل.بیگین (115200)؛ سیریل ڈاٹ پرنٹ ("کورپ پر سیٹ اپ () فنکشن چل رہا ہے:")؛ سیریل.پرنٹلن (x پورٹ گیٹ کوریڈ ())؛ } باطل لوپ () { Serial.print ("لوپ () تقریب کور پر چل رہے:")؛ سیریل.پرنٹلن (x پورٹ گیٹ کوریڈ ())؛ }
مذکورہ خاکہ اپ لوڈ کرنے کے بعد ، سیریل مانیٹر کھولیں اور آپ کو معلوم ہوگا کہ دونوں افعال کور 1 پر چل رہے ہیں جیسا کہ ذیل میں دکھایا گیا ہے۔
مندرجہ بالا مشاہدات سے ، یہ نتیجہ اخذ کیا جاسکتا ہے کہ پہلے سے طے شدہ آرڈینو سکیچ ہمیشہ کور 1 پر چلتا ہے ۔
ESP32 ڈوئل کور پروگرامنگ
آرڈوینو IDE ای ایس پی 32 کے لئے فری آر ٹی او ایس کی حمایت کرتا ہے اور فری آر ٹی او ایس APIs ہمیں ایسے کاموں کی تشکیل کی اجازت دیتے ہیں جو دونوں کوروں پر آزادانہ طور پر چل سکتے ہیں۔ یہ کام اس کوڈ کا ٹکڑا ہے جو بورڈ پر کچھ کام کرتا ہے جیسے پلک جھپکنے ، لیڈ چمکانا ، درجہ حرارت بھیجنا وغیرہ۔
مندرجہ ذیل فنکشن کاموں کو بنانے کے لئے استعمال کیا جاتا ہے جو دونوں کوروں پر چل سکتے ہیں۔ اس فنکشن میں ، ہمیں کچھ دلائل دینا ہوں گے جیسے ترجیح ، بنیادی شناخت ، وغیرہ۔
اب ، ٹاسک اور ٹاسک فنکشن بنانے کے لئے درج ذیل اقدامات پر عمل کریں۔
1. سب سے پہلے ، باطل سیٹ اپ تقریب میں کاموں کو تخلیق کریں ۔ یہاں ہم دو کام بنائیں گے ، ایک ہر 0.5 سیکنڈ کے بعد ایل ای ڈی ٹمٹمانے کے لئے اور دوسرا کام ہر 2 سیکنڈ کے بعد درجہ حرارت کی ریڈنگ حاصل کرنا ہے۔
xTaskCreatePinnedToCore () فنکشن میں 7 دلائل لیتے ہیں:
- کام کو عملی جامہ پہنانے کے لئے نام (ٹاسک 1)
- ٹاسک کو دیا ہوا کوئی نام ("ٹاسک 1" ، وغیرہ)
- الفاظ میں ٹاسک کو الاٹ کردہ اسٹیک سائز (1 لفظ = 2 بائٹس)
- ٹاسک ان پٹ پیرامیٹر (NULL ہوسکتا ہے)
- کام کی ترجیح (0 سب سے کم ترجیح ہے)
- ٹاسک ہینڈل (NULL ہوسکتا ہے)
- بنیادی شناخت جہاں کام چلائے گا (0 یا 1)
اب ، xTaskCreatePinnedToCore () فنکشن میں تمام دلائل دے کر قیادت کو ٹمٹمانے کیلئے ٹاسک 1 بنائیں ۔
xTaskCreatePinnedToCore (Task1code، "Task1"، 10000، NULL، 1، NULL، 0)؛
اسی طرح، Task2 تخلیق Task2 لئے اور 7 میں کور ID 1 بناتے ویں دلیل.
xTaskCreatePinnedToCore (Task2code، "Task2"، 10000، NULL، 1، NULL، 1)؛
آپ کام کی پیچیدگی کے لحاظ سے ترجیحی اور اسٹیک سائز کو تبدیل کرسکتے ہیں۔
2. اب ، ہم ٹاسک 1 کوڈ اور ٹاسک 2 کوڈ فنکشن کو نافذ کریں گے ۔ ان افعال میں مطلوبہ کام کے لئے کوڈ ہوتا ہے۔ ہمارے معاملے میں ، پہلا کام لیڈ پلک جھپکائے گا اور دوسرا کام درجہ حرارت لائے گا۔ لہذا باطل سیٹ اپ فنکشن سے باہر ہر کام کے لئے دو الگ الگ فنکشن بنائیں۔
بورڈ پر ٹمٹمانے کے لئے ٹاسک کوڈ فنکشن 0.5 سیکنڈ کے بعد بورڈ پر چمکتا ہے جیسا کہ نیچے دکھایا گیا ہے
باطل ٹاسک 1 کوڈ (باطل * پیرامیٹر) { سیریل.پرنٹ ("کور پر ٹاسک 1 چل رہا ہے")؛ سیریل.پرنٹلن (x پورٹ گیٹ کوریڈ ())؛ (؛؛) {// لامحدود لوپ ڈیجیٹل رائٹ (لیڈ ، ہائی)؛ تاخیر (500)؛ digitalWrite (قیادت، کم)؛ تاخیر (500)؛ } }
اسی طرح ، درجہ حرارت لانے کے لئے ٹاسک 2 کوڈ فنکشن نافذ کریں ۔
باطل ٹاسک 2 کوڈ (باطل * پی وی پیرامیٹرز) { سیریل.پرنٹ ("کور پر ٹاسک 2 چل رہا ہے")؛ سیریل.پرنٹلن (x پورٹ گیٹ کوریڈ ())؛ (؛؛) { فلوٹ ٹی = dht.readTemperature ()؛ سیریل.پرنٹ ("درجہ حرارت:")؛ سیریل.پرنٹ (ٹی)؛ تاخیر (2000)؛ } }
3. یہاں باطل لوپ فنکشن خالی رہے گا۔ جیسا کہ ہم پہلے ہی جانتے ہیں کہ لوپ اور سیٹ اپ فنکشن کور 1 پر چلتا ہے لہذا آپ کور 1 ٹاسک کو بھی باطل لوپ فنکشن میں لاگو کرسکتے ہیں ۔
اب کوڈنگ کا حصہ ختم ہوچکا ہے ، لہذا ٹولز مینو میں ESP32 بورڈ کا انتخاب کرکے صرف آرڈینو آئ ڈی ای کا استعمال کرتے ہوئے کوڈ اپ لوڈ کریں۔ اس بات کو یقینی بنائیں کہ آپ نے DHT11 سینسر کو ESP32 کے D13 کو پن سے مربوط کیا ہے۔
ذیل میں دکھایا گیا ہے کے طور پر اب نتائج پر سیریل مانیٹر یا ارڈینو آئ ڈی ای کی نگرانی کی جاسکتی ہے۔
ریئل ٹائم سسٹم جیسی کمپلیکس ایپلی کیشنز ESP32 کے ڈوئل کور کا استعمال کرتے ہوئے بیک وقت ایک سے زیادہ ٹاسک چلانے کے ذریعے بنائے جاسکتے ہیں۔
ڈیمو ویڈیو کے ساتھ مکمل کوڈ ذیل میں دیا گیا ہے۔