هذا استمرار لمقالتي الأولى عن Redmond Smart Cap . في هذه المقالة ، سنتحدث عن جهاز Redmond آخر - Smart socket REDMOND SkyPort 100S. يعتمد هذا الجهاز أيضًا على شريحة nRF51822 ، وكما يقولون هنا ، فقد أمر الله بنفسه بإجراء تجربة. لذلك ، تم شراء هذا المقبس. يتم تفكيك القضية بسهولة مثل القاعدة ، والوصول إلى منفذ البرمجة هو أكثر ملاءمة. لكن بالنظر إلى المستقبل ، أقول إن كل شيء أكثر تعقيدًا مما بدا لي في البداية. أنا لم أرن دائرة هذا المنفذ ، لأنه هناك بالفعل مجموعة من المراجعات حول ترقية هذه المنافذ وتعديلها.

في واحدة من الاستعراضات وجدت الدائرة ، وكان هذا محدودا. من الرسم التخطيطي ، من الواضح أن 4 دبابيس فقط على وحدة nRF51822 متورطة بنفس الطريقة في القاعدة الذكية. يحتوي الجهاز على زر ساعة متصل بدبوس p0.00 ، مصباحان ، أحمر متصل بدبوس p0.01 ، الأخضر متصل بدبوس p0.02. يتم توصيل التتابع الكهرومغناطيسي في 10A إلى دبوس p0.03. لذا ، ابدأ في Arduino IDE وابدأ في رمي مثيل:
#define BUTTON_PIN 0 #define RED_LED_PIN 1 #define GREEN_LED_PIN 2 #define RELAY_PIN 3 boolean iswitch = 0; boolean flag_button = 0; static uint32_t previousMillis; //#define MY_DEBUG #define MY_DISABLED_SERIAL #define MY_RADIO_NRF5_ESB //#define MY_NRF5_ESB_PA_LEVEL (NRF5_PA_LOW) #define MY_NRF5_ESB_PA_LEVEL (NRF5_PA_MAX) //#define MY_PASSIVE_NODE #define MY_NODE_ID 201 #define MY_PARENT_NODE_ID 0 #define MY_PARENT_NODE_IS_STATIC #define MY_TRANSPORT_UPLINK_CHECK_DISABLED #define RELAY_ID 1 #include <MySensors.h> MyMessage lMsg(RELAY_ID, V_STATUS); void preHwInit() { pinMode(BUTTON_PIN, INPUT_PULLUP); pinMode(RED_LED_PIN, OUTPUT); pinMode(GREEN_LED_PIN, OUTPUT); pinMode(RELAY_PIN, OUTPUT); } void before() { digitalWrite(RED_LED_PIN, HIGH); } void presentation() { sendSketchInfo("REDMOND R nRF51", "1.0"); wait(300); present(RELAY_ID, S_BINARY, "RELAY SWITCH"); wait(300); } void setup() { digitalWrite(RED_LED_PIN, LOW); wait(300); digitalWrite(GREEN_LED_PIN, HIGH); wait(200); digitalWrite(GREEN_LED_PIN, LOW); wait(200); digitalWrite(GREEN_LED_PIN, HIGH); wait(200); digitalWrite(GREEN_LED_PIN, LOW); wait(200); digitalWrite(GREEN_LED_PIN, HIGH); wait(200); digitalWrite(GREEN_LED_PIN, LOW); wait(500); send(lMsg.set(iswitch)); wait(500); } void loop() { if (digitalRead(BUTTON_PIN) == LOW && flag_button == 0) { flag_button = 1; previousMillis = millis(); wait(20); } if (digitalRead(BUTTON_PIN) == LOW && flag_button == 1) { // , } if (digitalRead(BUTTON_PIN) == HIGH && flag_button == 1) { if ((millis() - previousMillis > 0) && (millis() - previousMillis <= 3000)) { if (iswitch == 0) { digitalWrite(GREEN_LED_PIN, HIGH); wait(10); } else if (iswitch == 1) { digitalWrite(GREEN_LED_PIN, LOW); wait(10); } flag_button = 0; iswitch = !iswitch; digitalWrite(RELAY_PIN, iswitch); wait(1500); send(lMsg.set(iswitch)); } if (millis() - previousMillis > 3000) { flag_button = 0; } } } void receive(const MyMessage & message) { if (message.type == V_STATUS) { if (message.sensor == RELAY_ID) { if (mGetCommand(message) == 1) { if (message.isAck()) { //AckG = 1; } else { wait(50); if (iswitch == 0) { digitalWrite(GREEN_LED_PIN, HIGH); }else if (iswitch == 1) { digitalWrite(GREEN_LED_PIN, LOW); } iswitch = !iswitch; wait(10); digitalWrite(RELAY_PIN, iswitch); wait(1500); send(lMsg.set(iswitch)); } } if (mGetCommand(message) == 2) { } } } }
كما ترون ، الرمز صغير وبسيط إلى حد ما ، بفضل ذلك لمجتمع Mysensors.
عند الانتهاء من الكود ، قمت بتوصيل المبرمج بالجهاز وأعد تحميله. توصيل المبرمج بالمأخذ بسيط للغاية ، في حالتي ، قمت بأخذ اثنين من مقاومات الإخراج العادية ، وقم بإيقاف السلك بواسطة قاطعات السلك ، وصنع السنانير من السلك ، وثنيها ، وأدخلت هذه السنانير في أسلاك المبرمج و "مدمن مخدرات" بالمخرج ، يوضح الفيديو كيف أفعل ذلك حان الوقت لاختبار ما حدث. لقد قمت بإدخال مأخذ توصيل ذكي في المقبس :) ، فتحت Majordomo ، كل شيء على ما يرام ، كان المقبس موجود بالفعل في شبكة Maysensors. أرسل الأمر الأول لتشغيل و ... إعادة التشغيل :) ... بدوره غير متوقع. أول ما يتبادر إلى الذهن كان تخفيض القوة أثناء تشغيل التتابع. قام بتغيير البرنامج ، وإزالة إدراج LED عند تشغيل التتابع ، من أجل تقليل الاستهلاك. ونجح ، توقف المقبس إعادة التشغيل عندما تم إيقاف تشغيل التتابع ... ولكن ليس لفترة طويلة :). وهكذا أصبح من الواضح أن الوحدة تفتقر إلى الطاقة. تم تصميم دائرة وحدة تزويد الطاقة بدون محول بحيث تكون كافية للعمل فقط في وضع BLE. يستخدم Mysensors أيضًا وضعًا مختلفًا لوحدة الراديو 2.4 جيجا هرتز (التوافق مع RF24 - ANT). لذلك لدينا عجز حوالي 10ma. بعد مناقشة المشكلة في محادثتنا ، استقر Mysensors على قرار إضافة مكثف الصابورة ، نظرًا لأن هذا تلاعب بسيط جدًا ، ما هو مطلوب للتكرار. إليك ما حدث:


إعادة تجميع منفذ ، بدأ اختبار بحماس قليلا. كان التطوير ممتازًا الآن. قمت بإعادة كتابة منطق البرنامج مرة أخرى ، أضفت #define MY_NRF5_ESB_PA_LEVEL (NRF5_PA_MAX) ، وهذا يعني أنني "قطعت" الراديو بكامل طاقته (نعم ، إنه بسيط للغاية مع Mysensors ) ... ... إنه يعمل. لا أخطاء. لا إعادة تمهيد. هذا انتصار :)

لكن هذه الشركة المصنعة لديها أيضًا أجهزة أخرى على nRF51822 - حساس دخان ، حساس للحركة ، حساس للغاز ، محولات حرارية ، مراوح ، جهاز ترطيب ، منظفات ، غلايات ... ؛)
دردشة برقية لمجتمعنا ، حيث سيساعدون دائمًا على تثبيت المكتبات ودعم الألواح ، تشرح كيف يتم تجميع شبكة من المستشعرات في أروينو في نصف ساعة دون صداع - https://t.me/mysensors_rus