DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(三)一个简单MySensors客户端的验证实验

  • 一个简单MySensors客户端的验证实验
    • 一、硬件和IDE
    • 二、客户端源代码
      • 1、实验要达到的目标
      • 2、源码
    • 三、在domoticz平台上配置接入MySensors网关(即前篇介绍的DIY网关)
    • 四、使用MySensors客户端来跟domoticz通信
      • 1、给客户端设备上电
      • 2、在dototicz平台查看MySensors的网关接收到的传感器节点介绍信息
      • 3、在domoticz上添加一个MySensors设备
    • 总结

一个简单MySensors客户端的验证实验

本文在前面一篇的基础上,利用两套wifi+RF模块来进行无线通信,通过domoticz来控制。
一套作为网关(Gateway),另一套作为客户端。
本文重点在客户端的源代码编写和domoticz平台的使用。

一、硬件和IDE

本文所述客户端的硬件跟前面一片文章的网关的硬件是一模一样的,用相同的ESP8266模块和NRF24L01+模块,线路接法也一样。
请参考:
https://blog.csdn.net/sqshining/article/details/87459032#_31

IDE也是使用Arduino,跟上一篇一样,需要安装有MySensors库,请参考上一篇文章。

二、客户端源代码

1、实验要达到的目标

本次实验,是用代码模拟一个继电器的控制器设备,定时每隔10秒钟,更变到跟当前相反的状态,并随时受domoticz平台的控制。

2、源码

我们借用Arduino上的MySensors库给的样例代码,在此基础上做修改。

打开Arduino,文件–>示例 第三方库示例–>MySensors–>RelayActuator,如下图:

把它另存为一个新的工程。

在那份代码基础上修改成如下:

// Enable debug prints to serial monitor
#define MY_DEBUG// Enable and select radio type attached
#define MY_RADIO_RF24#include <MySensors.h>#define RELAY_ON 1  // 继电器吸合
#define RELAY_OFF 0 // 继电器断开#define CHILD_ID_RELAY 1 //继电器在本无线节点上的设备ID号
MyMessage msgContacteur(CHILD_ID_RELAY, V_STATUS); //发送的消息,V_STATUS代表可以发二值消息,具体可以参考MySensors官方网站对它的定义static os_timer_t relay_update_timer;//为定时更新状态定义一个系统定时器
static bool ReLayStatus = false; //记录继电器当前的状态void RF24Send_Test_Task_Run(void *)
{ReLayStatus = ReLayStatus ?false :true;send( msgContacteur.set( ReLayStatus ? "1" : "0" ) );//向网关发送消息,如果ReLayStatus为true发送“1”,否则发送“0”
}
void setup()
{Serial.begin(115200); os_timer_disarm( &relay_update_timer );//关闭定时器os_timer_setfn( &relay_update_timer, (ETSTimerFunc *) ( RF24Send_Test_Task_Run ), NULL );//为定时器设置回调函数RF24Send_Test_Task_Runos_timer_arm( &relay_update_timer, 10000, true );// 启动该定时器,定时10秒
}//发送介绍信息
void presentation()
{// Send the sketch version information to the gateway and ControllersendSketchInfo("Relay_Test", "1.0");//发送sketch版本信息和相关信息到网关。是梗概性的信息,不是必需的。present(CHILD_ID_RELAY, S_BINARY);//发送介绍性的信息到网关。这个实际上会向网关申请注册设备ID号和传感器的类型。
}void loop()
{}//接受消息,这个是在MySensors库中去调用的。定义了之后就会被调用,否则就不会调用。
void receive(const MyMessage &message)
{// We only expect one type of message from controller. But we better check anyway.if( message.sensor == CHILD_ID_RELAY )//如果消息中的ID号是我们所需匹配的CHILD_ID_RELAY{   if( message.type == V_STATUS )//消息的类型是二值类型{Serial.print("Incoming change for sensor:");Serial.print(message.sensor);Serial.print(", New status: ");ReLayStatus = message.getBool();//读取消息值,并更新记录Serial.println(ReLayStatus);}}
}

编译之后烧录到ESP8266模块中。

注意下载的时候,选对客户端的串口号!

本人的是COM12。

三、在domoticz平台上配置接入MySensors网关(即前篇介绍的DIY网关)

进入domoticz服务器主页,然后在右上角,设置–>硬件:

更改下图画圈的部分:

设置如下:

