智能硬件软件三套(含源码和开发文档)

时间:2024-02-20 12:36:20

1、概述

智能硬件软件三套,包括:

1、智能硬件固件,智能硬件操作系统一般是Android,Linux和RTOS(如freertos)。这里说的智能硬件固件是:Android系统的launcher app,linux系统的主应用程序,RTOS上的完整固件。

2、APP是指智能硬件配套的APP,可以说手机APP,小程序或者公众号。

3、admin,后台管理系统,一般实现智能硬件和APP的运营管理功能。

 

本文描述的一个批量量产智能硬件的软件,具体硬件形态是儿童陪伴机器人,操作系统是Android。主要阐述与一般APP相比、智能软件软件区别性内容,包括:项目软件架构,MQTT 协议参考。

2、软件架构

1、软件模块介绍

image.png

 

 智能硬件软件一般都会有一个需求是APP与智能硬件之间全双工实时通讯,这个需求通常实现方案是:APP和后台,智能硬件与后台都实现长连接。在介绍长连接前,先总体介绍项目软件:

1、APP,是Android和iOS APP,技术方案是:采用cordova跨平台框架进行打包webapp 相关内容请访问 http://cordova.apache.org/   web渲染采用react框架 相关内容请访问 https://facebook.github.io/react/ ; UI采用ant框架 相关内容请访问 https://mobile.ant.design/index-cn 。 APP与后台的长连接是用socket.io实现的websocket,短连接是HTTP1.1。

 

2、admin是 node.js为webServer,react结合redux的前端框架进行封装,功能对于智能硬件后台管理来说,比较特别的功能是智能硬件mac地址的导入,导入mac的硬件才可以接入正常接入。

 

3、智能硬件固件,本项目是android系统,智能硬件固件包括andorid SDK以及luancher APP。Android SDK是支持智能硬件各类驱动的Android系统(如显示屏驱动,触控模块驱动,按键驱动等)。luancher APP与后台的短连接是HTTP1.1,长连接是MQTT协议。luancher APP主要实现智能硬件各类交互和业务功能,如类似智能音箱的语音交互功能,与APP的语音IM功能,点播音视频功能,系统升级功能等。另外,对于android系统带屏幕的智能硬件产品,一般也会集成不少APP来丰富产品功能。

 

4、Beckend 是后台的主要业务服务器,包括手机APP websocket server端,手机APP和智能硬件固件手机APP HTTP接口的业务,Rabbitmq的消息生产和消费。

 

5、MQTT server 是基于Rabbitmq配置而成,实现MQTT协议到后台消息队列的转换。

 

2、长连接

1、原理描述

image.png

 

 APP与后台的长连接实现的方案很多,本项目的方案是websocket。智能硬件与后台采用的是mqtt协议,采用mqtt的原因是在智能硬件则更加通用,android,linux,rtos都有成熟方案支持mqtt。

 APP启动连接到Backend的websocket server,APP即可与backend实时双通;

 智能硬件接入到mqtt server需要user和password,每台硬件的mqtt user需要唯一,可以基于硬件mac地址生成user,password 可以用生成uuid。智能硬件设备启动后,按约定生成的mqtt user和 password登录到mqtt server,实现与mqtt server 实时双通。

  通过智能硬件的mqtt user和APP的user的绑定,可以将智能硬件和APP关联起来。在产品需求中,智能硬件与APP是一对多的关系,即一台智能硬件可以绑定多个APP用户,通过APP进行绑定和解绑,所以mqtt user和 app user在数据库中是一对多关系。

2、数据库设计

以下是智能硬件(机器人)表,其中包含mqtt user和mqtt password

 

DROP TABLE IF EXISTS `robot`;

