スマートランプベースREDMOND-スマートホームに追加

このレビューでは、REDMONDブランドのスマートベースであるSkySocket 202Sについて説明します。 この回路の回路に関する記事が目を引きましたが、読んだ後、このデバイスの脳はNordic Semiconductor 51シリーズ(nRF51822)のチップであることに気付きました。







現時点での私の主な趣味は、スマートホームの構築です。 MySensorsデバイスからゆっくりと無線ネットワークを構築しています。 このプロトコルについて簡単に説明すると、Ardunno IDEで1時間でArduinoモジュールからいくつかのデバイスを組み立て、最初の無線センサーネットワークを起動できることに基づいた、非常にシンプルで便利なプロトコルであると言えます。 最近、nRF51822およびnRF52832無線モジュールでMySensorsネットワーク用のデバイスを作成しているため、このベースに気付きました。











オンラインストアで(700ルーブル程度のかなりの金額で)購入し、調べてみると、プログラミング用の4つの連絡先がボード上に表示されていることがわかりました。 考え直さずに、中国のST-LINKプログラマーとマルチメーターを取り出し、デバイス図の概要を説明するためにボードの配線を取り上げました。 デバイス図を作成する過程で、モジュールでは4つのピン、ピンp0.27のボタン、ピンp0.26のバス、ピンp0.16のトライアックリレー、ピンp0.00のゼロ検出回路のみが使用されることが明らかになりました。 20分間、Arduino IDEでプログラムをスケッチし(上記のMySensorsを使用して書くのは非常に簡単で高速でした)、ST-LINKプログラマーを接続し、見よ、コンパイル、ダウンロード、プログラマーが点滅を停止し、ファームウェアがロードされたことを意味します。 すぐにブラウザを開き、Majordomoを開きました。MySensorsモジュールで、ネットワーク上の新しいデバイス-REDMOND nRF51 1.0がすでに表示されていました。 オブジェクトを作成し、ボタンを作成するためだけに残っていますが、すぐにそれを行いました。 そのため、1時間半後、MySensorsプロトコルに従ってこのベースの電球を既に制御しました。











私たちのmysensorsコミュニティの電報チャット。誰もが教えて助けてくれる- https://t.me/mysensors_rus







Arduinoコード(バックライトはサポートされていないようです):







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





継続-スマートソケットREDMOND








All Articles