当前位置: 首页 > news >正文

【HZ-T536开发板免费体验】无需死记 Linux 命令!用 CangjieMagic 在 HZ-T536 开发板上搭建 MCP 服务器,自然语言轻松控板

目录

引言:为什么需要 “自然语言控板”?

一、准备工作:硬件与软件清单

1. 硬件环境

2. 软件环境

二、核心原理:MCP 服务器与 CangjieMagic 的协同工作

三、实战开发:在 HZ-T536 上搭建 MCP 服务器

1. 搭建开发环境

2. 设计 MCP 服务器

工具设计

LinuxCmdAgent智能体的设计

3. 编写启动代码

4. 编译与部署

四、测试验证:用自然语言控制开发板

五、优化与扩展

结语


本文首发于电子发烧友论坛:

【HZ-T536开发板免费体验】5- 无需死记 Linux 命令!用 CangjieMagic 在 HZ-T536 开发板上搭建 MCP 服务器,自然语言轻松控板 - 北京合众恒跃科技有限公司 - 电子技术论坛 - 广受欢迎的专业电子论坛!引言:为什么需要 “自然语言控板”?痛点引入 :嵌入式开发中,开发者常需通过 SSH 等工具登录开发板,手动输入复杂的 Linux 命令(如ls -l、gpio readall、ifconfig等 https://bbs.elecfans.com/jishu_2498907_1_1.html

引言:为什么需要 “自然语言控板”?

痛点引入 :嵌入式开发中,开发者常需通过 SSH 等工具登录开发板,手动输入复杂的 Linux 命令(如ls -lgpio readallifconfig等)进行调试或控制,不仅门槛高,还容易记错命令。

解决方案 :MCP(Machine Control Protocol)服务器可将自然语言指令转换为底层操作,结合 Cangjie Magic 的自然语言处理能力,实现 “用说话 / 文字控制开发板”。

本文目标 :以 HZ-T536 嵌入式开发板为例,手把手教你搭建 MCP 服务器,让开发板 “听懂” 你的指令。

一、准备工作:硬件与软件清单

1. 硬件环境

  • HZ-T536_MiniEVM开发板(是一款基于全志T536系列处理器设计的工业评估板,集成了4核Cortex-A55和RISC-VE907协处理器);
  • 电源适配器、网线(或 Wi-Fi 模块)、PC 机(用于开发和测试)。

2. 软件环境

  • 开发板系统:Linux(这里使用的是WSL2 + Ubuntu);
  • Cangjie SDK和交叉编译工具链(参考我的博文:【HZ-T536开发板免费体验】Cangjie Magic调用视觉语言大模型(VLM)真香,是不是可以没有YOLO和OCR了?-CSDN博客);
  • CangjieMagic SDK(基于仓颉编程语言的智能体框架,可以访问https://gitcode.com/Cangjie-TPC/CangjieMagic/ 下载);
  • MCP 协议测试软件(本文使用的是字节跳动Trae的VS Code插件版);
  • 开发工具:VS Code。

二、核心原理:MCP 服务器与 CangjieMagic 的协同工作

  • MCP 服务器作用 :运行在开发板上,负责接收客户端的自然语言指令,解析后执行对应操作(如调用系统命令、控制 GPIO 等),并返回结果。
  • Cangjie Magic 角色 :构建MCP服务器,同时提供自然语言理解能力,将用户输入的文本(如 “查看开发板 IP 地址”“点亮 LED1”)转换为机器可识别的指令(如ifconfiggpio write 1 1)。
  • 工作流程 :
    1. MCP客户端发送自然语言指令到 HZ-T536 的 MCP 服务器;
    2. MCP 服务器利用DeepSeek的大语言模型能力,生成对应的 Linux 命令或 API 调用;
    3. MCP服务器执行指令,获取HZ-T536开发板上的运行结果(如命令输出、硬件状态);
    4. MCP服务器将结果返回给客户端,以自然语言形式展示(如 “IP 地址为 192.168.1.100”)。

三、实战开发:在 HZ-T536 上搭建 MCP 服务器

1. 搭建开发环境

有关如何在嵌入式开发板上部署Cangjie Magic程序,可以参考我前面的博文 :【HZ-T536开发板免费体验】Cangjie Magic调用视觉语言大模型(VLM)真香,是不是可以没有YOLO和OCR了?-CSDN博客。

2. 设计 MCP 服务器

工具设计

MCP服务器的核心是提供一个processUserInput的工具,它负责处理用户的输入问题,并将输入问题提交给基于DeepSeek的智能体LinuxCmdAgent,由其转换为Linux命令并在开发板上执行,再将执行结果返回给用户。

@tool[description: "对系统进行维护",parameters: {userInput: "用户输入"}
]
func processUserInput(userInput: String): String {let linuxCmdAgent =  LinuxCmdAgent()let result = linuxCmdAgent.chat(userInput)println(result)return result
}

LinuxCmdAgent智能体的设计

LinuxCmdAgent智能体是实际实现功能的核心。它调用两个内部工具,一个是executeCommand,用于执行Linux命令并返回结果,另一个printWarningMsg对于可能造成系统安全问题的指令打印警告信息。在LinuxCmdAgent智能体的设计中,我加入了安全性检查,避免执行rm -r -f这样的危险指令。在本项目中我没有将LinuxCmdAgent智能体暴露给MCP用户,就是因为Cangjie Magic会把智能体的所有工具都公开给用户,我担心MCP客户端会直接调用executeCommand工具。

func newProcess(name: String, args: Array<String>, env!: Array<(String, String)> = [], redirectErr!: Bool = true): SubProcess {let allEnv = HashMap(Process.current.environment)allEnv.add(all: env)if (redirectErr) {return Process.start(name, args,environment: allEnv,stdIn: ProcessRedirect.Pipe,stdOut: ProcessRedirect.Pipe,stdErr: ProcessRedirect.Pipe)} else {return Process.start(name, args,environment: allEnv,stdIn: ProcessRedirect.Pipe,stdOut: ProcessRedirect.Pipe)}
}func run_command(cmd: String, args: Array<String>) : String {let subProcess = newProcess(cmd, args)let outReader = StringReader<InputStream>(subProcess.stdOut)let out = outReader.readToEnd()subProcess.wait(timeout: Duration.minute * 1)    return(out)
}@tool[description: "执行Linux指令",parameters: {cmd: "Linux指令"}
]
func executeCommand(cmd: String): String {println(">> 执行指令: ${cmd} ")let arr = cmd.split(" ")let result = run_command(arr[0], arr.slice(1, arr.size - 1))println(result)return result
}@tool[description: "打印有关指令的警告信息",parameters: {cmd: "Linux指令"}
]
func printWarningMsg(cmd: String): String {let result = ">>>>>> 该指令存在风险: ${cmd} <<<<<"println(result)return result
}//================================================
@agent[model: "deepseek:DeepSeek-V3",description: "执行用户指令",tools: [executeCommand, printWarningMsg]
]
class LinuxCmdAgent {@prompt("""根据用户输入的信息,返回对应的Linux指令。判断Linux指令是否对系统安全构成威胁。如果安全,则执行该指令一次。如果不安全,则打印该指令的警告信息。仅使用已有工具,并使用中文返回工具的执行结果,不要做任何翻译和格式上的处理。""")
}

3. 编写启动代码

下面给出启动代码:

main() {Config.env["DEEPSEEK_API_KEY"] = "5F1e-jbL_-xxxxxxxxxxxxxx"Config.env["DEEPSEEK_BASE_URL"] = "https://maas-cn-southwest-2.modelarts-maas.com/v1/infers/xxxxxxxxxxxx/v1/"Config.logLevel = "INFO"Config.logFile = "./logs/mcp-server.log"println("MCP Server is starting ...")SseMCPServer.startWith([processUserInput], '0.0.0.0', 8000)
}

我的代码采用的华为云的DeepSeek服务,执行前读者需要先在华为云注册相关的服务并获得API_KEY和URL,并替换掉程序中的相关部分。

4. 编译与部署

执行下面的语句就可以开始交叉编译了:

cjpm build --target aarch64-unknown-linux-gnu

几分钟之后,整个工程就编译完成了。

部署Cangjie Magic程序的方法在前面的【HZ-T536开发板免费体验】Cangjie Magic调用视觉语言大模型(VLM)真香,是不是可以没有YOLO和OCR了?-CSDN博客已经详细介绍了,这里不再赘述。

四、测试验证:用自然语言控制开发板

启动服务器 :在 HZ-T536 上运行./mcp_server,日志显示 “MCP Server is starting ...”就表明程序正确启动。

image.png

用浏览器测试 :可以使用电脑上的浏览器访问开发板的如下地址:http://192.168.1.102:8080/sse。如果浏览器显示如下内容就表示MCP服务器正常工作了。

image.png

上面的信息表示服务器正常启动,并发送握手信息。

功能测试 :

测试MCP的工具有很多,这里我采用VSCode的Trae插件,也可以使用Trae IDE(直接到 trae.cn 下载最新版即可,Windows / macOS均支持)。

打开 IDE或者Trae插件 → 右上角 AI 图标 → 设置 → MCP。点击 “添加 MCP Server” → 手动配置,填入下面的信息:

{"mcpServers": {"hz-t536": {"url": "http://192.168.1.102:8080/sse","disabled": false,"autoApprove": []}}
}

在对话栏点击@选择“Builder with MCP”。

image.png

然后在对话框中输入“使用hz-536查询操作系统版本”。TRAE经过思考后它找到了我们的MCP服务器,并试图调用其工具,显示如下提示:

image.png

点击run按钮执行该工具。从开发板的控制台可以看到大模型生成了uname -a 指令并获得结果。

image.png

而在TRAE中也可以看到正确返回版本信息。

image.png

我们可以再输入“使用hz-t536查询存储设备空间使用情况”命令。从控制台看出正确地生成了指令:

image.png

而TRAE返回如下结果:

image.png

由此可见,TRAE调用我们的工具得到正确的结果。
我们还可以尝试命令“使用hz-t536删除当前目录所有文件​”。可以看到大模型检测到指令风险,拒绝执行:

image.png

至此,测试表明MCP服务器一切工作正常。

五、优化与扩展

  • 指令库扩展 :通过 CangjieMagic 增加更多嵌入式场景指令(如 “读取温湿度传感器数据”“重启开发板”);
  • 安全性增强 :添加用户认证机制;
  • 客户端开发 :开发图形化MCP客户端(Web/APP),支持语音输入(结合语音转文字 API)。

结语

通过 CangjieMagic 与 MCP 服务器的结合,HZ-T536 开发板摆脱了对复杂 Linux 命令的依赖,让嵌入式开发更 “人性化”。这种思路不仅适用于 HZ-T536,还可推广到其他嵌入式平台,降低开发门槛。如果你也觉得记命令头疼,不妨试试这个方案,让开发板 “听懂” 你的需求!

你在嵌入式开发中遇到过哪些命令相关的痛点?欢迎在评论区分享你的想法!

http://www.dtcms.com/a/351786.html

相关文章:

  • Java大厂面试全真模拟:从Spring Boot到微服务架构实战
  • 文本转语音TTS工具合集(下)
  • 【强化学习】区分理解: 时序差分(TD)、蒙特卡洛(MC)、动态规划(DP)
  • 计算机底层硬件实现及运行原理通俗书籍推荐
  • 记一次MySQL数据库的操作练习
  • 把 AI 塞进「空调遥控器」——基于 MEMS 温湿阵列的 1 分钟极速房间热场扫描
  • 如何获取当前页面html元素的外层容器元素
  • vscode或者cursor配置使用Prettier - Code formatter来格式化微信小程序wxss/wxs/wxml文件
  • Vue Flow 设计大模型工作流 - 自定义大模型节点
  • 基于XiaothinkT6语言模型的文本相似度计算:轻量方案实现文本匹配与去重
  • 乳腺癌数据集支持向量机实践学习总结
  • 2025最新的软件测试热点面试题(答案+解析)
  • OnlyOffice 渲染时间获取指南
  • from中烟科技翼支付 面试题2
  • 项目集升级:顶部导览优化、字段自定义、路线图双模式、阶段图掌控、甘特图升级、工作量优化、仪表盘权限清晰
  • 用大语言模型提升语音翻译:一种全新的端到端方法
  • vue2+elementui 表格单元格增加背景色,根据每列数据的大小 颜色依次变浅显示2
  • 「大模型学习」(15)Prompt Tuning → P-Tuning v1 → P-Tuning v2
  • (论文速读)Prompt Depth Anything:让深度估计进入“提示时代“
  • 6.5 el-tree 组件
  • 用大语言模型实现语音到语音翻译的新方法:Scheduled Interleaved Speech-Text Training
  • Research相关的面试(个人)
  • 云服务器的作用
  • yggjs_rbutton React按钮组件v1.0.0 API 参考文档
  • linux、window java程序导出pdf\word、excel文字字体显示异常、字体样式不一样
  • 【lucene】spancontainingquery
  • 8月26日
  • 【QT学习之路】-Qt入门
  • 新型隐蔽恶意软件利用TP-Link、思科等路由器漏洞获取远程控制权
  • ZMC900E如何实现多主站协同控制?