माइक्रोपायथन

MicroPython सी ([[प्रोग्रामिंग भाषा)]] में लिखी गई पायथन (प्रोग्रामिंग भाषा) 3 के साथ काफी हद तक संगत प्रोग्रामिंग भाषा का एक सॉफ़्टवेयर  कार्यान्वयन है, जिसे  microcontroller  पर चलने के लिए अनुकूलित किया गया है। MicroPython में बायटेकोड के लिए एक पायथन कंपाइलर और उस बायटेकोड का एक रनटाइम दुभाषिया होता है। समर्थित आदेशों को तुरंत निष्पादित करने के लिए उपयोगकर्ता को एक इंटरैक्टिव प्रॉम्प्ट (रीड-इवल-प्रिंट लूप) के साथ प्रस्तुत किया जाता है। कोर पायथन पुस्तकालयों का चयन शामिल है; MicroPython में ऐसे मॉड्यूल शामिल हैं जो प्रोग्रामर को निम्न-स्तरीय हार्डवेयर तक पहुँच प्रदान करते हैं। MicroPython में एक इनलाइन असेंबलर है, और वह कोड पूरी गति से चलेगा, लेकिन यह विभिन्न माइक्रोकंट्रोलर्स (जैसा कि कोई असेंबली है) में गैर-पोर्टेबल है।

प्रोजेक्ट का सोर्स कोड MIT लाइसेंस के तहत GitHub पर उपलब्ध है।

इतिहास
MicroPython मूल रूप से ऑस्ट्रेलियाई प्रोग्रामर और सैद्धांतिक भौतिक विज्ञानी डेमियन जॉर्ज द्वारा 2013 में एक सफल किकस्टार्टर समर्थित अभियान के बाद बनाया गया था। जबकि मूल किकस्टार्टर अभियान ने STM32#STM32 F4-संचालित विकास बोर्ड पाइबोर्ड के साथ MicroPython जारी किया, MicroPython कई ARM आर्किटेक्चर एआरएम वास्तुकला का समर्थन करता है। मेनलाइन में समर्थित बंदरगाह हैं ARM Cortex-M (कई STM32 बोर्ड, TI CC3200/WiPy, टीनी बोर्ड, नॉर्डिक nRF सीरीज़, SAMD21 और SAMD51), ESP8266, ESP32, 16-बिट PIC, Unix, Windows, Zephyr, और JavaScript. इसके अलावा, मेनलाइन में समर्थित नहीं विभिन्न प्रकार के सिस्टम और हार्डवेयर प्लेटफॉर्म के लिए कई कांटे हैं। 2016 में, बीबीसी के साथ माइक्रो बिट साझेदारी में पायथन सॉफ्टवेयर फाउंडेशन के योगदान के हिस्से के रूप में बीबीसी माइक्रो बिट के लिए माइक्रोपायथन का एक संस्करण बनाया गया था। जुलाई 2017 में, MicroPython को शिक्षा और उपयोग में आसानी पर जोर देने के साथ MicroPython का एक संस्करण, सर्किटपायथन बनाने के लिए फोर्क किया गया था। MicroPython और सर्किटपाइथन हार्डवेयर के कुछ अलग सेटों का समर्थन करते हैं (जैसे सर्किटपाइथन Atmel SAM D21 और D51 बोर्डों का समर्थन करता है, लेकिन ESP8266 के लिए समर्थन छोड़ देता है)। संस्करण 4.0 के अनुसार, सर्किटपाइथन माइक्रोपायथन संस्करण 1.9.4 पर आधारित है। 2017 में, माइक्रोसेमी ने RISC-V (RV32 और RV64) आर्किटेक्चर के लिए एक माइक्रोपायथन पोर्ट बनाया। अप्रैल 2019 में, लेगो माइंडस्टॉर्म EV3 के लिए माइक्रोपायथन का एक संस्करण बनाया गया था। जनवरी 2021 में, RP2040 (ARM Cortex-M0+, Raspberry Pi Pico और अन्य पर) के लिए एक MicroPython पोर्ट बनाया गया था।

