TCP/IP 控制外部设备
插件的新建过程请参考 IO 控制案例,新建插件后请遵循
userAPI.lua
,httpAPI.lua
,daemon.lua
,ui/pages/Main.tsx
的顺序去完成插件业务逻辑的开发。
示例流程
userAPI.lua 模块
---@param position string
---@param socket number
function userApiModule.moveTo(position, socket)
TCPWrite(socket, "moveTo_absolutePosition"..","..position.."\n")
TCPRead(socket, 3 , 'string')
end
function userApiModule.getPosition()
local socket = GetVal('TCP_SOCKET_NAME')
local result = nil
local err = nil
if socket then
TCPWrite(socket, "get_position\n")
err, result = TCPRead(socket, 3, "string")
end
return result
end
httpAPI.lua 模块
---移动升降柱
httpModule.moveTo = function(params)
local socket = GetVal('TCP_SOCKET_NAME')
if socket then
userAPI.moveTo(params.position, socket)
end
return {
--- Your responce data
--- example: status = true
}
end
---初始化 TCP 连接
httpModule.init = function(params)
local result = CreateTCPConnection(params.ip, params.port, 10000)
if result.socket then
SetVal('TCP_SOCKET_NAME', result.socket)
end
return {
--- Your responce data
--- example: status = true
}
end
daemon.lua 模块
local userAPI = require('userAPI')
local function handleInLoop()
local data = userAPI.getPosition()
if data then
mqtt.publish({ position = data })
else
mqtt.publish({})
end
end
ui/pages/Main.tsx 模块
import { Button } from '@dobot-plus/components'
import { useEffect, useState } from 'react'
import { http } from '@dobot/http/http'
import { DobotPlusApp } from '@dobot/components/DobotPlusApp'
function App() {
const [position, setPosition] = useState(0)
function handleButton1Click() { http.moveTo({ position: position + 50 }) }
function handleButton2Click() { http.moveTo({ position: position - 50 }) }
function handleMessage(msg: object | string) {
const { position } = msg as { position: number }
if (position) {
setPosition(position)
}
}
useEffect(() => {
http.init({
ip: '192.168.5.1',
port: '123'
})
}, [])
return (
<div className="app">
<DobotPlusApp useMqtt={true} onMessage={handleMessage}>
<Button type="primary" onClick={handleButton1Click}>Move up</Button>
<Button type="primary" onClick={handleButton2Click}>Move down</Button>
<span>{position}</span>
</DobotPlusApp>
</div>
)
}
export default App
运行调试
调试插件指令可进行以下两种情形的开发工作:
- 仅调试页面
- 连接真机进行调试
dpt dev
在执行上述命令时,命令行会提示开发者是否连接真机进行测试
$ dpt dev
? Debug lua on real device? Yes
? Please check the device IP: 192.168.5.1 and port: 22001 (y/n)
开发者需要确定:
- 控制器的真实IP是否正确,默认是
192.168.5.1
- 控制器服务端口是否正确,默认是
22001
- SFTP 服务相关配置是否正确
上述配置的详细信息请查看 dpt.json
配置文件
{
"ip": "192.168.5.1", // 控制器 IP
"port": 22001, // 控制器端口
"pluginPort": 22100
}
构建插件
在完成插件的开发、调试、优化后,可执行最终的构建工作,执行
dpt build
在程序顺利执行完毕后,当前文件夹下会出现 dist
文件夹和 output
文件夹。
dist
文件夹中存放着本次构建后的插件代码,用于开发者检查构建结果output
文件夹存放着压缩后的zip
文件,文件名格式为<插件名>-<版本号>.zip
,该文件为实际在客户端导入使用的的插件。