**序言:**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,湿度Lowint 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.");}}