पायथन चलाने की क्षमता
MicroPython में Python चलाने की क्षमता है, जिससे उपयोगकर्ता सरल और आसानी से समझने वाले प्रोग्राम बना सकते हैं। MicroPython कई मानक Python पुस्तकालयों का समर्थन करता है, जो Python के सबसे अधिक उपयोग किए जाने वाले पुस्तकालयों की 80% से अधिक सुविधाओं का समर्थन करता है। MicroPython को विशेष रूप से माइक्रोकंट्रोलर्स और पायथन के बीच विशिष्ट प्रदर्शन अंतर का समर्थन करने के लिए डिज़ाइन किया गया था। पायथन कोड सीधे हार्डवेयर तक पहुंच और बातचीत करने में सक्षम है, बढ़ी हुई हार्डवेयर संभावनाओं के साथ जो एक ऑपरेटिंग सिस्टम पर चलने वाले सामान्य पायथन एप्लिकेशन का उपयोग करके उपलब्ध नहीं हैं।

कोड पोर्टेबिलिटी
MicroPython का हार्डवेयर अमूर्त परत  (HAL) तकनीक का उपयोग विकसित कोड को एक ही परिवार या प्लेटफ़ॉर्म के भीतर विभिन्न माइक्रोकंट्रोलर्स के बीच पोर्टेबल होने की अनुमति देता है और उन डिवाइसों पर जो MicroPython को सपोर्ट और डाउनलोड कर सकते हैं। प्रोग्राम अक्सर उच्च-प्रदर्शन वाले माइक्रोकंट्रोलर्स पर विकसित और परीक्षण किए जाते हैं और कम-प्रदर्शन वाले माइक्रोकंट्रोलर्स पर उपयोग किए जाने वाले अंतिम एप्लिकेशन के साथ वितरित किए जाते हैं।

मॉड्यूल
एक बार नया कोड लिखे जाने के बाद, एक जमे हुए मॉड्यूल को बनाने और इसे एक पुस्तकालय के रूप में उपयोग करने के लिए MicroPython कार्यक्षमता प्रदान करता है जो विकसित फर्मवेयर का एक हिस्सा हो सकता है। यह सुविधा उसी के दोहराव से बचने में सहायता करती है, पहले से ही त्रुटि मुक्त, परीक्षण कोड को माइक्रोपायथन वातावरण में। इस प्रकार के मॉड्यूल को संकलक  के लिए एक माइक्रोकंट्रोलर के मॉड्यूल निर्देशिका में सहेजा जाएगा और माइक्रोकंट्रोलर पर अपलोड किया जाएगा जहां बार-बार उपयोग किए जाने वाले पायथन के आयात कमांड का उपयोग करके पुस्तकालय उपलब्ध होगा।

रीड-इवल-प्रिंट लूप
रीड-इवल-प्रिंट लूप (आरईपीएल) एक डेवलपर को कोड की अलग-अलग पंक्तियों में प्रवेश करने की अनुमति देता है और उन्हें तुरंत टर्मिनल एमुलेटर पर चलाता है। Linux-आधारित और macOS सिस्टम में टर्मिनल एम्यूलेटर  होते हैं जिनका उपयोग सीरियल USB कनेक्शन का उपयोग करके एक MicroPython डिवाइस के REPL से सीधा कनेक्शन बनाने के लिए किया जा सकता है। आरईपीएल एक अनुप्रयोग प्रक्रिया सामग्री के कुछ हिस्सों के तत्काल परीक्षण में सहायता करता है क्योंकि आप कोड के प्रत्येक भाग को चला सकते हैं और परिणाम देख सकते हैं। एक बार जब आपके कोड के विभिन्न भाग आरईपीएल में लोड हो जाते हैं तो आप अपने कोड की कार्यक्षमता के साथ प्रयोग करने के लिए अतिरिक्त आरईपीएल सुविधाओं का उपयोग कर सकते हैं।

सहायक आरईपीएल आदेश (एक बार सीरियल कंसोल से जुड़े): * CTRL + C: कीबोर्ड इंटरप्ट
 * CTRL + D: पुनः लोड करें
 * मदद : सहायता संदेश
 * मदद (मॉड्यूल): अंतर्निहित मॉड्यूल पर्यावरण को सूचीबद्ध करता है
 * आयात बोर्ड [एन्टर] डीआईआर (बोर्ड): आपके माइक्रोकंट्रोलर बोर्ड पर उन सभी पिनों को सूचीबद्ध करता है जो प्रोग्राम के कोड में उपयोग करने के लिए उपलब्ध हैं

