JAVA对接维特智能WIT901WIFI传感器
Posted 星耀寂夜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA对接维特智能WIT901WIFI传感器相关的知识,希望对你有一定的参考价值。
背景
最近有个项目需要对接传感器,将传感器的数据转发到其他设备,目前只有维特智能的WIT901WIFI传感器。
传感器长这样
配置网络
这个传感器是通过WIFI传输数据,所以第一步需要配置WIFI。
下载上位机软件
官方页面 https://wit-motion.yuque.com/wumwnr/docs/cmxpmgcensdqg5ag
直接下载上位机软件 https://witpic-1253369323.cos.ap-guangzhou.myqcloud.com/wit-cloud/ep/uploadFile/0b22e450-5040-402f-a404-2c34f6a109cfwifi-udp上位机(v3.0.11).zip
配置WIFI
先通过Type-C线连接传感器至电脑,将传感器开关打开,拨到ON
需要明确一点,WIFI必须是2.4G的,而且不能是中文名,否则会连接不上
打开UDP上位机软件,菜单->系统设置->有线配网
选择一个通讯串口,不知道选哪个自己试一试就行
填写WIFI名称和WIFI密码,服务器选当前上位机,点开始配网
成功后会提示服务器连接成功,并且会弹出一个TempData的窗口
如果失败检查下WIFI是否连接上了,电脑和WIFI是否在同一个局域网
然后主窗口应该会显示传感器的数据,如果没有就重启软件
设置传感器服务器
如果要设置接收传感器数据的服务器,需要先给传感器发送服务器IP
如果已知传感器IP,可直接向传感器IP:9250
发送UDP数据包,数据包内容如下
WIT192.168.0.13\\r\\n
其中192.168.0.13是接收传感器数据的服务器IP地址
如果未知传感器IP,可通过发送数据包到广播地址255.255.255.255:9250
,数据包内容同上
Java代码如下
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import static java.net.InetAddress.getByName;
public class SensorUtil
public static void setSensorServer() throws IOException
// 设置要发送的消息和目标地址
String message = "WIT192.168.137.1\\r\\n";
InetAddress address = getByName("192.168.137.255"); // 192.168.137.1网段的广播地址
int port = 9250; // 目标端口
// 将消息转换为字节数组
byte[] buffer = message.getBytes();
DatagramSocket socket = new java.net.DatagramSocket();
// 创建DatagramPacket对象,用于发送消息
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, port);
// 设置socket的广播属性
socket.setBroadcast(true);
// 将消息发送出去
socket.send(packet);
socket.close();
接收传感器数据
接收传感器数据需要服务器监听本机UDP的1399端口
重点:UDP上位机软件也会监听1399端口,所以需要先关闭UDP上位机软件
使用netty监听并打印数据
import cn.hutool.core.util.StrUtil;
import com.gk.recover.server.NettyServer;
import io.netty.bootstrap.Bootstrap;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.DatagramPacket;
import io.netty.channel.socket.nio.NioDatagramChannel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.event.ApplicationStartedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import java.nio.charset.StandardCharsets;
@Slf4j
@Component
public class WIT901UDPServer
private static final int PORT = 1399;
private final EventLoopGroup group = new NioEventLoopGroup();
public void start()
Bootstrap b = new Bootstrap();
b.group(group)
.channel(NioDatagramChannel.class)
.option(ChannelOption.SO_BROADCAST, true)
.handler(new SimpleChannelInboundHandler<DatagramPacket>()
@Override
protected void channelRead0(ChannelHandlerContext ctx, DatagramPacket msg)
ByteBuf buf = msg.content();
String receiveData = StrUtil.removeSuffix(buf.toString(StandardCharsets.UTF_8), "\\r\\n");
log.info("Receive Data: ", receiveData);
);
try
b.bind(PORT).sync();
catch (InterruptedException e)
shutdown();
public void shutdown()
group.shutdownGracefully();
查看接收到的数据
数据解析
参考官方文档 https://wit-motion.yuque.com/wumwnr/docs/lhinmv#2dc7f764
接收数据格式如下
WT5300005765030.026,0.127,0.998,0.000,0.000,0.000,7.349,-1.527,8.618,31,215,262,45.92,4.15,-65,13008,0\\r\\n
数据内容 | 数据名称 |
---|---|
WT5300005765 | 设备编号 |
03 | 未知,官方没有说明 |
0.026,0.127,0.998 | 加速度X,加速度Y,加速度Z |
0.000,0.000,0.000 | 角速度XYZ |
7.349,-1.527,8.618 | 角度XYZ |
31,215,262 | 磁场XYYZ |
45.92 | 温度 |
4.15 | 电量 |
-65 | 信号 |
13008 | 版本号 |
0 | 报警信号 |
\\r\\n | 结束符 |
以上是关于JAVA对接维特智能WIT901WIFI传感器的主要内容,如果未能解决你的问题,请参考以下文章
三菱PLC通过RS485串口连接维特智能Modbus协议角度姿态传感器——多传感器多角度报警
4G/wifi/LoRa无线太阳光照度传感变送器MQTT/http协议对接第三方云平台API接口
ctwing电信AEP平台对接涂鸦智能云平台python程序源码