# SkydroidDemo **Repository Path**: WalkeraApp/SkydroidDemo ## Basic Information - **Project Name**: SkydroidDemo - **Description**: No description available - **Primary Language**: Android - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 13 - **Created**: 2023-05-08 - **Last Updated**: 2023-05-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # H16及H30安卓开发示例 ## H16通讯方式 ### 天空端数传接口 ##### 天空端有2路串口,均具备透传功能 ![alt ](http://file.skydroid.xin/H16Receiver.png) * uart0地址:通过本地 UDP 14551 端口接收数据,通过本地 UDP 14552 端口发送数据。 默认波特率 57600 * uart1 地址:通过本地 UDP 13551 端口接收数据,通过本地 UDP 13552 端口发送数据。 默认波特率 115200 ##### 串口调用示例代码 1. 创建连接 ``` try { var datagramSocket = DatagramSocket(14551) datagramSocket.connect(InetAddress.getByName("127.0.0.1"), 14552) } catch (e: IOException) { e.printStackTrace() } ``` 2. 读取数据 ``` var buffer = ByteArray(256) var receivePacket = DatagramPacket(buffer , buffer.size) datagramSocket.receive(receivePacket) ``` 3. 发送数据 ``` var data = "hello uart0".toByteArray() var packet = DatagramPacket( data, data.size) packet.data = data datagramSocket?.send(packet) ``` 4. 关闭连接 ``` datagramSocket.close() ``` ---- ### 遥控器通讯串口 ##### 获取遥控器相关数据 与遥控器通讯采用LocalSocket交互方式。数据传输私有协议,详情请见协议文档 * uart0:用于获取遥控器舵量值,bindCode为"uart0app";uart0为单向通讯,只用来读取摇杆舵量值,不支持数据的写入。 * uart3:用于 读取设置手型, 获取遥控器SN;bindCode为"uart3app",connectCode为"uart3endpoint";双向通讯可收发 ##### LocalSocket调用示例代码 1. 创建连接 ``` try { var localSocket = LocalSocket(LocalSocket.SOCKET_DGRAM) localSocket.bind(LocalSocketAddress("uart3app")) //uart0 单向通讯 所以不需要 调用connect localSocket.connect(LocalSocketAddress("uart3endpoint")) } catch (e: IOException) { e.printStackTrace() } ``` 2. 读取数据 ``` try { var buffer = ByteArray(1024) localSocket.inputStream.read(buffer) } catch (e: IOException) { e.printStackTrace() } ``` 3. 发送数据 ``` try { var buffer = ByteArray(1024) localSocket.outputStream.write(buffer) } catch (e: IOException) { e.printStackTrace() } ``` 4. 关闭连接 ``` try { localSocket?.shutdownInput() } catch (e: IOException) { e.printStackTrace() } try { localSocket?.shutdownOutput() } catch (e: IOException) { e.printStackTrace() } try { localSocket?.close() } catch (e: IOException) { e.printStackTrace() } try { localSocket?.inputStream?.close() } catch (e: IOException) { e.printStackTrace() } try { localSocket?.outputStream?.close() } catch (e: IOException) { e.printStackTrace() } ``` ---- ### 遥控器通讯协议 遥控器通讯协议分为2种 1. 用于解析遥控器舵量,帧头为"SKYDROID:" (目前只用在舵量上) ``` 遥控器回复: "SKYDROID:" + 0xB1 + 数据len + 数据 + SUM(BCC异或校验) ``` 2. 用于获取设置手型等,帧头为"fengyingdianzi:" ``` 帧格式:“fengyingdianzi:” + FUN + LEN + DATA + SUM “fengyingdianzi:” 帧头,字符串 FUN 功能字,可以是 0x00到0xFF,代表帧的含义; LEN DATA的长度(不包括帧头、FUN、LEN、SUM)。 DATA 数据,1~255字节 SUM 包括帧头一直到DATA最后一字节的BCC校验和,uint8格式 例: APP发送: “fengyingdianzi:” + 0xA9 +2 + Option1 + Option2 +SUM 遥控器回复: “fengyingdianzi:” + 0xA9 + 2 + ‘O’ + ‘K’ + SUM ``` ## H30通讯方式 ### 天空端数传接口 ##### 天空端有2路串口,均具备透传功能 ![alt ](http://file.skydroid.xin/H30Interface.png) 如上图:1号接口 表示uart1,2号接口表示 uart2 * uart1地址:通过TCP 访问192.168.144.101:14550端口进行数据收发 默认波特率 57600 * uart2 地址:通过TCP 访问192.168.144.101:14551端口进行数据收发 默认波特率 115200 ##### 串口调用示例代码 1. 创建连接 ``` val CONNECTION_TIMEOUT = 20 * 1000 //20s try { var socket = Socket() socket.connect(new InetSocketAddress("192.168.144.101", 14550), CONNECTION_TIMEOUT); var outputStream:BufferedOutputStream = BufferedOutputStream((socket.getOutputStream())) var inputStream:BufferedInputStream = BufferedInputStream((socket.getInputStream())) } catch (e: IOException) { e.printStackTrace() } ``` 2. 读取数据 ``` var buffer = ByteArray(256)//数组长度自定义 inputStream.read(buffer) ``` 3. 发送数据 ``` var data = "hello uart0".toByteArray() outputStream.write(buffer); outputStream.flush(); ``` 4. 关闭连接 ``` inputStream.close() outputStream.close() socket.close() ``` ### 遥控器通讯串口 ##### 获取遥控器相关数据 与遥控器通讯采用硬件串口交互方式。数据传输私有协议,详情请见协议文档 * uart path "/dev/ttyMSM1",uart baudrate "57600" ##### 串口调用示例代码 1. 创建连接 ``` var mSerialPortConnection = SerialPortConnection.newBuilder("/dev/ttyMSM1", 57600).build() mSerialPortConnection?.setDelegate(object : SerialPortConnection.Delegate { override fun received(bytes: ByteArray, size: Int) { //数据回调 } override fun connect() { //连接成功回调 } }) //打开串口 mSerialPortConnection?.openConnection() ``` 2. 发送数据 ``` var data = "hello uart0".toByteArray() mSerialPortConnection?.sendData() ``` 3. 关闭连接 ``` mSerialPortConnection?.closeConnection() ``` ### 遥控器通讯协议 遥控器通讯协议 1. 用于获取设置手型等,帧头为"fengyingdianzi:" ``` 帧格式:“fengyingdianzi:” + FUN + LEN + DATA + SUM “fengyingdianzi:” 帧头,字符串 FUN 功能字,可以是 0x00到0xFF,代表帧的含义; LEN DATA的长度(不包括帧头、FUN、LEN、SUM)。 DATA 数据,1~255字节 SUM 包括帧头一直到DATA最后一字节的BCC校验和,uint8格式 例: APP发送: “fengyingdianzi:” + 0xA9 +2 + Option1 + Option2 +SUM 遥控器回复: “fengyingdianzi:” + 0xA9 + 2 + ‘O’ + ‘K’ + SUM ```