सीमाएं
हालाँकि MicroPython पूरी तरह से पायथन भाषा संस्करण 3.4 और 3.5 के अधिकांश को लागू करता है, यह 3.5 से शुरू की गई सभी भाषा सुविधाओं को लागू नहीं करता है, हालांकि 3.6 से कुछ नए सिंटैक्स और बाद के संस्करणों से अधिक हाल की विशेषताएं, उदा। 3.8 (असाइनमेंट एक्सप्रेशंस) और 3.9 से। इसमें मानक पुस्तकालय का एक सबसेट शामिल है। MicroPython के पास अन्य लोकप्रिय प्लेटफार्मों की तुलना में माइक्रोकंट्रोलर बाजार में अधिक सीमित हार्डवेयर समर्थन है, जैसे Arduino जैसे कि कम संख्या में माइक्रोकंट्रोलर विकल्प जो भाषा का समर्थन करते हैं। MicroPython में अन्य प्लेटफार्मों के विपरीत एक एकीकृत विकास वातावरण (IDE) या विशिष्ट संपादक शामिल नहीं है।

सिंटेक्स और सिमेंटिक्स
MicroPython's Syntax (प्रोग्रामिंग लैंग्वेज) को इसकी स्पष्ट और आसानी से समझ में आने वाली शैली और शक्ति के कारण Python से अपनाया गया है। अधिकांश अन्य प्रोग्रामिंग भाषाओं के विपरीत पठनीयता को प्राथमिकता देने के लिए कम वाक्य-विन्यास के साथ कम विराम चिह्न का उपयोग किया जाता है।

कोड ब्लॉक
MicroPython पायथन की कोड ब्लॉक शैली को अपनाता है, एक विशेष कार्यात्मक प्रोग्रामिंग, स्थिति या लूप के लिए विशिष्ट कोड के साथ इंडेंट किया जाता है, जिसका अर्थ है कि कुछ अभिव्यक्तियों का मूल्यांकन केवल तभी किया जाएगा जब स्थिति अभिव्यक्ति का सही मूल्यांकन किया जाएगा। यह अधिकांश अन्य भाषाओं से भिन्न है जो आमतौर पर ब्लॉकों को परिसीमित करने के लिए प्रतीकों या कीवर्ड का उपयोग करती हैं।

यह MicroPython कोड की पठनीयता में सहायता करता है क्योंकि दृश्य संरचना सिमेंटिक संरचना को प्रतिबिंबित करती है। यह मुख्य विशेषता सरल लेकिन महत्वपूर्ण है क्योंकि दुरुपयोग किए गए इंडेंटेशन के परिणामस्वरूप गलत स्थिति के तहत कोड निष्पादन हो सकता है या दुभाषिया (कंप्यूटिंग)  से समग्र त्रुटि हो सकती है।

एक कोलन एक महत्वपूर्ण प्रतीक है जो एक शर्त कथन के अंत को इंगित करने के लिए उपयोग किया जाता है और दुभाषिया को संकेत देता है कि कथन का मूल्यांकन किया जाना चाहिए और इंडेंटेड बॉडी जो निष्पादित की जानी चाहिए। इंडेंट आकार एक टैब या 4 रिक्त स्थान के बराबर है।

संचालन
MicroPython में प्रिमिटिव और लॉजिकल ऑपरेशंस का उपयोग करके विभिन्न गणितीय ऑपरेशंस करने की क्षमता है।

पुस्तकालय
MicroPython Python के समान पुस्तकालयों के साथ Python का एक दुबला और कुशल कार्यान्वयन है। कुछ मानक पायथन पुस्तकालयों में दोनों के बीच अंतर करने के लिए नाम बदलकर माइक्रोपायथन में एक समान पुस्तकालय है। MicroPython लाइब्रेरी छोटी हैं और मेमोरी प्रबंधन को बचाने के लिए कम लोकप्रिय सुविधाओं को हटा दिया गया है या संशोधित कर दिया गया है।

