赞
踩
一 java 编写 coap 客户端与服务端
概述:
CoAP是为物联网而生,短小精悍,它底层基于UDP协议的,其它具体参考百度百科,本例子是基于Californium框架。
1、先决条件
java环境
eclipse工具
Maven插件(有最好,不需要手动下载jar引入,没有的话手动引入)
2、下载Californium框架核心jar
californium-core.jar : 包括CoAP核心部分
element-connector.jar 包括适用于UDP和DTLS的java套接字抽象层
scandium.jar: 包括DTLS
- <dependency>
- <groupId>org.eclipse.californium</groupId>
- <artifactId>californium-core</artifactId>
- <version>2.0.0-M7</version>
- </dependency>
- <dependency>
- <groupId>org.eclipse.californium</groupId>
- <artifactId>element-connector</artifactId>
- <version>2.0.0-M7</version>
- </dependency>
- <dependency>
- <groupId>org.eclipse.californium</groupId>
- <artifactId>scandium</artifactId>
- <version>2.0.0-M7</version>
- </dependency>
3、创建java工程或Maven工程,创建一个Server类
- import org.eclipse.californium.core.CoapResource;
- import org.eclipse.californium.core.CoapServer;
- import org.eclipse.californium.core.coap.CoAP.ResponseCode;
- import org.eclipse.californium.core.server.resources.CoapExchange;
-
- public class HelloCoAPServer {
-
- public static void main(String[] args) {
- CoapServer server = new CoapServer();//主机为localhost 端口为默认端口5683
- server.add(new CoapResource("hello"){//创建一个资源为hello 请求格式为 主机:端口\hello
-
- @Override
- public void handleGET(CoapExchange exchange) { //重写处理GET请求的方法
- exchange.respond(ResponseCode.CONTENT, "Hello CoAP!");
- }
-
- });
- server.add(new CoapResource("time"){ //创建一个资源为time 请求格式为 主机:端口\time
-
- @Override
- public void handleGET(CoapExchange exchange) {
- Date date = new Date();
- exchange.respond(ResponseCode.CONTENT,
- new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date));
- }
-
- });
- server.start();
- }
- }
4、创建一个客户端:
- public class GETClient {
-
- public static void main(String[] args) throws URISyntaxException {
- URI uri = null;
- uri = new URI("localhost:5683/hello"); //创建一个资源请求hello资源,注意默认端口为5683
- CoapClient client = new CoapClient(uri);
- CoapResponse response = client.get();
- if(response !=null){
- System.out.println(response.getCode()); //打印请求状态码
- System.out.println(response.getOptions()); //选项参数
- System.out.println(response.getResponseText()); //获取内容文本信息
- System.out.println("\nAdvanced\n"); //
- System.out.println(Utils.prettyPrint(response)); //打印格式良好的输出
- }
- }
- }
5、测试
先运行HelloCoAPServer的main方法
然后运行GETClient的main方法
6、日志:
- 2.05
- {"Content-Format":"text/plain"}
- Hello CoAP!
-
- Advanced
-
- ==[ CoAP Response ]============================================
- MID : 10763
- Token : [aab3ac5818d1e598]
- Type : ACK
- Status : 2.05
- Options: {"Content-Format":"text/plain"}
- RTT : 26 ms
- Payload: 11 Bytes
- ---------------------------------------------------------------
- Hello CoAP!
- ===============================================================
二 node-red安装node-red-contrib-coap
安装之后拖拽配置
coap请求节点配置如下
coap 服务端节点配置如下
服务端响应节点配置如下,获取get请求参数
可以自定义响应的格式,注意访问coap服务器的时候,如果有配置hosts,应该使用hosts访问这个地址
三 msyql插件 node-red-node-mysql
1. 安装
2.配置调试
找到mysql组件,然后编辑节点
配置新的节点
设置参数
组件连接
sql编写组件
内容
三 kafka组件
输入输出kafka组件
配置添加节点
四 http
部署后访问nodered端口的/test路径
http://127.0.0.1:1880/test?a=1&b=3
串口插件
使用方式如下博客
https://blog.csdn.net/geek_monkey/article/details/80755719
串口安装权限异常等问题失败 使用离线安装
- sudo npm install node-pre-gyp --save
- sudo npm install serialport --unsafe-perm --build-from-source --save
- npm i npm to update
- npm install -g serialport
node-red 自定义插件
先找到对应的自定义插件所在的目录
将后缀的demo删除后重启nodered,输入组件中会多一个sample,即为自定义组件
修改自定义组件内容 99-sample.js
核心部分
编码格式为js语法,但是部分api不存在.例如数组遍历map不存在
按照自己的要求修改好之后,重启node-red
node-red全局变量
使用函数组件
编辑内容
- if (local.action===undefined)//获取全局变量,如果不存在,赋默认值
- {
- local.action="站立";
- local.x=0;
- local.y=0;
- }else{//如果存在,进入计算
- switch(msg.payload.token){
- case "move_x":
- local.x+=parseInt(msg.payload.value)
- break;
- case "move_y":
- local.y+=parseInt(msg.payload.value)
- break;
- }
- }
- context.set('data',local);//保存全局变量
函数节点使用16进制字节数组
msg.payload = Buffer.from([0x12,0x22,0xd3,0x23])
node-red的用户权限与密码配置
首先找到配置文件,启动node-red的时候,启动日志会显示配置文件位置,如下图所示
修改配置文件
找到这个位置,放开注释
password是经过加密处理的
permissions 表示用户权限,分为 读写 -> * 只读 -> read
获取加密后的秘钥
首先进入找到加密工具所在的目录
进入开始转化秘钥
node -e "console.log(require('bcryptjs').hashSync(process.argv[1], 8));" mypassword
得到的$2a$08$Dk6dTjxEPi85sObY1HRYZ.QDoB53m/J5M1MFulhgKTvpwuuC5AzOW表示新的秘钥,将他写入配置文件setting中的pasword中,即下一次登录使用的密码为mypassword
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。