概述
基于阿里云物联网平台的设备之间传输十六进制数据
文章目录
- 基于阿里云物联网平台的设备之间传输十六进制数据
- 1. 创建阿里云物联网产品
- 1.1 创建新的产品
- 1.2 为产品创建自定义topic
- 1.3 创建设备
- 2. 发送设备
- 3. 接收设备
- 4. 云产品流转
- 5. 效果演示
- 5.1 发送端
- 5.2 阿里云物联网平台日志
- 5.3 接收端
- 6. 总结
1. 创建阿里云物联网产品
1.1 创建新的产品
登录阿里云 [阿里云-为了无法计算的价值 (aliyun.com)](https://www.aliyun.com/)
点击搜索框,搜索物联网平台
点击企业物联网平台,并进入控制台
点击 公共实例 -> 设备管理 -> 产品 -> 创建产品
创建参数如下图
1.2 为产品创建自定义topic
选择Topic类列表 -> 自定义Topic -> 定义Topic类
创建两个自定义Topic,分别用于发送数据和订阅数据,即云到设备和设备到云
下图框中为我们新建的Topic
1.3 创建设备
创建完设备后可在产品下看到下面的内容
2. 发送设备
发送设备可以是嵌入式端,也可以是阿里云物联网平台上的设备模拟器等,本文以Java构建了一个MQTT发送端,构建方式请参考:
https://blog.csdn.net/m0_67401270/article/details/126459764
https://blog.csdn.net/li371518473/article/details/118306572
- 发送端数据处理代码如下:
// 字符串通过处理转换成0xAAAA01642710F1AF0A1F1CAB0102634E200E51E337E8AD02
// 实际发送的就是一组十六进制数0xAAAA01642710F1AF0A1F1CAB0102634E200E51E337E8AD02
// 以字符串的形式定义是为了方便查看
String content = "AA AA 01 64 27 10 F1 AF 0A 1F 1C AB 01 02 63 4E 20 0E 51 E3 37 E8 AD 02";
content = content.replace(" ", ""); // 去除空格
content = content.toUpperCase(); // 全转大写
char[] chars = content.toCharArray(); // 转换成字符数组
int length = chars.length / 2;
// 将字符串先转换成整型数据
int[] realNums = new int[length];
for (int i = 0; i < length; i++) {
realNums[i] = charToInt(chars[2 * i], chars[2 * i + 1]);
System.out.print(Integer.toHexString(realNums[i]) + " "); // 打印信息确认是否转换正确
}
byte[] sendBytes = intGetBytes(realNums); // 将整型数据转换成字节数据用来发送
public static int charToInt(char c1, char c2) {
String num = "0123456789ABCDEF";
int highBits = num.indexOf(c1);
int lowBits = num.indexOf(c2);
return (highBits * 16 + lowBits);
}
public static byte[] intGetBytes(int[] arrays) {
byte[] bytes = new byte[arrays.length];
for (int i = 0; i < arrays.length; i++) {
bytes[i] = (byte) (arrays[i] & 0xff);
}
return bytes;
}
设备端上传数据需订阅之前定义的自定义Topic / P r o d u c t K e y / {ProductKey}/ ProductKey/{deviceName}/user/post1
3. 接收设备
与发送端一样,接收端也采用JAVA构建一个MQTT接收端,具体构建方式参考如下网址:
[Paho-MQTT Java接入示例 (aliyun.com)](https://help.aliyun.com/document_detail/146631.html?scm=20140722.S_help%40%40文档%40%40146631._.ID_146631-RL_me域名 审核-LOC_main-OR_ser-V_2-P0_3797)
// 对其中的数据接收函数进行修改
public void messageArrived(String var1, MqttMessage var2) throws Exception {
System.out.println("reply topic : " + var1);
// 通过追MqttMessage的源码发现,最原始的数据就是payload,其数据类型为byte[]
byte[] dataBytes = var2.getPayload();
for (int i = 0; i < dataBytes.length; i++) {
// 将收到的byte数组转换成对应的无符号整数,并以十六进制字符串的形式进行打印,对比上传与下发的数据是否一致
System.out.print(Integer.toHexString(Byte.toUnsignedInt(dataBytes[i])) + " ");
}
}
接收端接收数据需订阅之前定义的自定义Topic / P r o d u c t K e y / {ProductKey}/ ProductKey/{deviceName}/user/set1
4. 云产品流转
在前面的内容中,我们已经创建了产品,以及上传数据与下发数据的设备,并创建了相应的客户端,在阿里云物联网平台上,我们想要实现不同设备之间的数据收发,还需要建立相应的云产品流转规则,具体步骤如下:
点击返回旧版后的界面如下:
创建新的规则
规则名称随意,数据格式选择二进制
查看新创建的规则,编写SQL,编写完毕后点击确认
在转发数据一栏添加操作,编写完毕后点击确认
返回上一级界面,启动规则
5. 效果演示
5.1 发送端
5.2 阿里云物联网平台日志
设备到云
规则引擎
云到设备
5.3 接收端
6. 总结
本文讲述了基于阿里云物联网平台的多设备之间实现十六进制数据的传输,主要应用在嵌入式设备中传输传感器数据
最后
以上就是眯眯眼砖头为你收集整理的基于阿里云物联网平台的设备之间传输十六进制数据的全部内容,希望文章能够帮你解决基于阿里云物联网平台的设备之间传输十六进制数据所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复