MicroPython में तीन प्रकार के पुस्तकालय: * एक मानक पायथन पुस्तकालय (अंतर्निहित पुस्तकालयों) से प्राप्त
 * विशिष्ट माइक्रोपायथन पुस्तकालय
 * विशिष्ट पुस्तकालय हार्डवेयर कार्यक्षमता के साथ सहायता करने के लिए

MicroPython अत्यधिक अनुकूलन योग्य और विन्यास योग्य है, जिसमें प्रत्येक बोर्ड (माइक्रोकंट्रोलर) के बीच भाषा भिन्न होती है और पुस्तकालयों की उपलब्धता भिन्न हो सकती है। एक मॉड्यूल या पूरे मॉड्यूल में कुछ कार्य और कक्षाएं अनुपलब्ध या परिवर्तित हो सकती हैं।

कस्टम माइक्रोपायथन पुस्तकालय
जब डेवलपर्स एक नया एप्लिकेशन बनाना शुरू करते हैं, तो मानक माइक्रोपायथन लाइब्रेरी और ड्राइवर अपर्याप्त संचालन या गणना के साथ आवश्यकताओं को पूरा नहीं कर सकते हैं। पायथन के समान, कस्टम पुस्तकालयों के साथ माइक्रोपायथन की कार्यक्षमता को विस्तारित करने की संभावना है जो मौजूदा पुस्तकालयों और फ़र्मवेयर की क्षमता का विस्तार करती है।

MicroPython में, .py के साथ समाप्त होने वाली फ़ाइलें अन्य लाइब्रेरी उपनामों पर वरीयता लेती हैं जो उपयोगकर्ताओं को मौजूदा पुस्तकालयों के उपयोग और कार्यान्वयन को बढ़ाने की अनुमति देती हैं।

सहायक हार्डवेयर
जैसे-जैसे माइक्रोपायथन का कार्यान्वयन और लोकप्रियता बढ़ती जा रही है, अधिक बोर्डों में माइक्रोपायथन को चलाने की क्षमता है। कई डेवलपर प्रोसेसर विशिष्ट संस्करण बना रहे हैं जिन्हें विभिन्न माइक्रोकंट्रोलर्स पर डाउनलोड किया जा सकता है। माइक्रोकंट्रोलर्स पर माइक्रोपायथन स्थापित करना अच्छी तरह से प्रलेखित और उपयोगकर्ता के अनुकूल है। MicroPython माइक्रोकंट्रोलर हार्डवेयर और एप्लिकेशन के बीच बातचीत को सरल बनाने की अनुमति देता है, एक मजबूत स्तर की जवाबदेही के साथ संसाधन विवश वातावरण में काम करते हुए कार्यक्षमता की एक सीमा तक पहुंच की अनुमति देता है।

MicroPython को चलाने के लिए दो प्रकार के बोर्ड का उपयोग किया जाता है: * MicroPython निर्मित होने पर लोड होता है, जिसका अर्थ है कि केवल MicroPython चलाया जा सकता है।
 * ऐसे बोर्ड जिनमें फर्मवेयर होता है जो माइक्रोपायथन को बोर्ड में स्थापित करने की अनुमति देता है।

निष्पादन कोड
किसी प्रोग्राम को माइक्रोपायथन बोर्ड पर ले जाने के लिए, एक फ़ाइल बनाएं और इसे निष्पादित करने के लिए माइक्रोकंट्रोलर पर कॉपी करें। डिवाइस से जुड़े हार्डवेयर के साथ, जैसे कि कंप्यूटर, बोर्ड का फ्लैशड्राइव डिवाइस पर दिखाई देगा, जिससे फाइलों को फ्लैश ड्राइव में ले जाया जा सकेगा। दो मौजूदा पायथन फाइलें होंगी, boot.py और main.py जो आमतौर पर संशोधित नहीं होती हैं, main.py को संशोधित किया जा सकता है यदि आप प्रोग्राम को हर बार माइक्रोकंट्रोलर बूट करना चाहते हैं, अन्यथा, REPL का उपयोग करके प्रोग्राम चलाए जाएंगे सांत्वना देना।