名称本人填的的是“NRF24 MySensors 网关”,这个名称是网关节点的名称,这里和下面的“Topic Prefix”设置项有关,如果“Topic Prefix”使用MyMQTT(defual)的选项,那么这里可以随便填,否则的话,这里的名字将作为MQTT消息收发的前缀使用。
类型这里,去选“MySensors Gateway with MQTT interface”,即通过MQTT协议接口的MySensors网关。
远端地址是要填你的MQTT Broker 的IP,因为我的domoticz和MQTT boker都在同一个arm开发板上,所以,就可以是用本地ip。
端口,一般默认1883,这个参数在domoticz的配置中所设定的,可以在配置中去修改修改之后,domoticz默认使用的MQTT端口都将改变。我们这里先不用改。

Topic Prefix(MQTT消息话题前缀)这个选项中,我们使用MyMQTT(默认值)。
这个是domoticz将使用"domoticz/out/MyMQTT"和"domoticz/in/MyMQTT"来发送和接收MQTT broker的消息来跟我们的网关进行通信。
这个地方和上一篇的代码修改有关系。

设置好之后,点下面的“增加”。

可以看到:

现在,给前篇DIY的那个网关上电,用串口观察消息:

可以看到MySensors网关跟domoticz已经有消息收发了。
点击domoticz上这个网关的设置:

可以看到:

点Nodes 的 ID号为0的那一个行,可以看到:

这个Node ID为0 的设备,就是网关本身的ID,也就是说网关的ID为0。
所以,我们使用MySensors开发自己的无线客户端的时候,ID号不可以为0,否则你这个无线设备就被定义成了网关。

那么网关的这个孩子ID为255的ID,实际上是用来广播消息的。
所以,我们使用MySensors开发自己的无线客户端的时候,ID号也不可以为255。
在MySensors协议中,每个设备节点,都是有这个基本的子ID。
所以,每个节点可用的子ID数目为254个

四、使用MySensors客户端来跟domoticz通信

1、给客户端设备上电

连接这个客户端的RF24模块,串口可以看到:

网关那边的信息如下:

后面我们可能会详细研究这些信息代表的含义。
暂时不去研究。

2、在dototicz平台查看MySensors的网关接收到的传感器节点介绍信息

在上面那个domoticz界面上刷新一下,也就是,设置->硬件,
然后在网关那个ID行,点“设置”,可以看到我们在代码中所发送的所谓的介绍(presentation)信息:


点进去:

3、在domoticz上添加一个MySensors设备

在domoticz界面上点 设置–>设备:

可以看到,平台已经自动搜索到这个设备了,右边有个绿色的向右箭头,这个是还没有添加到domoticz的意思,点它可以添加这个设备,添加好之后它就变成了蓝色向左的箭头,我们点击它

可以看到设备添加界面:

名称可以随便起,默认作为主设备,填好之后,下面那个“设为使用”按钮。
然后可以看到成了这样:

然后,在domoticz上,点菜单栏中的“开关”,就可以看到这个设备了:


会看到RF24继电器1会自动的亮、灭。
现在我们点击一下这个开关,看网关和客户端如何反应:

网关发了一条信息:

串口的Log是“TSF:MSG:SEND,0-0-1-1,s=1,c=1,t=2,pt=0,l=1,sg=0,ft=0,st=OK:0”
可以去这个网站解析一下这个LOG:
https://www.mysensors.org/build/parser
我们暂时不解读。

客户端串口消息如下:

客户端Log消息:
“219448 TSF:MSG:READ,0-0-1,s=1,c=1,t=2,pt=0,l=1,sg=0:0”
可以看到我们程序中设定的更新状态已经能执行了。
多点几次,可以看到:

当然除了在domoticz上手动改变继电器的状态之外,我们还在程序上定时自动更改了。
到这里,实验做完了。

总结

我们这次实验,是验证这个MySensors的库和上次DIY的网关运行过程,和domoticz平台的通信以及如何使用domoticz添加传感器设备,如何控制这个设备。

现在已经验证了这个过程。
以后,我们会用这个网关搭配其他的MySensors设备来做智能家居系统。

MySensors这个库主要是用在了Arduino这个IDE上,当然,这个库还可以用在Linux上。

我把它的设备端核心代码用C改写过了一下,这样可以用在更多的平台上,相关代码还有待改进,以后有机会再发布吧。

使用Arduino和MySensors可以快速的开发一个传感器设备出来,还是非常方便的。
当然,本次实验,用ESP8266作为CPU,有点浪费了,大材小用。
只是做实验之用。

