android盒子和中控单片机的串口通讯流程(项目ktv)

最近项目在搞机顶盒这块,也接触了很多硬件知识,特此记录

1:需要设备:

1..android板子:RK3288 安卓一体板(深圳某厂商)

2.中控机:ktv中控控制器 天行的TS-480(会告知
通讯数据参数设定为:波特率4800,数据位:8 位,1位停止位,无校验)

3.测试工具:

2:功能:

    中控机控制功能:控制外放设备的麦克风大小,音量大小,静音,话筒音,音调大小等

3:实现:

通过android板子的rs232串口和中控机的rs232连接通讯

需要注意rs232的线序问题,一般有三根线,红白黑,黑接黑(GND地线,红白可以交换对接测试数据是否能正常发送到中控机,我的之前买过来不能正常发送数据,然后自己剪短,红白对调接了数据才正常发送到中控机)

android串口测试工具用来查看盒子和中控机是否串口连接:

项目地址:licheedev/Android-SerialPort-Tool 打开as允许安装,用过其他几个发现没这个好用,按照中控机的通讯参数设置后调试

中控机是需要学习命令的,学习了下次发送同样的命令就知道是做啥了,学习的命令可以自己定,只要能响应的16进制字符都可以的,至于中控厂家给了我一份命令表自己没按去学习估计,但是并不影响,因为只要中控能接收到,命令自己可以定的

学习方式:按中控机某个按钮进入学习,然后按发送命令字符到中控机,再把外放遥控器对准中控机红外感应,你想要这个命令是干啥就按遥控上对应的功能,等中控机几秒存入后,该遥控功能就对应这个命令了,下次不需要遥控直接发这个命令就可以控制中控机器了,也就是命令学习完成,举例:需要一个麦克风加功能:我们定义1E这个16进制命令表示,那么只要发送1E到中机机,然后遥控找到麦克风加按钮,按一下,就学位完成了,命令就绑定了遥控的麦克风加功能,其他功能重复

关于串口通讯的请参考android串口通讯

贴下重要的代码:

/**
 * 16进制字符转字节
 * @param hexString  大于两位的命令
 * @return
 */
public static byte[] fromHexStringToBytes(String hexString) {

    if ((hexString == null) || (hexString.equals("")) || hexString.length() % 2 != 0) {
        return null;
    } else {
        hexString = hexString.toUpperCase();
        int length = hexString.length() / 2;
        char[] bytec = hexString.toCharArray();
        byte[] bit = new byte[length];
        for (int i = 0; i < length; i++) {
            int p = 2 * i;
            //两个十六进制字符转换成1个字节,第1个字符转换成byte后左移4位,然后和第2个字符的byte做或运算
            bit[i] = (byte) (fromCharToByte(bytec[p]) << 4 | fromCharToByte(bytec[p + 1]));
        }
        Log.e("link blue", "sned byte="+bit.toString());
        return bit;
    }
}
/**
 * 发送字节到对应的串口
 * @param mBuffer
 * @return
 */
public boolean sendBuffer(byte[] mBuffer) {
    boolean result = true;
    String tail = "";
    byte[] tailBuffer = tail.getBytes();
    byte[] mBufferTemp = new byte[mBuffer.length+tailBuffer.length];
    System.arraycopy(mBuffer, 0, mBufferTemp, 0, mBuffer.length);
    System.arraycopy(tailBuffer, 0, mBufferTemp, mBuffer.length, tailBuffer.length);
    try {
        if (mOutputStream != null) {
            mOutputStream.write(mBufferTemp);
        } else {
            result = false;
        }
    } catch (IOException e) {
        e.printStackTrace();
        result = false;
    }
    return result;
}

 3.发送命令

ZKSerialPortUtil.getInstance().sendBuffer(fromHexStringToBytes("1E"));
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值