पायबोर्ड
पाइबोर्ड आधिकारिक MicroPython माइक्रोकंट्रोलर बोर्ड है जो MicroPython के सॉफ़्टवेयर सुविधाओं का पूर्ण समर्थन करता है। पाइबोर्ड की हार्डवेयर सुविधाओं में शामिल हैं:


 * माइक्रोकंट्रोलर (MCU, सेंट्रल प्रोसेसिंग यूनिट, फ्लैश केवल पढ़ने के लिये मेमोरी  और  रैंडम एक्सेस मेमोरी )
 * माइक्रोयूएसबी कनेक्टर
 * माइक्रो एसडी कार्ड स्लॉट
 * आईओ पिन
 * बदलना, एलईडी, सर्वो पोर्ट, रियल टाइम क्लॉक, accelerometer

बूटिंग प्रक्रिया
पाइबोर्ड में /फ्लैश नामक एक आंतरिक ड्राइव (फाइल सिस्टम) होता है जो बोर्ड की फ्लैश मेमोरी में संग्रहीत होता है, इसके अतिरिक्त, एक MicroSD कार्ड स्लॉट में डाला जा सकता है और /एसडी के माध्यम से पहुंचा जा सकता है। जब बूट किया जाता है, तो एक पाइबोर्ड को या तो / फ्लैश या / sd से बूट करने के लिए फाइल सिस्टम का चयन करना चाहिए, वर्तमान निर्देशिका को या तो / फ्लैश या / एसडी पर सेट किया जा रहा है। डिफ़ॉल्ट रूप से, यदि कोई एसडी कार्ड डाला जाता है, तो/एसडी का उपयोग किया जाएगा, यदि नहीं,/फ्लैश का उपयोग किया जाता है। यदि आवश्यक हो, तो बूटिंग प्रक्रिया के लिए एसडी कार्ड के उपयोग को /flash/SKIPSD नामक एक खाली फ़ाइल बनाकर टाला जा सकता है, जो बोर्ड पर रहेगा और पाइबोर्ड के बूट होने पर मौजूद रहेगा और बूटिंग प्रक्रिया के लिए एसडी कार्ड को छोड़ देगा।.

बूट मोड
जब पाइबोर्ड सामान्य रूप से संचालित होता है या रीसेट बटन दबाया जाता है तो पाइबोर्ड को मानक मोड में बूट किया जाता है, जिसका अर्थ है कि boot.py फ़ाइल निष्पादित की जाती है, फिर यूएसबी कॉन्फ़िगर किया गया है और अंत में पायथन प्रोग्राम चलाया जाएगा।

जब बोर्ड बूटिंग प्रक्रिया में होता है तब उपयोगकर्ता स्विच को दबाकर मानक बूट क्रम को ओवरराइड करने की क्षमता होती है और जब आप उपयोगकर्ता स्विच को होल्ड करना जारी रखते हैं तो रीसेट दबाते हैं। पाइबोर्ड के एलईडी मोड के बीच फ़्लिक करेंगे और एक बार जब एलईडी उपयोगकर्ता द्वारा वांछित मोड में पहुंच जाएंगे, तो वे उपयोगकर्ता स्विच को जाने दे सकते हैं और बोर्ड विशिष्ट मोड में बूट हो जाएगा।

बूट मोड हैं: * मानक बूट: हरी एलईडी केवल (boot.py फिर अजगर कार्यक्रम चलाता है)
 * सुरक्षित बूट: केवल नारंगी एलईडी (बूट-अप के दौरान कोई स्क्रिप्ट नहीं चलती)
 * फाइलसिस्टम रीसेट: हरे और नारंगी एलईडी एक साथ (फैक्ट्री स्थिति में फ्लैश ड्राइव को रीसेट करता है और सुरक्षित मोड में बूट करता है)
 * फाइलसिस्टम के दूषित होने पर फिक्स के रूप में उपयोग किया जाता है

त्रुटियां

 * यदि लाल और हरे रंग की एलईडी वैकल्पिक रूप से चमकती हैं, तो पायथन स्क्रिप्ट में एक त्रुटि है, और आपको डिबगिंग के लिए आरईपीएल का उपयोग करना चाहिए।
 * यदि सभी 4 एलईडी चालू और बंद हो जाते हैं तो एक कठिन दोष है जिसे ठीक नहीं किया जा सकता है और इसके लिए हार्ड रीसेट की आवश्यकता होती है।

