Basis lampu pintar REDMOND - menambah rumah pintar

Dalam ulasan ini, kita akan berbicara tentang basis pintar dari merek REDMOND - SkySocket 202S. Sebuah artikel tentang sirkuit socle ini menarik perhatian saya, setelah membaca saya perhatikan bahwa otak dari perangkat ini adalah sebuah chip dari perusahaan Nordic Semiconductor 51 series (nRF51822).


Hobi utama saya saat ini adalah membangun rumah pintar. Saya perlahan membangun jaringan radio dari perangkat menggunakan protokol MySensors. Jika secara singkat tentang protokol ini, maka mungkin kita dapat mengatakan bahwa ini adalah protokol yang sangat sederhana dan nyaman berdasarkan yang dalam satu jam di Ardunno IDE Anda dapat merakit beberapa perangkat dari modul Arduino dan meluncurkan jaringan sensor radio pertama Anda. Baru-baru ini, saya telah membuat perangkat untuk jaringan MySensors saya pada modul radio nRF51822 dan nRF52832, itulah sebabnya saya memperhatikan basis ini.




Setelah membelinya di sebuah toko online (dengan uang yang cukup banyak di wilayah 700 rubel) dan setelah memeriksanya, saya melihat bahwa 4 kontak untuk pemrograman mudah ditampilkan di papan tulis. Tanpa berpikir dua kali, saya mengeluarkan program ST-LINK dan multimeter bahasa Mandarin saya dan mengambil kabel papan untuk menguraikan diagram perangkat. Dalam proses menggambar diagram perangkat, menjadi jelas bahwa hanya 4 pin yang digunakan pada modul, tombol pada pin p0.27, bus pada pin p0.26, relay triac pada pin p0.16 dan rangkaian detektor nol pada pin p0.00. Selama 20 menit, saya membuat sketsa program di Arduino IDE (sangat sederhana dan cepat untuk menulis dengan MySensor di atas), menghubungkan programmer ST-LINK dan, lihatlah, mengkompilasi, mengunduh, programmer berhenti berkedip dan berubah menjadi hijau, yang berarti firmware dimuat. Segera saya membuka browser, membuka Majordomo, dalam modul MySensors perangkat baru di jaringan sudah ditampilkan - REDMOND nRF51 1.0. Tetap hanya untuk membuat objek, membuat tombol, yang saya lakukan segera. Jadi, setelah satu setengah jam, saya sudah mengendalikan bola lampu di pangkalan ini sesuai dengan protokol MySensors.




Telegram chat dari komunitas mysensors kami, tempat semua orang akan memberi tahu dan membantu - https://t.me/mysensors_rus


Kode Arduino (sepertinya lampu latar tidak didukung):


#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() { } 

Lanjutan - Smart socket REDMOND

Source: https://habr.com/ru/post/id450740/


All Articles