【问题标题】:How would you format the sending of a serial command from Android over bluetooth?您将如何格式化通过蓝牙从 Android 发送串行命令?
【发布时间】:2013-11-06 01:15:31
【问题描述】:

我有一个安装了 RooTooth 的 iRobot,它是一个蓝牙到串行转换器。据说它的操作就像一个串行端口,并且应该这样接收数据。我已经能够使用终端程序通过串行电缆直接向它发送串行命令,并且工作正常。

我还可以使用我编写的应用程序将命令从手机发送到正在监视传入蓝牙命令的计算机,并且它会完全按照预期接收它们。

但是,当我将它从手机发送到 rootooth 时,什么也没有发生。我发送命令的方式有问题吗?下面是我的做法:

这是在处理程序中:

        case SUCCESS_CONNECT:
            ConnectedThread connectedThread = new ConnectedThread((BluetoothSocket)msg.obj);
            String s = "128 131";
            byte[] command = s.getBytes();
            connectedThread.write(command);
            Toast.makeText(getApplicationContext(), s, 0).show();

            s = "137 0 100 128 0";
            byte[] command1 = s.getBytes();
            connectedThread.write(command1);
            Toast.makeText(getApplicationContext(), s, 0).show();

这是我的 write() 函数

        public void write(byte[] bytes) {
            Log.i(tag, "In write");
            try {
                mmOutStream.write(bytes);
            } catch (IOException e) { }
        }

问题一定是格式,不是吗?任何有经验的人,将不胜感激!

最近我尝试过这个:

            String [] s = new String[2];
            s[0] = "128";
            s[1] = "131";
            for(int i = 0; i < s.length; i++){
                byte[] command = s[i].getBytes();
                connectedThread.write(command);
                Thread.yield();
            }

            String [] t = new String[5];
            t[0] = "137";
            t[1] = "0";
            t[2] = "100";
            t[3] = "128";
            t[4] = "0";

            for(int i = 0; i < t.length; i++){
                byte[] command = t[i].getBytes();
                connectedThread.write(command);
                Thread.yield();
            }

我也试过这个最近的版本,包括一个“/n”字符串,但也没有做任何事情。

【问题讨论】:

  • 这真的只需要没有换行符的数字来终止命令吗?即使是这样,它如何发现一个字符串的最后一个数字组和下一个字符串的第一个之间的边界?也许您至少需要插入一个空格?
  • 在串行终端程序 RealTerm 中完成后,我只需键入“128 131”(无括号),单击“发送号码”,然后单击“137 0 100 128 0”并单击“发送号码”。不过,我会尝试包含一个换行符。
  • 这些应该作为二进制值还是作为数字的字符串表示形式发送?
  • 我相信二进制值。我们有一个 C 程序,它将通过直接串行连接向 iRobot 发送命令。这个 C 程序将获取一个 int 数组 [128, 131],将每个 int 分解为 chars,然后发送 char[]。我最近试图在我当前的代码中模拟这一点,方法是使用一个字符串数组 ["128","131"],将每个字符串转换为 byte[],然后发送 byte[],但没有任何反应。

标签: android bluetooth serial-port


【解决方案1】:

对于碰巧遇到此问题的任何其他人,事实证明,来自 OutputStream 的 .write() 将采用整数,即使它说它只会采用 byte[]。为每个命令创建一个整数数组并通过 int 发送它们最终工作。无需包含空格或换行符。

【讨论】:

    猜你喜欢
    • 2016-05-08
    • 2016-05-07
    • 2014-07-12
    • 2012-04-23
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多