प्रोग्रामिंग उदाहरण
हैलो वर्ल्ड! कार्यक्रम कार्यक्रम: आयात करना + एक एलईडी चालू करना: <वाक्यविन्यास लैंग = पायथन लाइन = 1> पीआईबी आयात करें


 * 1) एलईडी चालू करें

पीआईबी.एलईडी (1) .ऑन 

फ़ाइल + लूप पढ़ना: <वाक्यविन्यास लैंग = पायथन लाइन = 1 प्रारंभ = 1> आयात ओएस


 * 1) फ़ाइल खोलें और पढ़ें

f के रूप में खुले ('/ readme.txt') के साथ: प्रिंट (f.read ) 

बाईटकोड
MicroPython में एक क्रॉस कंपाइलर शामिल है जो MicroPython bytecode (फ़ाइल एक्सटेंशन .mpy) उत्पन्न करता है। पायथन कोड को या तो सीधे माइक्रोकंट्रोलर पर बायटेकोड में संकलित किया जा सकता है या इसे कहीं और प्रीकंपाइल किया जा सकता है।

MicroPython फर्मवेयर को कंपाइलर के बिना बनाया जा सकता है, केवल आभासी मशीन  को छोड़कर जो प्री-कम्पाइल्ड mpy प्रोग्राम चला सकता है।

कार्यान्वयन और उपयोग
MicroPython का उपयोग मानक सॉफ़्टवेयर द्वारा फ्लैश मेमोरी में एक विशेष माइक्रोकंट्रोलर पर लोड किए जा रहे फ़र्मवेयर के माध्यम से किया जाता है, जो एक सीरियल इंटरफ़ेस का अनुकरण करने वाले कंप्यूटर पर लोड किए गए टर्मिनल एप्लिकेशन का उपयोग करके संचार करता है।

MicroPython के मुख्य उपयोगों को 3 श्रेणियों में सामान्यीकृत किया जा सकता है: * शैक्षिक उद्देश्य: एक माइक्रोकंट्रोलर के साथ बातचीत करने के लिए माइक्रोपायथन के रीड-इवल-प्रिंट लूप (आरईपीएल) का उपयोग करके, अधिक जटिल प्रोग्रामिंग भाषाओं की तुलना में डेटा प्रोसेसिंग की अवधारणाओं और बोर्डों के साथ संचार को सरल तरीके से समझाना संभव है।
 * डिवाइस और सेंसर डिज़ाइन का विकास और परीक्षण: MicroPython परिधीय संचार सेटअप और नियंत्रण को लागू करने के एक सामान्य डेवलपर के कार्य को हल करने वाले माइक्रोकंट्रोलर्स में उपयोग किए जाने वाले इंटरफेस के सत्यापित, बग-मुक्त और पूरी तरह से परीक्षण किए गए संदर्भ कार्यान्वयन की पेशकश करता है। MicroPython डिवाइस रजिस्टरों के लिए प्रत्यक्ष और इंटरैक्टिव पहुंच प्रदान करता है जो डिवाइस से डेटा को नियंत्रित करने और प्राप्त करने के लिए कार्यक्षमता को सत्यापित करना और हार्डवेयर भागों और उपकरणों और एल्गोरिदम को विकसित करना और परीक्षण करना आसान बनाता है।
 * जटिल अनुप्रयोगों के डिजाइन के लिए निगरानी और विन्यास उपकरण: कुछ अनुप्रयोगों के लिए उच्च प्रदर्शन वाले माइक्रोकंट्रोलर्स पर विशिष्ट अनुप्रयोगों की आवश्यकता होती है। MicroPython राज्य की निगरानी और सिस्टम मापदंडों के सेट-अप में सहायता करने में सक्षम है।

MicroPython का कार्यान्वयन मानक और सहायक पुस्तकालयों की उपलब्धता और माइक्रोकंट्रोलर की फ्लैश मेमोरी और RAM आकार के आधार पर भिन्न हो सकता है।

बाहरी संबंध

 * GOTO 2016 • MicroPython & the Internet of Things • Damien George on YouTube
 * • Tutorials by Tony DiCola / Adafruit
 * GOTO 2016 • MicroPython & the Internet of Things • Damien George on YouTube
 * • Tutorials by Tony DiCola / Adafruit