这是我对Redmond Smart Cap的第一篇文章的延续。 在本文中,我们将讨论另一个Redmond设备-智能插座REDMOND SkyPort 100S。 该设备也基于nRF51822芯片,正如他们在这里所说,上帝亲自下令尝试。 因此,该插座已购买。 外壳和底座一样容易拆卸,访问编程端口更加方便。 但是展望未来,我会说一切都比起初看起来要复杂一些。 我没有在此插座的电路上打铃,因为 关于升级和修改这些网点已经有很多评论 。

在其中一篇评论中,我发现了一条电路,而且电路很有限。 从图中可以清楚地看出,nRF51822模块上的4个引脚与智能基座中的引脚相同。 设备的时钟按钮连接到引脚p0.00,两个LED,红色连接到引脚p0.01,绿色连接到引脚p0.02。 10A的电磁继电器连接到引脚p0.03。 因此,启动Arduino IDE并开始抛出一个实例:
#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) { } } } }
如您所见,该代码很小而且非常简单,这要感谢Mysensors社区。
代码完成后,我将编程器连接到设备并刷新了设备。 将编程器连接到插座非常简单,以我为例,我拿了两个普通的输出电阻,用剪线钳将导线从导线上切下,从导线上制成钩子,将其弯曲,将这些钩子插入编程器导线中,然后“钩住”到插座,视频显示了我的操作方法。现在该测试发生了什么。 我将智能插座插入插座:),打开Majordomo ,一切都很好,该插座已经存在于Maysensors网络上。 我发送第一个命令以打开并重新启动:) ...意外的转弯。 首先想到的是继电器打开时的功耗下降。 他更改了程序,并在继电器打开时删除了LED灯,以减少消耗。 并且它起作用了,当继电器关闭时,套接字停止了重新启动。。。 因此,很明显该模块没有电源。 设计无变压器电源的电路,使其仅在BLE模式下工作就足够了。 Mysensors还使用另一种模式的2.4 GHz无线电模块(与RF24-ANT兼容)。 因此我们有大约10mA的亏空。 在我们的聊天中讨论了问题之后,Mysensors决定添加镇流电容器,因为这是非常简单的操作,因此需要重复进行。 这是发生了什么:


重新组装插座后,他开始兴奋地进行测试。 现在的发展非常出色。 我重新编写了程序的逻辑,添加了另一个#define MY_NRF5_ESB_PA_LEVEL(NRF5_PA_MAX),即我以最大功率“切断”了收音机(是的,使用Mysensors非常简单)。 没错 没有重启。 这是一个胜利:)

但是该制造商在nRF51822上还有其他设备-烟雾传感器,运动传感器,气体传感器,热转换器,风扇,加湿器,清洁剂,水壶...;)
我们社区的电报聊天,他们将始终在其中帮助安装库,支持开发板,并说明如何在半小时内在头戴式耳机上组装传感器网络而不会感到头疼-https://t.me/mysensors_rus