Esta é uma continuação do meu primeiro artigo sobre o Redmond Smart Cap . Neste artigo, falaremos sobre outro dispositivo Redmond - soquete inteligente REDMOND SkyPort 100S. Este dispositivo também é baseado no chip nRF51822 e , como dizem aqui, o próprio Deus ordenou uma tentativa. Portanto, este soquete foi comprado. O gabinete é desmontado tão facilmente quanto a base, o acesso à porta de programação é ainda mais conveniente. Mas, olhando para o futuro, direi que tudo é um pouco mais complicado do que me pareceu a princípio. Eu não toquei o circuito desta tomada, porque Já existem várias revisões sobre a atualização e modificação desses pontos de venda.

Em uma das revisões, encontrei um circuito, e isso foi limitado. A partir do diagrama, fica claro que apenas 4 pinos no módulo nRF51822 estão envolvidos da mesma maneira que na base inteligente. O dispositivo possui um botão de relógio conectado ao pino p0.00, dois LEDs, vermelho está conectado ao pino p0.01, verde está conectado ao pino p0.02. Um relé eletromagnético em 10A é conectado ao pino p0.03. Portanto, inicie o IDE do Arduino e comece a lançar uma instância:
#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 você pode ver, o código é pequeno e bastante simples, obrigado pela comunidade Mysensors.
Quando o código foi concluído, conectei o programador ao dispositivo e atualizei-o novamente. Conectar o programador à tomada é muito simples. No meu caso, peguei dois resistores de saída comuns, mordi o fio com cortadores de fio, fiz ganchos com o fio, o torci, inseri esses ganchos nos fios do programador e “enganchei” na tomada, o vídeo mostra como faço isso É hora de testar o que aconteceu. Inseri um soquete inteligente em um soquete :), abri o Majordomo , está tudo bem, o soquete já estava presente na rede Maysensors. Eu envio o primeiro comando para ligar e ... reiniciar :) ... volta inesperada. A primeira coisa que veio à mente foi uma queda de energia enquanto o relé estava ligado. Ele mudou o programa, removeu a inclusão do LED quando o relé é ligado, a fim de reduzir o consumo. E funcionou, o soquete parou de reiniciar quando o relé foi desligado ... Mas não por muito tempo :). E assim ficou claro que o módulo não possuía energia. O circuito da fonte de alimentação sem transformador é projetado para que seja suficiente apenas para trabalhar no modo BLE. Os Mysensors também usam um modo diferente do módulo de rádio de 2,4 GHz (compatibilidade com RF24 - ANT). Portanto, temos um déficit de cerca de 10mA. Tendo discutido o problema em nosso bate-papo, os Mysensors decidiram adicionar um capacitor de lastro, já que esta é uma manipulação muito simples, necessária para a repetição. Aqui está o que aconteceu:


Remontando a tomada, ele começou a testar um pouco animado. O desenvolvimento foi agora excelente. Reescrevi a lógica do programa novamente, adicionei outro #define MY_NRF5_ESB_PA_LEVEL (NRF5_PA_MAX), ou seja, eu "cortei" o rádio na potência máxima (sim, é muito simples com os Mysensors ). ... Funciona. Sem erros. Não há reinicializações. Esta é uma vitória :)

Mas este fabricante também possui outros dispositivos no nRF51822 - um sensor de fumaça, um sensor de movimento, um sensor de gás, conversores de calor, ventiladores, umidificadores, limpadores, chaleiras ...;)
Um bate-papo por telegrama da nossa comunidade, onde eles sempre ajudarão a instalar bibliotecas, suporte a placas, explicar como em meia hora montar uma rede de sensores em arduins sem dor de cabeça - https://t.me/mysensors_rus