Esta es una continuación de mi primer artículo sobre Redmond Smart Cap . En este artículo, hablaremos sobre otro dispositivo Redmond: el zócalo inteligente REDMOND SkyPort 100S. Este dispositivo también se basa en el chip nRF51822, y como dicen aquí, Dios mismo ordenó probarlo. Entonces, este zócalo fue comprado. El caso se desmonta tan fácilmente como la base, el acceso al puerto de programación es aún más conveniente. Pero mirando hacia el futuro, diré que todo es un poco más complicado de lo que me pareció al principio. No toqué el circuito de esta salida, porque Ya hay muchas reseñas sobre la actualización y modificación de estos puntos de venta.

En una de las revisiones encontré un circuito, y esto era limitado. Del diagrama está claro que solo 4 pines en el módulo nRF51822 están involucrados de la misma manera que en la base inteligente. El dispositivo tiene un botón de reloj conectado al pin p0.00, dos LED, rojo está conectado al pin p0.01, verde está conectado al pin p0.02. Un relé electromagnético a 10A está conectado al pin p0.03. Entonces, inicie el IDE de Arduino y comience a lanzar una instancia:
#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) { } } } }
Como puede ver, el código es pequeño y bastante simple, gracias por eso a la comunidad Mysensors.
Cuando terminó el código, conecté el programador al dispositivo y lo actualicé. Conectar el programador al tomacorriente es muy simple, en mi caso tomé dos resistencias de salida ordinarias, corté el cable con cortadores de alambre, hice ganchos con el cable, lo doblé, inserté estos ganchos en los cables del programador y "enganché" al tomacorriente, el video muestra cómo lo hago Es hora de probar lo que pasó. Inserté un enchufe inteligente en el tomacorriente :), abrí el Majordomo , todo está bien, el tomacorriente ya estaba presente en la red Maysensors. Envío el primer comando para encender y ... reiniciar :) ... giro inesperado. Lo primero que me vino a la mente fue una reducción de potencia mientras el relé estaba activado. Cambió el programa, eliminó la inclusión del LED cuando se enciende el relé, para reducir el consumo. Y funcionó, el socket dejó de reiniciarse cuando se apagó el relé ... Pero no por mucho tiempo :). Y así quedó claro que el módulo carecía de energía. El circuito de la fuente de alimentación sin transformador está diseñado para que sea suficiente solo para funcionar en modo BLE. Mysensors también utiliza un modo diferente del módulo de radio de 2,4 GHz (compatibilidad con RF24 - ANT). Entonces tenemos un déficit de aproximadamente 10mA. Habiendo discutido el problema en nuestro chat, Mysensors se decidió por agregar un condensador de lastre, ya que esta es una manipulación muy simple, que es lo que necesita repetir. Esto es lo que sucedió:


Al volver a montar la toma de corriente, comenzó a probar un poco emocionado. El desarrollo ahora fue excelente. Reescribí la lógica del programa, agregué otro #define MY_NRF5_ESB_PA_LEVEL (NRF5_PA_MAX), es decir, "corté" la radio a plena potencia (sí, es muy simple con Mysensors ) ... Funciona. Sin errores No reinicios. Esta es una victoria :)

Pero este fabricante también tiene otros dispositivos en el nRF51822: un sensor de humo, un sensor de movimiento, un sensor de gas, convertidores térmicos, ventiladores, humidificadores, limpiadores, calderas ...;)
Un chat de telegramas de nuestra comunidad, donde siempre ayudarán a instalar bibliotecas, soporte para tableros, explicar cómo en media hora construir una red de sensores en arduins sin dolor de cabeza - https://t.me/mysensors_rus