**序言:**Java通过tcp协议连接温湿度传感器 按16进制发送请求,在Java中使用TCP协议连接温湿度传感器并发送十六进制数据,通常涉及到以下几个步骤:
1、 创建TCP客户端:使用Socket类来创建一个TCP客户端。
2、.建立连接:连接到温湿度传感器的服务器。
3、.发送十六进制数据:将需要发送的数据转换为十六进制格式,并通过输出流发送。
4、.接收数据:从传感器的输出流读取数据。
5、.关闭连接:完成通信后关闭连接。
步骤一:从传感器中发送接收数据,解析接收到的 (16进制)字节格式的数据
package com.tools;
import java.io.*;
import java.net.*;
//(成功运行)_从传感器中接收数据,解析接收到的 (16进制)字节 格式的数据
public class TCPSensorReader {
public static void main(String[] args) {
String host = "192.168.1.XXX"; // 传感器IP地址
int port = XXXX; // 传感器端口号
try (Socket socket = new Socket(host, port);
InputStream input = socket.getInputStream();
OutputStream output = socket.getOutputStream()) {
//发送命令请求
// 向传感器发送读取数据的命令
String hexData = "010300000002C40B"; // 例如,这是一个十六进制命令,具体根据传感器协议调整
byte[] dataBytes = hexStringToByteArray(hexData); // 转换为字节数组
output.write(dataBytes); // 例如,发送一个命令字节
output.flush();
System.out.println("数据发送到传感器");
// 读取数据
byte[] buffer = new byte[1024]; // 根据需要调整缓冲区大小
int bytesRead = input.read(buffer);
if (bytesRead > 0) {
// 处理读取的数据
parseData(buffer, bytesRead);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
步骤二:将十六进制字符串转换为字节数组
// 辅助方法:将十六进制字符串转换为字节数组
public static byte[] hexStringToByteArray(String s) {
int len = s.length();
byte[] data = new byte[len / 2]; // 分配字节数组长度的一半,因为每两个字符表示一个字节
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i + 1), 16));
}
return data;
}
步骤三: 解析获取到的传感器(16进制)的数据
//解析获取到的传感器(16进制)的数据
public static void parseData(byte[] data, int length) {
// 根据数据格式解析数据
// 例如,如果是两个字节表示温度和湿度,可以这样解析:
if (length >= 4) { // 确保有足够的数据
//01 04 04,温度H,温度L,湿度H,湿度L,CRCH,CRCL
//01 04 04 00 EB 02 25 4B 0B
//00 EB 温度温度Height ,温度Low
//02 25 湿度Height,湿度Low
int temperature1 = ((data[3] & 0xFF) << 8) | (data[4] & 0xFF);
int humidity1 = ((data[5] & 0xFF) << 8) | (data[6] & 0xFF);
System.out.println("Temperature1: " + (double)temperature1/10 + "°C");
System.out.println("Humidity1: " + (double)humidity1/10 + "%");
} else {
System.out.println("Not enough data to parse.");
}
}