本文参考DJI官方提供的上云API实现文档实现,记录在搭建过程中遇到的一些问题及解决方法。
目前对于DJI 无人机接入第三方云平台,主要是基于 MSDK 开发定制 App,然后自己定义私有上云通信协议连接到云平台中。这样对于核心业务是开发云平台,无人机只是其中一个接入硬件设备的开发者来说,重新基于 MSDK 开发 App 工作量大、成本高,同时还需要花很多精力在无人机功能接口适配上,从而导致整体的方案开发进度较为缓慢。
上云 API 的推出主要期望解决开发者重新造轮子的苦恼。对于没有 App 深度定制需求的开发者,直接可以采用 DJI Pilot 2 来和云平台通信,使开发商可以更加专注于上云业务接口的开发与实现。

一、生成license
- 选择左侧栏的 "Apps "。
- 选择右侧的 “CREATE APP” 按钮。
- 选择App Type 为 Cloud API,输入APP Name、分类和描述信息。
- 您会收到一封应用程序激活邮件,以完成 license 的生成。
- 您可以在开发者中心中找到license,将APP ID,App Key 和 App License 复制粘贴到前端配置文件(src/api/http/config.ts)中。
二、前端环境配置
安装Node.js 和 npm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
source ~/.bashrc
nvm install --lts
node -v
环境配置
前端示例代码下载:https://github.com/dji-sdk/Cloud-API-Demo-Web
配置文件修改(src/api/http/config.ts)中的参数,填上申请的appId,appKey 和 appLicense。
注意:
- 如果不使用直播功能,只需要先设置baseURL(http://192.168.1.1:6789/) 和 websocketURL(ws://192.168.1.1:6789/api/v1/ws)其中IP替换成后端IP即可。
- 如果使用地图还需要去高德地图官网申请amapKey(web端)。
- rtmp 参数为流媒体服务器地址。
在根目录下打开控制台,运行命令安装依赖。
npm install
安装完成可以在根目录下看到一个node_modules的目录。
运行命令启动服务
npm run serve
# 这里之前使用ubuntu默认安装node 10.X版本时,遇到node版本较低问题,后通过npm 安装的方式安装较新版本的node解决
# nvm use --xx 切换node版本
至此,前端以及配置完成,可通过http://Ip:8080/project打开前端界面查看,目前由于未配置与启动后端,无法登陆。
三、后端配置
后端依赖JAVA(必须11.0版本以上)、EMQX 、MySQL、Redis 。
Java安装
使用IntelliJ IDEA 进行后端代码管理,可以直接通过IntelliJ IDEA进行JAVA安装。使用IntelliJ IDEA新建项目时,安装JDK。
EMQX安装
curl -s https://assets.emqx.com/scripts/install-emqx-deb.sh | sudo bash
sudo apt-get install emqx
sudo systemctl start emqx # 启动
sudo systemctl stop emqx # 停止
sudo systemctl status emqx # 状态
EMQX安装完成后可通过 http://localhost:18083/(localhost 可替换为实际 IP 地址)访问控制台,初始账户名admin密码public
mysql安装
sudo apt install mysql-server
sudo cat /etc/mysql/debian.cnf # 查看用户名和密码
# 在使用默认root连接mysql时遇到ERROR 1698 (28000): Access denied for user 'root'@'localhost'表明在使用root登录被mysql拒绝。
# 使用 sudo 权限登录 MySQL
sudo mysql
# 在 MySQL 命令行中执行以下命令,将 root 用户的认证方式修改为 mysql_native_password 并设置新密码
# 请将 'new_password' 替换为你想要设置的新密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';
# 刷新权限使修改生效
FLUSH PRIVILEGES;
# 退出 MySQL 命令行
EXIT;
# 使用以下命令登录mysql,密码为上面设置
mysql -u root -p
# 启动
sudo systemctl start mysql
# 停止
sudo systemctl stop mysql
# 重启
sudo systemctl restart mysql
# 查看状态
sudo systemctl status mysql
Redis安装
sudo apt install lsb-release curl gpg
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
sudo apt-get update
sudo apt-get install redis
# 启动
sudo systemctl start redis-server
# 重启
sudo service redis-server restart
# 关闭
sudo service redis-server stop
查看状态
sudo service redis-server status
环境配置
后端示例代码下载:https://github.com/dji-sdk/DJI-Cloud-API-Demo
导入sql文件
mysql -u root -p
source ./DJI-Cloud-API-Demo/sqlcloud_sample.sq
IntelliJ IDEA安装Lombok插件,安装后重启IDEA即可。如果在软件里未找到Lombok可以通过JetBrains Marketplace找到后离线安装即可 。
打开配置文件(src/main/resources/application.yml),修改配置文件中的mysql配置、mqtt配置、redis配置以及对象存储服务器配置。
注意:如果mqtt不使用匿名登录,还需要修改数据库中,manage_user表中的mqtt账户名和密码。
修改完成后,在工程目录下的pom.xml右键,同步Maven项目,下载依赖。
运行"sample/src/main/java/com/dji/sample/CloudApiSampleApplication.java"程序,运行后端,这里可能会遇到部分文件缺失的情况,可根据实际情况以及IDEA提示完成即可。
至此,后端也已经配置完成。
四、Pilot 2登录程序
打开 pilot 2,进入主页面,点击云服务进入。
选择右下角的开放平台。
输入前端访问地址(默认地址:http://ip:8080/pilot-login ,此处“ip”需要替换为用户实际使用的ip地址。),点击右上角的“连接”按钮进入。
账户名:pilot,密码:pilot123,点击”Login“按钮登录。
如果主页面显示 Connected,说明已经登录成功,遥控器已经连接上 emqx 服务器,并且开始推送数据。现在demo 就已经跑起来了,你可以点击遥控器上的返回按钮返回主页面了,只要不点击右上角的 Log Out 按钮,你就仍然处于登录状态。
已经可以在主页面看到工作空间的信息了,只要字体是深黑色,说明你依旧处于登录状态,遥控器以及飞机的数据会持续的推送中。如果想要退出工作空间,只需要再次点击进入,然后点击右上角的退出按钮就可以退出了,遥控器和飞机就不会再推送数据了。
五、Web端登录程序
登录页面默认地址:http://ip:8080/project ,此处“ip”需要替换为用户实际使用的ip地址。
账户名:adminPC
密码:adminPC