المؤلف: Nikolay Khabarov ، كبير مطور مضمن ، DataArtفي هذه المقالة سنخبرك بكيفية إنشاء جهازك الخاص بواجهة ويب في شبكتك المنزلية باستخدام أحدث إصدار 0.5 من البرامج الثابتة DeviceHive لشريحة ESP8266. ولكن بالنسبة للمبتدئين ، فلنلق نظرة على الجديد في البرنامج الثابت نفسه: ترتبط الابتكارات الرئيسية بالقدرة على العمل دون اتصال بالإنترنت على شبكة محلية.
المقالات السابقة في السلسلة:• إنترنت الأشياء مقابل بنس واحد ، أو ما يستطيع DeviceHive.
• إنترنت الأشياء مقابل بنس واحد: دليل عملي. الجزء 1 ، الأجهزة.
• تكوين لاسلكي ESP8266 في البرامج الثابتة DeviceHive v 0.3.
• إنترنت الأشياء مقابل بنس واحد: دليل عملي. الجزء 2 ، البرمجيات.
أخبار رائعة - قمنا بتحديث البرامج الثابتة DeviceHive لـ ESP8266 إلى الإصدار 0.5. بالنسبة لأولئك الذين نسوا أو لم يعرفوا على الإطلاق ، أذكرك أن هذا البرنامج الثابت هو تنفيذ للاتصال بخادم DeviceHive داخل شريحة ESP8266. تسمح ميزات البرامج الثابتة الجديدة للرقاقة بالعمل على الشبكة المحلية كجهاز طرفي بواجهة الويب الخاصة بها. في الوقت نفسه ، لا تحتاج إلى استخدام الخادم حتى لاستضافة صفحة ويب ، على الرغم من أنه تم حفظ جميع وظائف الاتصال بخادم بعيد ويمكن استخدامها جنبًا إلى جنب مع حل محلي.قم بتنزيل أحدث البرامج الثابتة ، كما هو الحال دائمًا ، على GitHub . يمكنك أيضًا العثور على الرموز المصدر للبرنامج الثابت هناك .لذا ، ما الجديد معنا.1. API RESTful المحلي
الآن على كل شريحة على المنفذ 80 يوجد خادم HTTP بسيط مع واجهة برمجة تطبيقات RESTful. تكرر الأوامر تمامًا أوامر السحابة باستثناء القدرة على استخدام المقاطعات. يمكن العثور على قائمة كاملة بالأوامر في هذا المستند . على سبيل المثال ، إذا كنت تريد معرفة حالة جميع دبابيس الدائرة المصغرة ، فأنت بحاجة إلى استخدام الأمر "gpio / read". في حالة السحابة ، قمنا ببساطة بإرسال هذا الأمر إلى الخادم ، والآن يمكننا ببساطة الوصول إلى RESTful API المحلية على العنوان "http: //device-id.local/api/gpio/read" وفي المقابل نحصل على JSON يحتوي على حالة جميع الاستنتاجات . إذا لم يتم تعيين مفتاح الوصول (AccessKey) على الشريحة ، فيمكن القيام بذلك حتى من المتصفح:
أو باستخدام أداة curl.curl -i -X POST \
-H "Authorization: Bearer YourAccessKeyHere=" \
http:
إذا كان هناك مفتاح مرور ، فيجب إرساله في رأس HTTP. يتم استخدام المفتاح لكل من التفويض على خادم سحابي وللعمل المحلي. للاستخدام المحلي ، يجب التعامل مع المفتاح كسلسلة بسيطة ، أي كلمة مرور. يمكن أن تكون الطريقة إما GET أو POST - وهذا لا يؤثر على وظيفة الأوامر. يتم إرسال الأمر في عنوان الطلب ، والمعلمات ، إن وجدت ، في نص الطلب في شكل JSON.2.mDNS
ربما لاحظت أن المثال أعلاه يستخدم اسم المجال esp-demo.local. تقوم الشريحة الآن بتنفيذ نظام اسم المجال المتعدد البث ، ويمكن لجميع الأجهزة التي تدعم mDNS داخل الشبكة المحلية حل أسماء النطاق إلى عناوين IP. علاوة على ذلك ، من الممكن الكشف عن جميع الأجهزة داخل الشبكة ، ولا يلزم وجود خادم DNS محلي.يعمل mDNS عبر بروتوكول يكرر DNS الكلاسيكي ، ولكن يتم إرسال الطلبات عبر UDP إلى عنوان البث. تستمع الأجهزة إلى نفس عنوان البث وتستجيب للطلبات نفسها. يتم استخدام معرّف الجهاز للجهاز (الذي تم تكوينه أثناء إعداد البرنامج الثابت) كاسم المجال. سيبدو اسم المجال المؤهل بالكامل مثل DeviceId.local.يوجد RFC6763وصف الإجراء لاكتشاف الخدمات ، بما في ذلك داخل mDNS. يمكن استخدام هذا للكشف عن الرقائق باستخدام برنامجنا الثابت. هناك العديد من الأدوات المساعدة والمكتبات التي تقوم بتنفيذ اكتشاف الخدمة باستخدام mDNS. على سبيل المثال ، ستبدو الشريحة مع DeviceId 'esp-demo' التي تم اكتشافها بواسطة الأداة المساعدة 'avahi-discovery' على النحو التالي: يمكن
لبعض أنظمة التشغيل الحديثة حل أسماء النطاقات هذه من أي تطبيق ، على سبيل المثال ، من متصفح. سيحتاج البعض لتثبيت برامج متخصصة.3. دعم أجهزة الاستشعار الشعبية
في السابق ، للعمل مع المستشعرات ، كان من الضروري تنفيذ بروتوكول اتصال للمستشعر نفسه. تتضمن قائمة الأوامر الآن دعمًا لقراءة البيانات من أجهزة الاستشعار الشائعة باستخدام أمر واحد. على سبيل المثال ، للحصول على درجة الحرارة من مستشعر DS18B20 ، تحتاج إلى تهيئة إجراء قياس درجة الحرارة ، والانتظار حتى انتهاء القياس ، وقراءة النتيجة. وهذا أبعد ما يكون عن أصعب الإجراءات الممكنة. الآن ، من أجل معرفة درجة الحرارة من المستشعر ، ما عليك سوى إرسال الأمر "devices / ds18b20 / read" والحصول على JSON من النموذج "{" temperature ": 24.5000} كرد. راجع قائمة الأوامر للحصول على قائمة كاملة بأجهزة الاستشعار المدعومة .مثال على إخراج البيانات من MPU-6050 (مقياس التسارع ، الجيروسكوب ، بالإضافة إلى وجود مستشعر درجة حرارة على الشريحة):
4. خادم الويب المحلي
نظرًا لأن لدينا واجهة برمجة تطبيقات RESTful على خادم HTTP ، فلماذا لا نعطيها صفحات الويب فقط. وبطبيعة الحال ، يعرف كيف. بعد تثبيت البرنامج الثابت على الشريحة ، افتح المتصفح في "http: //deviceid.local/" وسترى واجهة الويب للشريحة. بشكل افتراضي ، يحتوي على القليل من المساعدة في استخدام البرامج الثابتة ، وأدوات للعمل مع RESTful API المحلي (صفحة يمكنك من خلالها محاولة استدعاء أوامر مختلفة ومحول base64) ، والعديد من الأمثلة لصفحات الويب باستخدام RESTful API (يمكنك رؤية رموز المصدر للصفحات مباشرة من المتصفح) وحتى الآن محرر بسيط للغاية ولكنه محرر نصوص لصفحة ويب. باستخدام هذا المحرر ، يمكنك تغيير الصفحة الرئيسية للرقاقة إلى أي رمز خاص بك مباشرة من المتصفح. يقتصر حجم الصفحة على 64 كيلوبايت.يمكنك وضع صفحة على الشريحة مثل الأمثلة المضمنة ، والتي ستنفذ أي عمليات باستخدام الشريحة على JavaScript وعرضها للمستخدم في متصفح الويب. علاوة على ذلك ، لا أحد يمنع من نفس الصفحة الوصول إلى جميع الرقائق داخل الشبكة المحلية.
جزء عملي
لنقم الآن بتوصيل مستشعر درجة الحرارة DS18B20 وتجهيزه بواجهة ويب. يجب تشغيل المستشعر من دبابيس GND و 3 V3 ومتصل ببعض دبوس GPIO. بجوار دبابيس الطاقة GPIO2 ، دعنا نستخدمها. يمكن إجراء الاتصال على النحو التالي:
في الصورة ، أحد الخيارات الأكثر شيوعًا لتنفيذ لوحة المطور لـ ESP8266 ، والتي تتضمن على الفور مزود طاقة microUSB ، ومحول USB-TTL. إنه مريح للغاية. باستخدام مثل هذه اللوحة ، لا تحتاج حتى إلى طرح أي استنتاجات أثناء البرامج الثابتة ، فإن أحدث إصدار من المتعري البرامج الثابتة سيفعل كل شيء بنفسه. فقط قم بتوصيل Micro-USB وقم بتشغيل الأداة المساعدة. لاحظ أن تكلفة البيع بالتجزئة لهذه اللوحات للمطورين في طوابق التداول الصينية ، مع مراعاة التسليم ، انخفضت إلى 3-4 دولارات.ولكن نعود إلى واجهة الويب. تحتوي الشريحة نفسها بالفعل على صفحة ويب مع مثال على استخدام DS18B20. وهي تقع على "http: //deviceid.local/ds18b20.html". افتحها ، وأدخل مفتاح الوصول إذا لزم الأمر وانظر درجة الحرارة المقروءة من المستشعر:
يمكنك عرض شفرة المصدر للصفحة مباشرة في المتصفح. إذا لم يعجبك التصميم ، فأنت تريد عرض البيانات من عدة مستشعرات ، أو تحتاج إلى توصيل بعض المستشعرات الأخرى ، يمكنك إنشاء وتحميل صفحة الويب الخاصة بك إلى الشريحة ، كما وصفنا أعلاه.على سبيل المثال ، لنقم بإنشاء صفحة ويب بسيطة تتحكم في التتابع المتصل.سيبدو الرمز على النحو التالي.<html>
<head>
<script type="text/javascript">
function send(onOff) {
localStorage['accesskey'] = document.getElementById('accesskey').value;
var xmlhttp = new XMLHttpRequest();
xmlhttp.open('POST', "http://" + window.location.hostname + '/api/gpio/write', true);
xmlhttp.setRequestHeader("Authorization", "Bearer " + localStorage['accesskey']);
xmlhttp.onreadystatechange = function() {
if(xmlhttp.readyState == 4){
if(xmlhttp.status < 200 || xmlhttp.status > 299) {
alert('ERROR: Command return ' + xmlhttp.status + ' ' + xmlhttp.responseText, true);
}
}
}
var json = {}
json["5"] = onOff ? 1 : 0;
xmlhttp.send(JSON.stringify(json));
}
function init() {
document.getElementById('accesskey').value = localStorage['accesskey'];
}
</script>
</head>
<body onload="init()">
<label>AccesKey: </label><input type="password" id="accesskey"><br><br>
<input type="button" value="On" onclick="send(true);"> <input type="button" value="Off" onclick="send(false);">
</body>
</html>
يقوم هذا الرمز ، باستخدام localStorage ، بتخزين مفتاح الوصول إلى الشريحة بحيث لا يلزم إدخاله في كل مرة. عند الضغط على زري التشغيل / الإيقاف ، يتم استدعاء XMLHttpRequest () ، والذي يرسل طلبًا إلى RESTful API المحلي.الآن قم بتحميل هذه الصفحة على الشريحة. سنقوم بتوصيل تتابع الحالة الصلبة SSR-40DA ، والذي سنقوم من خلاله بتشغيل المحرك الكهربائي ، مدعومًا بجهد متناوب 220 فولت ، أي من المخرج. بطبيعة الحال ، بدلاً من المحرك الكهربائي ، يمكن توصيل حمولة أخرى ، مثل هذا التتابع يمكن أن يتحمل ما يصل إلى 40 أمبير. في الفيديو ، يمكنك رؤية كيفية توصيل مثل هذا التتابع وكيف يتم تشغيل المحرك الكهربائي:هذا كل شيء ، شكرا لكم جميعا على اهتمامكم. نرحب بأي نقد أو اقتراحات ، اكتب!