65.9K
CodeProject 正在变化。 阅读更多。
Home

在 Intel Edison 上使用 Node.js 和 node-red 进行蓝牙操作

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.20/5 (2投票s)

2015年8月20日

CPOL

3分钟阅读

viewsIcon

19493

使用 Android 手机向 Intel Edison 中的基于 Javascript 的程序发送蓝牙命令的解决方法

1. 背景

如果您正在使用 Intel Edison,那么您一定已经发现,在 Edison 上以任何合理的方式让蓝牙工作都是一个死胡同。 尤其是在您寻找 Node.js 或 node-red 的解决方法时更是如此。

经过数小时的尝试和错误,我终于让它工作了。 所以我创建了这个页面。 希望能节省大家宝贵的时间!

我将首先告诉您逻辑。 Intel Edison 蓝牙没有串行端口服务,这对手机与 Edison 之间的通信至关重要。 Intel 有一个 Python 脚本提供串行端口服务。 这个 Python 脚本的一个修改版本被编写成将数据写入一个命名管道,然后可以从 Arduino 等程序中读取。

坏消息是 javascript 既不支持命名管道,也可能永远不会支持。 因此,我们编写一个 bash 脚本来从命名管道中读取数据。 现在,使用命令行 websocket,我们发布该 shell 脚本接收到的数据。

现在我们使用 npm 安装 websocket 和 ws(一个客户端),以使 Node.js 能够使用 websockets。 使用 websocket 客户端,我们监听我们的守护程序服务器。

Android 手机--> 串行端口--> Python 后台脚本--> 命名管道---> Bash 脚本--> Websocket--> Javascript。

不要害怕。 步骤并不太复杂。 它的工作效果非常好。

1) 解锁蓝牙

rfkill unblock bluetooth

2) 登录蓝牙控制台

bluetoothctl

3) 设为可被发现

discoverable on

4) 扫描蓝牙设备

scan on


设备在列表中显示后,按 Ctrl+C


6) 配对

pair <DEv_ID>


7) 连接到蓝牙设备

connect <DEv_ID>


8) 信任该设备

trust <DEv_ID>


9) 下载 Android 蓝牙 SPP 应用程序

Android Bluetooth SPP Pro (免费)

10) 现在我们需要按照此处的Intel 教程

引用


a) 下载:https://software.intel.com/sites/default/files/managed/6c/16/bluetooth-service.tar.gz
b) 使用 WinScp 将文件上传到 /home/root
c) 解压该软件包

mkdir /home/root/bluetooth
cd /home/root/bluetooth
mv /home/root/bluetooth-service.tar.gz ./
tar -xvf bluetooth-service.tar.gz

 

d) 准备蓝牙启动

cp bluetooth-spp-pin.service /lib/systemd/system

 systemctl enable bluetooth-spp-pin

reboot

e) 重新登录后

systemctl status bluetooth-spp-pin

 

11) 这个软件包有一个名为 bluetooth-spp-service.py 的文件,它运行串行端口服务,并在命名管道中释放它们:/tmp/arduino_pipe_out
所以现在我们需要编写一个 bash 脚本,它可以从这个命名管道中读取

12) vi readPipe.sh

#!/bin/bash

pipe=/tmp/arduino_pipe_out

trap "rm -f $pipe" EXIT

if [[ ! -p $pipe ]]; then
    mkfifo $pipe
fi

while true
do
    if read line <$pipe; then
        if [[ "$line" == 'quit' ]]; then
            break
        fi
        echo $line
    fi
done

echo "Reader exiting"
​

按 Esc 键,然后输入 :wq 来退出编辑器并保存文件。


13) 使其可执行

chmod 755 readFile.sh

14) 执行它以测试您是否能够获取通过蓝牙发送的命令

./readFile.sh 

它现在将等待蓝牙命令。 从您的应用程序中,生成蓝牙命令

您将看到它出现在命令提示符中

15) Websocket

javascript 不支持管道。 所以我们需要使用 websocket 来发布它。 下载 websocketd,一个基于命令行的 websocket 守护程序。 解压。 将文件 websocketd 复制到 /home/root
从 /home/root

chmod 755 websocketd


16) 运行守护程序服务器

./websocketd --port=8080 ./readPipe.sh

 

16) 用 node-red 进行测试

现在转到您的 node red。从输入面板中获取 Websocket (WebSocket)

change
类型:监听
路径:/ws://:8080


将其连接到调试器。 部署。 现在从您的 android 应用程序生成命令。 您将能够在 node-red 中看到结果

17) 使用 Node.js 进行测试

首先安装 websocket。

npm install websocket

安装 ws,一个轻量级的 websocket 客户端

npm install ws

编写 Node.js 简单客户端来测试它。 例如 myWsClient.js

 

var WebSocket = require('ws')
  , ws = new WebSocket('ws://:8080');
ws.on('open', function() {
    ws.send('something');
});
ws.on('message', function(message) {
    console.log('received: %s', message);
});

使用以下命令运行它

node myWsClient

就这样。 现在您可以从您的支持蓝牙的 Android 手机接收命令到 Intel Edison。

© . All rights reserved.