背景

最近有个项目需要对接传感器,将传感器的数据转发到其他设备,目前只有维特智能的WIT901WIFI传感器。

传感器长这样

配置网络

这个传感器是通过WIFI传输数据,所以第一步需要配置WIFI。

下载上位机软件

官方页面 https://wit-motion.yuque.com/wumwnr/docs/cmxpmgcensdqg5ag#TKIRF

直接下载上位机软件 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 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 磁场XYZ
45.92 温度
4.15 电量
-65 信号
13008 版本号
0 报警信号
\r\n 结束符

Java对接维特智能WIT901WIFI姿态传感器的更多相关文章

  1. Java对接百度智能云人脸识别

    ------------------------->这篇文章就是自己做个笔记<------------------------- 首先登录or注册自己的百度智能云管理中心:https:// ...

  2. 使用web3j工具生成java版本的智能合约

    这里需要使用的环境 web3j,nodejs 安装编译sol工具 $ npm install -g solc 保存为hello.sol文件到本地 pragma solidity 0.4.19; con ...

  3. Java对接拼多多开放平台API(加密上云等全流程)

    前言 本文为[小小赫下士 blog]原创,搬运请保留本段,或请在醒目位置设置原文地址和原作者. 作者:小小赫下士 原文地址:Java对接拼多多开放平台API(加密上云等全流程) 本文章为企业ERP(I ...

  4. java selenium (十三) 智能等待页面加载完成

    我们经常会碰到用selenium操作页面上某个元素的时候, 需要等待页面加载完成后, 才能操作.  否则页面上的元素不存在,会抛出异常. 或者碰到AJAX异步加载,我们需要等待元素加载完成后, 才能操 ...

  5. C#在与java对接时候的UrlEncode的坑

    最近与建行接口做对接和与一家短信运营商做对接时候遇到了这个坑 在java中对UrlEncode 时候哪些url非安全字符被转为%数字和大写字幕组合,比如:zhangsan/d 会被转为 zhangsa ...

  6. java对接微信支付

    对接微信扫码支付(模式2),前端使用velocity技术 (1)调用微信支付接口(view层)  此部分业务逻辑部分可以省略 @RequestMapping("/wxpay.htm" ...

  7. java对接短信平台

    短信验证码目前是比较主流验证身份的一种方式,下面分享下我对接的几种短信平台 阿里云短信:https://api.alidayu.com/docs/api.htm?spm=a3142.7395905.4 ...

  8. Java对接微信公众号模板消息推送

    内容有点多,请耐心! 最近公司的有这个业务需求,又很凑巧让我来完成: 首先想要对接,先要一个公众号,再就是开发文档了:https://developers.weixin.qq.com/doc/offi ...

  9. Razorpay支付对接,JAVA对接篇

    Razorpay 作为印度本土的一家支付公司,类似中国的支付宝 微信,本篇记录一下对接印度第三方支付公司 准备工作: 注册公司 申请Razorpay账号 申请正式环境 Razorpay工作台: 获取k ...

  10. 使用Java对接永中格式转换

    永中格式转换服务基于永中DCS的文档转换能力,支持不同格式文件之间的高质量互转,可实现PDF文档与Word.Excel.PPT.图片的高质量互转,PDF文档转换完美保留原文档的版式,格式等,转换效果出 ...

随机推荐

  1. JavaScript 单线程原理与异步编程机制

    JavaScript 单线程原理与异步编程机制 为什么 JavaScript 是单线程? JavaScript 被设计成单线程,简单来说就是 -- 浏览器里干活儿只能一个接一个排着队来,没法同时多开窗 ...

  2. P7404题解

    分析题意: 题意就是让前半段序列呈上升趋势,后半段呈下降趋势. 解题方法: 考虑差分出序列的高度. xix_ixi​ 表示以 iii 为 kkk 的前半段需增加量. yiy_iyi​ 表示以 i−1i ...

  3. C#基础——超级方便的ExpandoObject类别

    这东西是.NET Framework 4.5 的新东西..发现这个,大概就跟发现新大陆一样的兴奋,让我再次赞叹Anders Hejlsberg 之神.. 这边有MSDN : http://msdn.m ...

  4. qwen3 惊喜发布,用 ollama + solon ai (java) 尝个鲜

    qwen3 惊喜发布了,帅!我们用 ollama 和 solon ai (java) 也来尝个鲜. 1.先用 ollama 拉取模型 听说,在个人电脑上用 4b 的参数,效果就很好了. ollama ...

  5. 【记录】ChatGPT|近期三次更新一览(更新至2023年2月3日)

      如果你还没有使用过ChatGPT,可以先看看我的上一篇文章:[记录]ChatGPT|使用技巧与应用推荐(更新至2023年2月8日).   1月11号晚上,ChatGPT突然很多人都无法登录,包括我 ...

  6. 信息资源管理综合题之“什么是CA 和 什么是数字证书 和 CA实施认证服务的技术基础是什么 和 补全CA签名加密流程图”

    一.公钥密码体系和RSA算法是密钥管理.身份认证.防抵赖篡改等安全问题的理论基础和技术保障.题图是运用RSA算法用户A向用户B传送加密信息并进行数学签名的过程.其中A.B的公钥分别为GA.GB,A.B ...

  7. 网络编程:TCP 网络编程

    参考:盛延敏:网络编程实战 TCP TCP,又被叫做字节流套接字(Stream Socket),UDP 也有一个类似的叫法, 数据报套接字(Datagram Socket),一般分别以"SO ...

  8. JumpServer介绍及v4版本单机部署

    概述 JumpServer官网:https://www.jumpserver.org/ JumpServer官网文档:https://docs.jumpserver.org/zh/v4/ GitHub ...

  9. L3-3、从单轮到链式任务:设计协作型 Prompt 系统

    一.链式任务设计的概念与价值 在人工智能应用开发中,单轮对话往往无法满足复杂业务场景的需求.链式任务设计允许我们将复杂问题分解为一系列相互关联的子任务,每个子任务的输出可以作为下一个子任务的输入,从而 ...

  10. 全选和全不选demo

    1 <script> 2 3 $(function(){ 4 $("#chkAll").change(function(){ 5 6 //获取我们全选按钮的选中状态: ...