Java通过tcp协议连接温湿度传感器 按16进制发送和接收数据

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曦月合一

你的鼓励是我们前进的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值