Base de lámpara inteligente REDMOND - agregue a la casa inteligente

En esta revisión, hablaremos sobre la base inteligente de la marca REDMOND: SkySocket 202S. Un artículo sobre los circuitos de este zócalo me llamó la atención, después de leer me di cuenta de que el cerebro de este dispositivo es un chip de la compañía Nordic Semiconductor 51 series (nRF51822).


Mi hobby principal en este momento es construir una casa inteligente. Lentamente estoy construyendo una red de radio desde dispositivos que usan el protocolo MySensors. Si se trata brevemente de este protocolo, entonces quizás podamos decir que este es un protocolo muy simple y conveniente basado en el que en una hora en el IDE de Ardunno puede ensamblar un par de dispositivos a partir de módulos arduino y lanzar su primera red de sensores de radio. Recientemente, he estado haciendo dispositivos para mi red MySensors en los módulos de radio nRF51822 y nRF52832, por lo que noté esta base.




Después de haberlo comprado en una tienda en línea (por bastante dinero en la región de 700 rublos) y haberlo examinado, vi que 4 contactos para la programación se muestran convenientemente en el tablero. Sin pensarlo dos veces, saqué mi programador y multímetro chino ST-LINK y tomé el cableado de la placa para delinear el diagrama del dispositivo. En el proceso de elaboración del diagrama del dispositivo, quedó claro que solo se usan 4 pines en el módulo, un botón en el pin p0.27, un bus en el pin p0.26, un relé triac en el pin p0.16 y un circuito detector de cero en el pin p0.00. Durante 20 minutos, bosquejé el programa en el IDE de Arduino (fue muy simple y rápido escribir con MySensors arriba), conecté el programador ST-LINK y, he aquí, compilación, carga, el programador dejó de parpadear y se volvió verde, lo que significa que el firmware se cargó. Inmediatamente abrí el navegador, abrí Majordomo, en el módulo MySensors ya se mostraba un nuevo dispositivo en la red: REDMOND nRF51 1.0. Solo queda crear objetos, hacer botones, lo que hice inmediatamente. Entonces, después de una hora y media, ya controlé la bombilla en esta base de acuerdo con el protocolo MySensors.




Telegram chat de nuestra comunidad de mysensors, donde todos contarán y ayudarán: https://t.me/mysensors_rus


Código Arduino (parece que la luz de fondo no es compatible):


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

Continuación - Smart socket REDMOND

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


All Articles