基于Domoticz智能家居系统(十七)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(三)一个简单MySensors客户端的验证实验相关推荐

  1. 基于Domoticz智能家居系统(十四)用ESP8266做MQTT客户端实验

    基于Domoticz智能家居系统(十四)用ESP8266做MQTT客户端实验 用ESP8266做MQTT客户端 一些前期的准备 第一步 设置ESP8266开发板的BSP的搜索引擎链接 第二步 下载安装 ...

  2. 基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY

    DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY 正式DIY 一.本文参考的国外DIY项目 二.本文采用的模块和连接线路 1.ES ...

  3. 基于Domoticz智能家居系统(十三)Domoticz-3.8153在Tiny6410开发板上的移植

    Domoticz-3.8153在Tiny6410开发板上的移植 本文将在友善之臂Tiny6410开发板上移植Domoticz-3.8153,起因是去年在mini2440上移植的3.5877版本编译出来 ...

  4. android 智能家居开发,基于Android智能家居系统的设计与实现

    摘要: 近年来,移动互联网技术的进步和智能终端设备的普及促进了智能家居产业的发展.同时,伴随着Android系统在手机.平板中广泛应用,人们通过一个Android设备远程控制家电设备,将与生活密切相关 ...

  5. 基于mini2440嵌入式linux上整合一套Domoticz智能家居系统(八)使用domoticz+mosquitto+Android客户端实现控制mini2440上的LED(一)

    本篇将在上一篇交叉编译paho.mqtt.embedded-c官方的源代码例程基础上,稍作修改,尝试实现domoticz+mosquitto联合做服务器,使用Android客户端APP或浏览器对min ...

  6. 基于mini2440嵌入式linux上整合一套Domoticz智能家居系统(九)使用domoticz+mosquitto+Android客户端实现控制mini2440上的LED(二)

    为了充分利用domoticz平台的对MQTT客户端的控制功能,现在,受控设备端代码的核心任务转移到了对domoticz/out主题的MQTT消息解析上.本文将设计一个简单框架来实现对其消息的解析和功能 ...

  7. 基于单片机智能家居系统-中控面板设计

    设计思路: 单片机是现如今运用最为广泛的电子器件,不论是在我们日常生活的哪方面,都有着单片机的身影.不论是小区内的电梯,还是超市的感应门,单片机给人们带来了极大的便利.本次基于单片机的智能家居的设计主 ...

  8. 基于mini2440嵌入式linux上整合一套Domoticz智能家居系统(十)使用domoticz+mosquitto+Android客户端实现控制STM32板上的LED(一)

    本文将在前面mini2440建立的domoticz.mosquitto为服务器的基础上,以Android做远程客户端来实现对STM32芯片的开发板的LED进行灯控制,当然,这是一个基本功能的实现,如果 ...

  9. domoticz智能家居系统 MQTT 异常以及解决方法 code=14

    domoticz的MQTT需要安装MQTT 服务器( 这个是domoticz 默认不安装的,需要用的时候需要用户自己安装) 安装mosiquit 的方法是参考以下链接 https://blog.csd ...

最新文章

  1. hdu1693Eat the Trees(插头dp)
  2. 2016职业技能大赛信息安全管理与评估赛项任务书
  3. Spring Cloud Alibaba - 11 Ribbon 自定义负载均衡策略(同集群优先权重负载均衡算法)
  4. 查看MySQL的当前日期
  5. linux 内核编译不能打字,linux系统升级后,手动编译的kernel无法启动问题
  6. 拳王虚拟项目公社:2020主流的虚拟资源项目,最新最全自动化系统玩法
  7. anaconda虚拟环境设置
  8. css 历史及css3 新特性
  9. 【对讲机的那点事】维修对讲机你会拆卸电路板上的集成电路块吗?
  10. 【算法学习】将MSRCR中的模糊处理由FFT修改为时域纯高斯模糊
  11. 作业帮基于 Flink 的实时计算平台实践
  12. 关于写的Java书籍进展
  13. WIN10下怎么用OBS捕捉全屏放映的PPT
  14. Python:存取npy格式数据
  15. 2020年国赛A题目思路(高教杯全国大学生数学建模竞赛)
  16. xdm,程序员外包能干吗?
  17. C# FTP操作(上传、下载等……)
  18. 100999凑整到万位进一_大数与凑整教学实录
  19. linux配置yum源的三种方法:
  20. 网络游戏网络封包破解

热门文章

  1. 转一个校友的文章--“在计算机领域做研究的一些想法”
  2. C#图形窗口的几种边框样式,固定大小,及可调节大小等样式
  3. android中的m、mm、mmm、make指令
  4. ios开发者联系方式
  5. OpenGL学习笔记:颜色
  6. Consul4-linux安装consul以及集群搭建
  7. 分析APP的安装流程 API29
  8. 数学/基础数论——从LeetCode题海中总结常见套路
  9. 解决Destroying ProtocolHandler [“ajp-apr-8009“]
  10. XP计算机里改单核,如何将双核CPU改成单核CPU 双核改单核教程