电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
为家居智能化构建环境(MQTT Broker和Node-Red部署)——OrangePi Zero2测试
分 享
扫描二维码分享
为家居智能化构建环境(MQTT Broker和Node-Red部署)——OrangePi Zero2测试
orangePi
opizero2
我爱下载
关注
发布时间: 2021-01-25
丨
阅读: 1442
*注:如下内容中,部分内容和图片来自网络。* 为了构建一个家居智能化的平台,OrangePi Zero2将起到关键的作用,包括:MQTT Broker服务器,数据中心,通过node-red实现的逻辑判断和控制核心等。这其中MQTT Broker服务器和Node-Red是核心组件,需要首先完成部署。 # MQTT Broker部署 ## 源码下载 选择MQTT Broker,mosquitto 源码下载:https://mosquitto.org/download/ mosquitto-2.0.5.tar.gz 解压源码 ```bash 执行 tar xvf mosquitto-2.0.5.tar.gz ``` ## 编译和安装 进入mosquitto-2.0.5,执行 ```bash # cd mosquitto-2.0.5 # make & make install ``` 错误1:缺少cjson ![](https://cf02.ickimg.com/bbsimages/202101/b99e0afff553464978a532382f88c8f9.png) 采用make WITH_CJSON=no方式关闭cjson的支持 安装cjson库 克隆https://github.com/DaveGamble/cJSON.git库 编译安装cJson 这里不详细介绍cJson的编译安装了。 ## 配置 ```bash # cd /etc/mosquitto # cp mosquitto.conf.example mosquitto.conf //拷贝一份配置文件示例 # vim mosquitto.conf //修改mosquitto配置文件 ``` ### 为了保证安全的配置 不允许匿名访问,打开此项设置。 ```bash # Boolean value that determines whether clients that connect # without providing a username are allowed to connect. If set to # false then a password file should be created (see the # password_file option) to control authenticated client access. # # Defaults to false, unless there are no listeners defined in the configuration # file, in which case it is set to true, but connections are only allowed from # the local machine. allow_anonymous false ``` ### 创建用户名和密码 为用户orangepi创建密码到pwfile内 ```bash # mosquitto_passwd -c pwfile orangepi ``` 错误2:使用过程中找不到libmosquitto.so.1 系统提示如下信息: ```bash error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory ``` 【解决方法】——修改libmosquitto.so位置,创建链接 ```bash ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1 ``` ## 开机启动 在/etc/rc.local文件中,增加相应的启动命令,可以完成开机启动。 ```bash mosquitto -c /etc/mosquitto/mosquitto.conf & ``` 编辑完成后,保存,重启系统。利用命令,ps –aux | grep mosquitto查看到,已经自动启动完成。 ![](https://cf02.ickimg.com/bbsimages/202101/3bf85fd14d34492804cae74ba05738e8.png) ## 测试 采用Paho工具对MQTT Broker进行测试。 打开Paho工具软件,添加一个MQTT服务器,如图所示,填入服务器地址,端口号。 ![](https://cf02.ickimg.com/bbsimages/202101/e3fd1980def0e9800809101abba88eca.png) 由于我们的MQTT Broker设置了用户和密码,所以需要将他们添加到连接中。 ![](https://cf02.ickimg.com/bbsimages/202101/586a345938fe604b6ddc0522e6035de4.png) 然后点击连接按钮,查看右侧的历史记录信息。如下图连接成功。 ![](https://cf02.ickimg.com/bbsimages/202101/78f94e5834eeea6f68153786d1c4fb70.png) 我们可以尝试订阅和发布一个消息来测试一下。入上图中一样,我们订阅/mqtt/test的主题,同时发布一个/mqtt/test的主题消息,看看系统的反馈。 ![](https://cf02.ickimg.com/bbsimages/202101/3c0baf52ae8841b4dd7871d9a8e02154.png) 可以看到,成功的订阅了消息,成功的发布一条消息,同时也收到了订阅的消息内容。 # Node-Red部署 Node-Red的部署分为两个大的部分,一个是Node及NPM的部署,一个是Node-Red的部署和安装。 ## Node及npm的部署 ### 源码下载 下载地址:https://nodejs.org/en/download/ 我们需要选择ARMv8的64位版本,node-v14.15.4-linux-arm64.tar.xz ### 解压缩和移动 ```bash tar –xvf node-v14.15.4-linux-arm64.tar.xz ``` 移动到/opt目录下 ```bash mv node-v14.15.4-linux-arm64 /opt ``` ### 部署 执行如下命令创建软连接 ```bash ln –s /opt/ node-v14.15.4-linux-arm64/bin/node /usr/local/bin ln –s /opt/ node-v14.15.4-linux-arm64/bin/npm /usr/local/bin ln –s /opt/ node-v14.15.4-linux-arm64/bin/npx /usr/local/bin ``` 注意:必须提供全路径 ### 安装情况检查 ```bash node –v 检查node系统安装情况 npm –v 检查npm的安装情况 ``` ![](https://cf02.ickimg.com/bbsimages/202101/7280f617afae9a78833cdb525d4bedb9.png) ## Node-Red的部署 ### Node-Red介绍 Node-Red是IBM公司开发的一个可视化的编程工具。它允许程序员通过组合各部件来编写应用程序。这些部件可以是硬件设备(如:Arduino板子)、Web API(如:WebSocket in和WebSocket out)、功能函数(如:range)或者在线服务(如:email)。 • Node-Red提供基于网页的编程环境。通过拖拽已定义node到工作区并用线连接node创建数据流来实现编程。程序员通过点击“部署(Deploy)”按钮实现一键保存并执行。程序以JSON字符串的格式保存,方便用户分享、修改。 • Node-Red基于Node.js,它的执行模型和Node.js一样,也是事件驱动非阻塞的。理论上,Node.js的所有模块都可以被封装成Node-Red的一个或几个node。(Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。 Node.js 的包管理器 npm是全球最大的开源库生态系统。) ### 安装 Node-red的安装是通过npm工具来完成的。通过执行如下命令: ```bash npm install –g --unsafe-perm node-red ``` ![](https://cf02.ickimg.com/bbsimages/202101/4e00108fed539960f9decdb353a08c93.png) ### 部署 安装完成后,node-red被安装到node目录下,需要建立软连接。 ```bash ln –s /opt/ node-v14.15.4-linux-arm64/bin/node-red /usr/local/bin ln –s /opt/ node-v14.15.4-linux-arm64/bin/node-red-pi /usr/local/bin ``` ![](https://cf02.ickimg.com/bbsimages/202101/61537128faa35f9acb4e33c259d84122.png) 注意:必须使用全路径 运行测试 ```bash 执行 node-red-pi ``` ![](https://cf02.ickimg.com/bbsimages/202101/dd0f74dc114c29639e47970d85d47335.png) 看到这些信息,表示node-red启动成功了。 打开浏览器,输入ipaddress:1880看看下图所示,表示我们的系统配置已经成功,node-red运行正常 ![](https://cf02.ickimg.com/bbsimages/202101/53551bc66f8b42d2cff3471f046e4142.jpg) ### 添加登录密码 如果想登录验证,设置配置文件settings.js,如果不想设置,可以跳过。 设置node-red的配置settings.js文件,该文件存放在/root/.node-red目录下。通过编辑器打开settings.js文件,找到这段文字,打开“//”,修改登录名称和密码。 ```bash // Securing Node-RED // ----------------- // To password protect the Node-RED editor and admin API, the following // property can be used. See http://nodered.org/docs/security.html for details. adminAuth: { type: "credentials", users: [{ username: "admin", password: "$2a$08$.tXj7MEI6CsZcke7f3j6eubt4xmlY85WTIkrSlRBGHFKWCSUBsU5i", permissions: "*" }] }, ``` #### 登录密码的生成方法 首先需要安装模块bcryptjs,执行 ```bash npm install bcryptjs ``` 执行如下命令生成密码 ```bash node -e "console.log(require('bcryptjs').hashSync(process.argv[1], 8));" your-password-here ``` 例如我生成的密码为123 ![](https://cf02.ickimg.com/bbsimages/202101/4d9123938db9852481cfc6429be380c3.png) 将产生的新的密码添加到settings.js文件的相应位置,重新启动node-red. 打开浏览器再次连接node-red时,会出现如下登录画面,要求输入用户名和密码。 ![](https://cf02.ickimg.com/bbsimages/202101/27f501cc684488afa86f3ff807deeb8f.jpg) ### Node-Red的节点安装 Node-red系统集成了非常多的节点,我们可以利用这些节点快捷的完成一些功能,例如串口通讯,mqtt数据收发,web网页等。 Node-Red提供如下几种节点安装方式: ![](https://cf02.ickimg.com/bbsimages/202101/74e56eb61936b02335cd33dc23d3deec.jpg) 说明:无论哪种方式,由于Node-RED是Node.js的应用,三种方式本质上都是将以NPM包形式的节点放置与Node-RED读取节点的目录之中。 这里重点介绍通过图形方式安装node-red节点。 #### 安装步骤1: 如下图所示,点击页面右上角的“≡”图标,并在下拉菜单中点击“节点管理”选项。 ![](https://cf02.ickimg.com/bbsimages/202101/998a29981d13f433159c41b58ce4c3d1.jpg) #### 安装步骤2: 在弹出的页面上,选择“控制板”->“安装”。 ![](https://cf02.ickimg.com/bbsimages/202101/b6dea296b0b091385a87b7a07dc24f5d.jpg) #### 安装步骤3: 在搜索栏中输入想要安装的节点关键字,例如输入serial串口节点。如下图所示,列出了包含serial关键字的很多节点,我们选择需要的节点后安装就可以。 ![](https://cf02.ickimg.com/bbsimages/202101/69ef570d837be160afd6f67f4c54946e.png) #### 安装步骤4: 这里我们安装第一个条目“node-red-node-serialport”。点击安装后,会出现如下图所示,继续点击“安装”按钮后,开始安装。 ![](https://cf02.ickimg.com/bbsimages/202101/073ba5401463d17a9bfae296da8ef02f.png) 接下来等待系统安装结束。可以在左侧节点栏中看到如下图所示的节点图标。 ![](https://cf02.ickimg.com/bbsimages/202101/914a5de4b94ae7cb19f99f6481495015.png) ### Node-Red的基本使用方法 Node-Red由两部分组成。一部分是用户可见的编辑界面,另一部分是数据流的执行。 数据流的编辑界面由四部分组成。最左边是已定义的各种node的列表,我们称之为控件区;中间是一个工作区,用户可以拖放node到工作区来创建node的实例,Node-Red为每个node实例赋予了唯一的ID,通过双击node实例来编辑单个实例,通过连接node的in和out创建数据流,node实例会记录out口连线的信息,每条线会记录目标node实例的信息;最右边是debug node的输出区及node的帮助信息显示区。右上角有‘Deploy’(或者“部署”)按钮,用来把编写的程序保存到本地并执行。 ![](https://cf02.ickimg.com/bbsimages/202101/f83746a01cee9a195a6f4c1be02a5c5d.png) 一个简单的hello world实例 Hello world例子是万能的编程语言学习的起点。 1)拖拽输入与输出节点 启动node-red以后,在浏览器中,将控件区内的输入节点“inject”与输出节点“debug”,使用鼠标左键拖入工作区内。 ![](https://cf02.ickimg.com/bbsimages/202101/d0575617aed18d43f5bc417924037cf8.jpg) 拖入以后发现“inject”变成了“时间戳”,“debug”变成了“msg.payload”。 2) 修改节点的配置 双击“时间戳”,在屏幕的右侧会弹出如下窗口 ![](https://cf02.ickimg.com/bbsimages/202101/aad301c036e5bc7a7f207bd437a14ca9.png) 点击“内容”选项后边的小三角,在下拉菜单选择文字列,并在输入框内输入“hello world”,然后点击完成。 ![](https://cf02.ickimg.com/bbsimages/202101/ec3921dbd485fa167955b8c6a8c8ab25.png) 可以观察到,工作区中的“时间戳”变成了“hello world”。 ![](https://cf02.ickimg.com/bbsimages/202101/9c954f89e4c262d2b908574eb99cdc14.png) 输出节点暂时不修改。 3)连接输入与输出节点 在node-red中用“flow”来表示数据的流向,中文意思是“数据流”。数据要从输入节点到达输出节点,用一条线将两个节点连载一起。 Node-red总是默认数据从左流向右,所以输入节点都有一个特点:数据接口在右侧,见下图标记1;输出节点也有一个特点,数据的接口在左侧,见2;还有一些节点是特殊的,既有输入又有输出,那么左右两侧都有数据的接口,见3。 ![](https://cf02.ickimg.com/bbsimages/202101/5f0d176829e58987eadf0f3cb037288d.png) 注意,这里的输入与输出都是相对于“整个数据流”来说的。其实单单对于 使用鼠标按住左键,从上图接口1连接到接口2,即可完成输入输出的节点连接。用一条线连接输入输出节点,大概是最简单最直观的构建数据流的方式了。 ![](https://cf02.ickimg.com/bbsimages/202101/5674dd60f7245684d7a1c7e9eafe4c24.png) 4) 部署 我们发现节点的右上角有一个蓝色的圆点,这个圆点的意思是,此节点还没有部署和保存。部署按钮位于工具栏,在浏览器的右上角。虽然名字叫做部署,但其实有部署和保存两种功能。保存的含义相信大家都能理解,部署对于没接触过的人可能就比较陌生了。部署通俗来说就是“让它们工作”,我们在工作区放置了一些节点,通过部署按钮,可以让它们工作起来。 其下拉菜单中还有一些别的选项如下。 ![](https://cf02.ickimg.com/bbsimages/202101/f9941f75f425d12110dfbdd96f194047.png) 点击部署按钮,如果数据流与节点都没有问题,会有“部署成功”的弹窗提示。节点上蓝色的圆点也消失了。 ![](https://cf02.ickimg.com/bbsimages/202101/ef8c6c5fc11ea02a00282550b01ab28f.png) 5)调试 “inject”节点可以手动输入消息,节点左侧有一个小按钮,点击按钮可以手动注入消息,见按钮1。在点击inject节点的按钮之前,必须确保debug节点是可用的,即按钮必须是“伸出来”的,如按钮2,而不是像按钮3一样“缩回去”,按钮“缩回去”的debug节点不工作。点击按钮可以切换节点是否工作。 ![](https://cf02.ickimg.com/bbsimages/202101/b835c5f2dba148f80b18eee2c4d13ca5.png) ![](https://cf02.ickimg.com/bbsimages/202101/37356d9dd84c1089cf8d6c82e04bc39d.png) 点击按钮1,屏幕上方会提示:“成功注入:hello world” 在屏幕右侧有调试窗口,窗口内可以看到一条消息,且内容正好是输入节点的信息:“hello world” ![](https://cf02.ickimg.com/bbsimages/202101/a0e0341e2082f94d182eece01276aa41.png) # 联调测试 环境部署到这里,已经基本完成了关键的功能部署工作。下面将MQTT和Node-Red联调一下,完成信息互联互通。 对于node-red中使用mqtt的方式和方法,后面文章中在详细展开说明。 在Node-Red中构建一个MQTT输入信息获取,解析和Debug显示的流程。mqtt订阅的信息为/mqtt/test,其信息载荷为一个json数据结构,包含id = 1的信息。 ![](https://cf02.ickimg.com/bbsimages/202101/4955184321ff731befacf19020db8b84.png) 通过paho连接到我们的MQTT Broker,并发送主题为/mqtt/test,内容为{“id”:1}的信息到网络上。 ![](https://cf02.ickimg.com/bbsimages/202101/f53461fec075850093bd8966de05950b.png) 观察Node-Red流程的执行结果 ![](https://cf02.ickimg.com/bbsimages/202101/ec9dea67c06fadacae888522f8178b59.png) 通过上图我们可以看到,Node-Red和MQTT之间的数据沟通已经建立,接下来可以通过这套平台来完成智能家居的信息采集和实时控制了。
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
0
)
我爱下载
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交