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






4.20/5 (2投票s)
使用 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。