في هذا الاستعراض ، سنتحدث عن القاعدة الذكية لعلامة REDMOND - SkySocket 202S. لفتت مقالة حول دارة هذا socle إلى عيني ، بعد أن لاحظت أن الدماغ من هذا الجهاز هو شريحة من شركة Nordic Semiconductor 51 series (nRF51822).
وهوايتي الرئيسية في هذه اللحظة هي بناء منزل ذكي. أقوم ببطء بإنشاء شبكة راديو من الأجهزة التي تستخدم بروتوكول MySensors. إذا كان بإيجاز حول هذا البروتوكول ، فربما يمكننا القول أن هذا بروتوكول بسيط ومريح للغاية حيث يمكنك خلال ساعة واحدة في Ardunno IDE تجميع جهازين من وحدات arduino وإطلاق أول شبكة لمستشعرات الراديو. لقد صنعت مؤخرًا أجهزة لشبكة MySensors على وحدات الراديو nRF51822 و nRF52832 ، وهذا هو السبب في أنني لاحظت هذه القاعدة.


بعد شرائه في متجر على الإنترنت (مقابل القليل من المال في منطقة 700 روبل) وبعد فحصه ، رأيت أن هناك 4 جهات اتصال للبرمجة يتم عرضها بشكل مريح على السبورة. من دون تفكير مرتين ، أخرجت مبرمجي الصيني ST-LINK ومتعدده وأخذت الأسلاك من اللوحة لتخطيط مخطط الجهاز. أثناء عملية رسم مخطط الجهاز ، أصبح من الواضح أنه لا يتم استخدام سوى 4 دبابيس على الوحدة النمطية ، وزر على دبوس p0.27 ، وحافلة على دبوس p0.26 ، وترحيل ثلاثي في دبوس p0.16 ودائرة كاشف صفرية على دبوس p0.00. لمدة 20 دقيقة ، قمت برسم البرنامج في Arduino IDE (كان الأمر بسيطًا وسريعًا للكتابة مع MySensors أعلاه) ، وقمت بتوصيل مبرمج ST-LINK ، ومن ثم ، قام بجمع وتنزيل البرنامج وتوقف عن الوميض وتحول إلى اللون الأخضر ، مما يعني أنه تم تحميل البرنامج الثابت. على الفور ، فتحت المتصفح ، وفتحت Majordomo ، في وحدة MySensors ، تم بالفعل عرض جهاز جديد على الشبكة - REDMOND nRF51 1.0. يبقى فقط لإنشاء كائنات ، وجعل الأزرار ، وهو ما قمت به على الفور. لذلك ، بعد ساعة ونصف ، كنت أسيطر بالفعل على المصباح الكهربائي في هذه القاعدة وفقًا لبروتوكول MySensors.

تقوم Telegram بالدردشة مع مجتمع mysensors الخاص بنا ، حيث سيقول الجميع ويساعدهم - https://t.me/mysensors_rus
كود اردوينو (يبدو أن الإضاءة الخلفية غير مدعومة):
#define BUTTON_PIN 27 #define BIZZER_PIN 26 #define ZERO_CROSS_PIN 0 #define RELAY_PIN 16 boolean iswitch = 1; boolean flag_button = 0; static uint32_t previousMillis; //#define MY_DEBUG #define MY_DISABLED_SERIAL #define MY_RADIO_NRF5_ESB //#define MY_PASSIVE_NODE #define MY_NODE_ID 200 #define MY_PARENT_NODE_ID 0 #define MY_PARENT_NODE_IS_STATIC //#define MY_TRANSPORT_UPLINK_CHECK_DISABLED #define MY_REPEATER_FEATURE #define RELAY_ID 1 #include <MySensors.h> MyMessage lMsg(RELAY_ID, V_STATUS); void preHwInit() { pinMode(BUTTON_PIN, INPUT_PULLUP); pinMode(BIZZER_PIN, OUTPUT); pinMode(ZERO_CROSS_PIN, INPUT); pinMode(RELAY_PIN, OUTPUT); } void before() { //delay(2000); while (digitalRead(ZERO_CROSS_PIN) != 0) { //digitalWrite(RELAY_PIN, iswitch); //wait(200); } digitalWrite(RELAY_PIN, iswitch); } void presentation() { sendSketchInfo("REDMOND nRF51", "1.0"); wait(100); present(RELAY_ID, S_BINARY, "LIGHT SWITCH"); } void setup() { myTone(800, 50); delay(70); myTone(1500, 150); delay(30); wait(500); send(lMsg.set(iswitch)); wait(100); } void loop() { if (digitalRead(BUTTON_PIN) == LOW && flag_button == 0) { flag_button = 1; previousMillis = millis(); wait(20); myTone(800, 50); delay(100); //myTone(1500, 200); //delay(30); } if (digitalRead(BUTTON_PIN) == LOW && flag_button == 1) { } if (digitalRead(BUTTON_PIN) == HIGH && flag_button == 1) { if ((millis() - previousMillis > 0) && (millis() - previousMillis <= 3000)) { flag_button = 0; myTone(800, 50); delay(70); myTone(1500, 150); delay(30); iswitch = !iswitch; while (digitalRead(ZERO_CROSS_PIN) != 0) { //iswitch = !iswitch; } digitalWrite(RELAY_PIN, iswitch); myTone(1500, 150); delay(30); wait(100); send(lMsg.set(iswitch)); wait(300); } if (millis() - previousMillis > 3000) { flag_button = 0; wait(100); } } } 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 { // iswitch = !iswitch; while (digitalRead(ZERO_CROSS_PIN) != 0) { //iswitch = !iswitch; } digitalWrite(RELAY_PIN, iswitch); wait(200); myTone(800, 50); delay(70); myTone(1500, 150); delay(30); wait(100); send(lMsg.set(iswitch)); wait(1000); } } if (mGetCommand(message) == 2) { } } } /* if (message.isAck()) { (message.sensor == LIGHT_SENS_ID) { } (message.sensor == TEMP_INT_ID) { } } */ } void myTone(uint32_t j, uint32_t k) { j = 500000 / j; k += millis(); while (k > millis()) { digitalWrite(BIZZER_PIN, HIGH); delayMicroseconds(j); digitalWrite(BIZZER_PIN, LOW ); delayMicroseconds(j); } } void playSound() { }
استمرار - مأخذ الذكية REDMOND