# 星球大战BB-8机器人控制测试与转发工具 **Repository Path**: honestqiao/BB8_Proxy ## Basic Information - **Project Name**: 星球大战BB-8机器人控制测试与转发工具 - **Description**: 星球大战BB-8机器人的控制,需要通过专有的App进行控制和二次开发。 HonestQiao开发了本转发工具,为 [HonestQiao/bb8] 提供完整WEB运行环境,并对外提供TCP Socket、WebSocket、MQTT控制能力,任何能够使用TCP Socket、WebSocket、MQTT的设备、程序等,均可以控制BB-8。 - **Primary Language**: NodeJS - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2022-05-11 - **Last Updated**: 2024-02-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: 机器人 ## README # 星球大战BB-8机器人控制测试与转发工具 > 版本:1.0.0 作者:HonestQiao/乔楚 日期:2022-05-11 更新:[HonestQiao/BB8-Proxy (gitee.com)](https://gitee.com/honestqiao/bb8-proxy) ## 目录: * 说明 * 安装 * 启动 * 测试 * 使用 * 资料 ## 说明 星球大战BB-8机器人的控制,需要通过专有的App进行控制和二次开发。 [operasoftware/bb8](https://github.com/operasoftware/bb8)实现了一个网页界面的基础控制功能,[HonestQiao/bb8](https://gitee.com/honestqiao/bb8/tree/websocket/)在此基础上进行了完善,增加了方向键按键控制功能,并实现了WebSocket、MQTT支持,从而使得其他设备,可以通过WebSocket和MQTT,来间接控制BB-8。 进一步的,HonestQiao开发了本转发工具,为 [HonestQiao/bb8](https://gitee.com/honestqiao/bb8/tree/websocket/) 提供完整WEB运行环境,并对外提供TCP Socket、WebSocket、MQTT控制能力,任何能够使用TCP Socket、WebSocket、MQTT的设备、程序等,均可以控制BB-8。 ## 安装: 1. ### 安装nodejs: * 下载安装: [下载 | Node.js (nodejs.org)](https://nodejs.org/zh-cn/download/) 2. ### 安装依赖包: ```bash cd BB8-Proxy mkdir node_modules npm install ``` 3. ### 安装 [HonestQiao/bb8](https://gitee.com/honestqiao/bb8/tree/websocket/) ```bash cd BB8-Proxy mkdir html cd html git clone git@github.com:HonestQiao/bb8.git ``` 你也可以直接下载 [Download ZIP (github.com)](https://gitee.com/honestqiao/bb8/tree/websocket//archive/refs/heads/gh-pages.zip) ,将解压后的bb8放入到 BB8-Proxy/html/ 目录中。 4. ### 安装 MQTT 服务器:(可跳过) 参考 [快速开始 | EMQX 文档](https://www.emqx.io/docs/zh/v4.3/getting-started/getting-started.html) 进行安装。如不启用MQTT功能,则可以跳过。 5. ### 配置 [HonestQiao/bb8](https://gitee.com/honestqiao/bb8/tree/websocket/) 的main.js文件 ```javascript const config = { mqtt: { enable: 0, // 是否启用 host: '192.168.1.15', port: '8083', username: 'admin', password: 'public', topic: 'device/BB-8/command' }, websocket: { enable: 0, // 是否启用 host: '192.168.1.15', port: '1234', reconnect: 1 } } ``` * 如启用mqtt功能,则控制端,可以直接通过MQTT控制BB-8; * 提醒1:应先安装配置好MQTT服务器。 * 提醒2:转发工具应不启用MQTT,否则会出现指令抢夺。 * 如启用websocket功能,则控制端,可以通过TCP Socket、WebSocket、MQTT控制BB-8; * 提醒1:本工具提供TCP Socket、WebSocket服务端 ## 启动: 1. ### 启动服务: * node启动: ```bash node proxy --http_port 1234 --tcp_port 2345 ``` 参数说明: * http_host: 本工具提供的WEB和WebSocket服务绑定的IP;如不设置,则默认为所有ip * http_port:本工具提供的WEB和WebSocket服务的端口 * tcp_host:本工具提供的TCP Socket服务绑定的IP;如不设置,则默认为所有ip * tcp_port:本工具提供的TCP Socket服务的端口 * mqtt_host:本工具要连接到的MQTT服务器地址,如不设置,则不启用mqtt转发功能 * mqtt_port:本工具要连接到的MQTT服务器端口,如不设置则默认为1883 * npm启动: ```bash # 启动服务,支持TCP Socket中转和WebSocket中转 npm run start # 启动服务,支持TCP Socket中转和WebSocket中转,及MQTT中转;如启用该功能,应先安装配置好MQTT服务器 npm run start_mqtt # 如非二次开发,不应使用如下的指令 # 启动服务,并使用nodemon监听文件变更,如不开发不用使用;如启用MQTT该功能,应先安装配置好MQTT服务器 npm run ws npm run mqtt ``` 如果需要自定义端口,可以修改 package.json中的配置 ## 测试: 1. 测试服务: 访问 http://ip:1234/,显示如下控制界面: ![1.WebPanel](imgs/1.WebPanel.png) 2. 使用 Chrome 访问 http://ip:1234/html/bb8/index.html ,打开开发者工具,点击开发者工具左上角的移动设备模拟按钮,并选择iPhone SE设备,然后刷新页面 3. 点击 CONNECT 按键,根据提示,选择BB-8机器人进行链接。成功后,将显示如下界面: 开启websocket后的显示: ![1.connect_BB-8](imgs/2.connect_BB-8.png) 开启mqtt后的显示: ![1.connect_BB-8_MQTT](imgs/3.connect_BB-8_MQTT.png) 4. 连接到BB-8成功后,可以点击界面上的红、蓝、绿灯,BB-8的灯光颜色发生变化,点击下面的方向盘,BB-8会运动 5. 在 `BB-8机器人控制测试与转发工具`界面,点击连接,会收到欢迎消息,然后再发送移动指令,BB-8会运动,发送颜色只看,BB-8的颜色会发生变化: ![4.WebPanel_test](imgs/4.WebPanel_test.png) 6. 以上测试全部完成后,就可以使用本工具,对外提供BB-8控制能力了 ## 使用: 1. 要控制BB-8,需要使用下面的指令进行: * 移动指令: ```javascript {"action":"move","x":150,"y":50,"target":"BB-8"} ``` BB-8运动坐标的中心位置为(150,150),x、y的取值范围为0~300,偏离中心点越远,则BB-8运动加速度越大 * 灯光颜色指令: ```javascript {"action":"color","c":[255,0,0]} ``` BB-8灯光通过[R, G, B]三色控制,取值范围为0-255 2. 本工具对外提供两个端口: * http_port对应端口:用于WEB/WebSocket服务 * 网页访问地址:http://ip:端口/ * WebSocket访问地址:ws://ip:端口/ * tcp_port对应端口:用于TCP Socket服务 * tcp访问地址:tcp://ip:端口 3. 使用WebSocket时,发送的指令如下: ```javascript {"action":"move","x":150,"y":50,"target":"BB-8"} {"action":"color","c":[255,0,0],"target":"BB-8"} ``` 提醒:只有`target`指向`BB-8`的指令,才会通过WebSocket转发给`BB-8` 4. 使用TCP Socket时,发送的指令如下: ```javascript {"action":"move","x":150,"y":50} {"action":"color","c":[255,0,0]} ``` 提醒:所有的指令,都会通过WebSocket转发到`BB-8` 5. 使用MQTT时,发送的指令如下: * TOPIC: device/BB-8/command ```javascript {"action":"move","x":150,"y":50} {"action":"color","c":[255,0,0]} ``` 提醒: * 所有的指令,都会通过WebSocket转发到`BB-8` * 如果 [HonestQiao/bb8](https://gitee.com/honestqiao/bb8/tree/websocket/) 启用mqtt,则本工具的mqtt服务应不启用 ## 资料 * [An introduction to the Web Bluetooth API](https://dev.opera.com/articles/web-bluetooth-intro/) * [Opera’s BB-8 Demo](https://github.com/operasoftware/bb8) * [Web Bluetooth API 初探](https://zhuanlan.zhihu.com/p/20657057)