Prise intelligente REDMOND SkyPort 100S

Ceci est la suite de mon premier article sur la Redmond Smart Cap . Dans cet article, nous parlerons d'un autre appareil Redmond - Smart socket REDMOND SkyPort 100S. Cet appareil est également basé sur la puce nRF51822, et comme on dit ici, Dieu lui-même a ordonné un essai. Donc, cette prise a été achetée. Le boîtier se démonte aussi facilement que la base, l'accès au port de programmation est encore plus pratique. Mais en regardant vers l’avenir, je dirai que tout est un peu plus compliqué qu’il ne me semblait au début. Je n'ai pas sonné le circuit de cette prise, car Il y a déjà un tas de critiques sur la mise à niveau et la modification de ces prises.



Dans l'une des critiques, j'ai trouvé un circuit, et c'était limité. D'après le schéma, il est clair que seules 4 broches du module nRF51822 sont impliquées de la même manière que dans la base intelligente. L'appareil a un bouton d'horloge connecté à la broche p0.00, deux LED, le rouge est connecté à la broche p0.01, le vert est connecté à la broche p0.02. Un relais électromagnétique à 10A est connecté à la broche p0.03. Donc, démarrez l'IDE Arduino et commencez à lancer une instance:


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

Comme vous pouvez le voir, le code est petit et assez simple, merci à la communauté Mysensors.


Une fois le code terminé, j'ai connecté le programmateur à l'appareil et je l'ai reflasher. Connecter le programmateur à la prise est très simple, dans mon cas, j'ai pris deux résistances de sortie ordinaires, mordu le fil avec des coupe-fils, fait des crochets à partir du fil, plié, inséré ces crochets dans les fils du programmateur et «accroché» à la prise, la vidéo montre comment je le fais Il est temps de tester ce qui s'est passé. J'ai inséré une prise intelligente dans une prise :), ouvert le Majordomo , tout va bien, la prise était déjà présente dans le réseau Maysensors. J'envoie la première commande à allumer et ... redémarrer :) ... tour inattendu. La première chose qui m'est venue à l'esprit était une panne de courant alors que le relais était activé. Il a changé le programme, supprimé l'inclusion de la LED lorsque le relais est allumé, afin de réduire la consommation. Et cela a fonctionné, la prise a cessé de redémarrer lorsque le relais a été éteint ... Mais pas pour longtemps :). Et il est donc devenu clair que le module manquait de puissance. Le circuit de l'alimentation sans transformateur est conçu de sorte qu'il ne suffirait que de fonctionner en mode BLE. Mysensors utilise également un mode différent du module radio 2,4 GHz (compatibilité avec RF24 - ANT). Nous avons donc un déficit d'environ 10mA. Après avoir discuté du problème dans notre conversation, Mysensors s'est décidé sur la décision d'ajouter un condensateur de ballast, car il s'agit d'une manipulation très simple, ce qui est nécessaire pour la répétition. Voici ce qui s'est passé:


image


image


En remontant la prise, il a commencé à tester un peu avec enthousiasme. Le développement était maintenant excellent. J'ai réécrit la logique du programme, ajouté un autre #define MY_NRF5_ESB_PA_LEVEL (NRF5_PA_MAX), c'est-à-dire que j'ai "coupé" la radio à pleine puissance (oui, c'est très simple avec Mysensors ). ... Ça marche. Pas d'erreurs. Aucun redémarrage. C'est une victoire :)


image



Mais ce fabricant a également d'autres appareils sur le nRF51822 - un capteur de fumée, un capteur de mouvement, un capteur de gaz, des convertisseurs thermiques, des ventilateurs, des humidificateurs, des nettoyants, des bouilloires ...;)


Un chat télégramme de notre communauté, où ils aideront toujours à installer des bibliothèques, à prendre en charge les cartes, à expliquer comment en une demi-heure pour construire un réseau de capteurs sur arduino sans mal de tête - https://t.me/mysensors_rus

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


All Articles