In diesem Test werden wir über die intelligente Basis der Marke REDMOND - SkySocket 202S - sprechen. Ein Artikel über die Schaltkreise dieses Sockels fiel mir auf, nachdem ich gelesen hatte, dass das Gehirn dieses Geräts ein Chip der Firma Nordic Semiconductor 51 (nRF51822) ist.
Mein derzeitiges Haupthobby ist der Bau eines Smart Homes. Ich baue langsam ein Funknetzwerk aus Geräten auf, die das MySensors-Protokoll verwenden. Wenn wir uns kurz mit diesem Protokoll befassen, können wir vielleicht sagen, dass dies ein sehr einfaches und praktisches Protokoll ist, auf dessen Grundlage Sie in einer Stunde in der Ardunno-IDE einige Geräte aus Arduino-Modulen zusammenbauen und Ihr erstes Funksensornetzwerk starten können. Vor kurzem habe ich Geräte für mein MySensors-Netzwerk auf den Funkmodulen nRF51822 und nRF52832 hergestellt, weshalb mir diese Basis aufgefallen ist.


Nachdem ich es in einem Online-Shop gekauft hatte (für einiges Geld in der Größenordnung von 700 Rubel) und es untersucht hatte, sah ich, dass 4 Kontakte für die Programmierung bequem auf der Tafel angezeigt werden. Ohne nachzudenken, nahm ich meinen chinesischen ST-LINK-Programmierer und mein Multimeter heraus und nahm die sprichwörtliche Tafel, um das Gerätediagramm zu skizzieren. Bei der Erstellung des Gerätediagramms wurde deutlich, dass am Modul nur 4 Pins verwendet werden, eine Taste an Pin p0.27, ein Bus an Pin p0.26, ein Triac-Relais an Pin p0.16 und eine Nulldetektorschaltung an Pin p0.00. 20 Minuten lang skizzierte ich das Programm in der Arduino IDE (es war sehr einfach und schnell, mit MySensors oben zu schreiben), verband den ST-LINK-Programmierer und, siehe da, beim Kompilieren, Herunterladen hörte der Programmierer auf zu blinken und wurde grün, was bedeutet, dass die Firmware geladen wurde. Sofort öffnete ich den Browser, öffnete Majordomo, im MySensors-Modul wurde bereits ein neues Gerät im Netzwerk angezeigt - REDMOND nRF51 1.0. Es bleibt nur, Objekte zu erstellen, Schaltflächen zu erstellen, was ich sofort getan habe. Nach anderthalb Stunden habe ich die Glühbirne in dieser Basis bereits gemäß dem MySensors-Protokoll gesteuert.

Telegramm-Chat unserer Mysensor-Community, in dem jeder erzählen und helfen wird - https://t.me/mysensors_rus
Arduino-Code (anscheinend wird die Hintergrundbeleuchtung nicht unterstützt):
#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() { }
Fortsetzung - Smart Socket REDMOND