在这篇评论中,我们将讨论REDMOND品牌的智能基础-SkySocket 202S。 一篇有关该脚底电路的文章引起了我的注意,阅读后我发现该设备的大脑是Nordic Semiconductor 51系列公司(nRF51822)的芯片。
目前,我的主要爱好是构建智能家居。 我正在缓慢地使用MySensors协议从设备构建无线电网络。 如果简要介绍一下该协议,那么我们可以说这是一个非常简单便捷的协议,基于该协议,您可以在Ardunno IDE中在一小时内从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。 剩下的只是创建对象,创建按钮,而我立即做到了。 因此,一个半小时后,我已经根据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