CREATE TABLE `robot` (

`id` int(11) unsigned NOT NULL AUTO_INCREMENT,

`code` varchar(255) NOT NULL COMMENT \'机器人标识\',

`avatar` varchar(255) NOT NULL DEFAULT \'\' COMMENT \'头像\',

`nickname` varchar(255) NOT NULL DEFAULT \'\' COMMENT \'昵称\',

`birthday` varchar(255) NOT NULL DEFAULT \'\' COMMENT \'生日\',

`gender` tinyint(1) unsigned NOT NULL DEFAULT \'0\' COMMENT \'性别:1男,2女\',

`version` varchar(255) NOT NULL DEFAULT \'\' COMMENT \'当前版本\',

`alive_time` datetime DEFAULT NULL COMMENT \'最后**时间\',

`token` varchar(255) NOT NULL DEFAULT \'\' COMMENT \'登录token\',

`refresh_token` varchar(255) NOT NULL DEFAULT \'\' COMMENT \'刷新token\',

`expire_time` datetime DEFAULT NULL COMMENT \'最后有效时间\',

`mqtt_username` varchar(255) NOT NULL DEFAULT \'\' COMMENT \'mqtt user\',

`mqtt_password` varchar(255) NOT NULL DEFAULT \'\' COMMENT \'mqtt password\',

`ip` varchar(20) NOT NULL DEFAULT \'\' COMMENT \'机器人ip\',

`model` varchar(255) NOT NULL DEFAULT \'\' COMMENT \'机器人型号\',

`public_id` varchar(255) NOT NULL DEFAULT \'\' COMMENT \'机器人id\',

`sn_no` varchar(255) NOT NULL DEFAULT \'\' COMMENT \'底部sn号\',

`mac` varchar(255) NOT NULL DEFAULT \'\' COMMENT \'Mac地址\',

`update_time` datetime NOT NULL,

`create_time` datetime NOT NULL,

`delete_time` datetime DEFAULT NULL,

`anti_addiction_rest_duration` int(11) unsigned NOT NULL,

PRIMARY KEY (`id`),

UNIQUE KEY `code` (`code`),

UNIQUE KEY `token` (`token`),

UNIQUE KEY `refresh_token` (`refresh_token`)

) ENGINE=InnoDB AUTO_INCREMENT=2410 DEFAULT CHARSET=utf8 COMMENT=\'机器人表\';

 

以下是机器人关系表,robot_id是机器人表的id,user_id的APP用户id。

 

DROP TABLE IF EXISTS `robot_relation`;

CREATE TABLE `robot_relation` (

`id` int(11) unsigned NOT NULL AUTO_INCREMENT,

`robot_id` int(11) unsigned NOT NULL COMMENT \'机器人id\',

`user_id` int(11) unsigned NOT NULL COMMENT \'用户id\',

`relation` varchar(255) NOT NULL COMMENT \'关系类型\',

`update_time` datetime NOT NULL,

`create_time` datetime NOT NULL,

`delete_time` datetime DEFAULT NULL,

PRIMARY KEY (`id`),

UNIQUE KEY `relation` (`robot_id`,`user_id`),

KEY `robot` (`robot_id`) USING BTREE,

KEY `user` (`user_id`) USING BTREE

) ENGINE=InnoDB AUTO_INCREMENT=2596 DEFAULT CHARSET=utf8 COMMENT=\'机器人关系表\';

 

 

2、MQTT协议范例


1、向智能硬件单曲点播

 

服务端发送

 

字段

内容

说明

cmd

playNetMusic

命令

playIndex

1

当前播放的索引值

listSource

ximalayaFM

列表资源来源

trackId

4945682.mp3

列表单曲示记

fileSource

ximalayaFM

单曲资源来源

title

1.为什么读唐诗以及如何参与该节目

单曲名称

type

1

播放类型(1=网络专辑、2=网络专题、3=历史播放列表、4=自建列表、5=网络单曲、6=收藏夹、7=本地播放、8=下载单曲标记)

lastOperationDate

 

最后更新时间

url

http://fdfs.xmcdn.com/group5/M09/2C/71/wKgDtVSs5ceiYxw4AED86dBrPGA859.mp3

资源URL

duration

426

时长(秒)

listId

323509

列表ID

total

0

列表单曲总数

pushDate

2018-11-30 10:30:13

推送时间

实例:

{"playIndex":1,"listSource":"ximalayaFM","trackId":"4945682.mp3","fileSource":"ximalayaFM","title":"1.为什么读唐诗以及如何参与该节目","type":1,"lastOperationDate":"","url":"http://fdfs.xmcdn.com/group5/M09/2C/71/wKgDtVSs5ceiYxw4AED86dBrPGA859.mp3","duration":426,"listId":"323509","total":0,"cmd":"playNetMusic","pushDate":"2018-11-30 10:30:13"}

 

2、播放控制(上一首/下一首/播放/暂停)

1)、服务端发送

 

字段

内容

说明

cmd

backward/ forward

backward:下一首

forward: 上一首

playing:播放

pause: 暂停

 

实例:

{"cmd":"backward/forward/playing/pause"}

 

2)、设备端响应

字段

内容

说明

cmd

changeNetMusic

命令

direction

forward

方向(由微信发起)

listId

1ee070679209453c8aeed761707901c4

列表ID(由单曲点播提供)

listSource

ximalayaFM

列表来源(由单曲点播提供)

playIndex

9

播放索引值(由单曲点播提供)

total

total

列表总数(由单曲点播提供)

type

2

列表类型(由单曲点播提供)

 

实例:

{"cmd":"changeNetMusic","direction":"forward","listId":"1ee070679209453c8aeed761707901c4","listSource":"ximalayaFM","playIndex":9,"total":26,"type":2}

 

 

源码和开发资料,欢迎关注公众号“橙狮软件”获取。