एक छोटे से प्रोजेक्ट के लिए, मुझे एक Arduino ईथरनेट मिला और उसने इसके लिए प्रोग्राम लिखना शुरू कर दिया। परियोजना में एक आईपी नेटवर्क के दर्जनों या कई सौ समान उपकरणों को जोड़ने और समय-समय पर वेब सर्वर पर डंपिंग की जानकारी शामिल है।
परियोजना दीर्घकालिक उपयोग के लिए डिज़ाइन की गई है। डिवाइस को हार्ड-टू-पहुंच स्थानों या बर्बर प्रूफ हाउसिंग में स्थापित किया जा सकता है। सिस्टम के संचालन के दौरान, मैं प्रोग्रामर का उपयोग किए बिना सिस्टम में नए उपकरणों को बदलने या जोड़ने में सक्षम होना चाहता हूं।
यह सब देखते हुए, मैंने EEPROM या Flash में कॉन्फ़िगरेशन लिखने के बजाय, बोर्ड की शुरुआत के दौरान एक केंद्रीय स्रोत (सर्वर) से कॉन्फ़िगरेशन को स्थानांतरित करने के मुद्दे से हैरान होने का फैसला किया।
BOOTP / DHCP प्रोटोकॉल , जिसे RFC 951, 1531 और 2131 में परिभाषित किया गया है और इसे केवल नेटवर्क उपकरणों के प्रारंभिक कॉन्फ़िगरेशन को बनाने के लिए डिज़ाइन किया गया है। प्रोटोकॉल सुविधाओं में से एक अपने स्वयं के प्रकारों की परिभाषा है और ग्राहक पक्ष पर उनकी प्रसंस्करण है। मैं सिर्फ इस अवसर का उपयोग करना चाहता हूं।
Arduino ईथरनेट लाइब्रेरी में डीएचसीपी प्रोटोकॉल का कार्यान्वयन बहुत सीमित है और इसका विस्तार नहीं है। डीएचसीपी का उपयोग करना संभव है (संस्करण 1.0.3 में) केवल आईपी पता, नेटमास्क, डीएनएस सर्वर और डिफ़ॉल्ट मार्ग सेट करने के लिए।
मैंने लाइब्रेरी में
संबंधित कोड को
संशोधित किया है और अब इस कॉन्फ़िगरेशन विधि को लागू करना संभव है:
इस प्रकार, सर्वर से पैरामीटर प्राप्त करने और अपने एप्लिकेशन को कॉन्फ़िगर करने के लिए, आपको
dhcpOptionParser
फ़ंक्शन को लागू करना
dhcpOptionParser
और इसमें डीएचसीपी सर्वर से प्राप्त डेटा को पढ़ना होगा।
यह विधि किसी भी डीएचसीपी सर्वर पर लागू की जा सकती है जहां अतिरिक्त विकल्पों को परिभाषित किया जा सकता है। उदाहरण के लिए, ISC-DHCP के लिए, यह इस तरह दिखेगा (हम एक नए विकल्प को परिभाषित करते हैं xTargetWebServerAddress 128 नंबर के साथ):
option xTargetWebServerAddress code 128 = ip-address; option xTargetWebServerAddress www.habrahabr.ru;
इन मापदंडों को
dhcpd.conf
जोड़ना होगा।
एक बोनस के रूप में, मैंने अनुरोध के हिस्से के रूप में अतिरिक्त विकल्प भेजना संभव बना दिया। उदाहरण में, Arduino "MSFT 5.0" के मान के साथ विक्रेता वर्ग पहचानकर्ता विकल्प (संख्या 60) भेजेगा।
GitHub पर मुख्य Arduino कोड में परिवर्तन का इंतजार है। अब तक, आप
मेरी शाखा का उपयोग कर सकते हैं।