跳到主要内容

进阶教程

web 端其余功能

坐标系操控机械臂(COORDCTRL)

坐标控制参数说明

坐标控制参数含义

  • X、Y、Z:分别代表机械臂末端关节末端点的 X 轴、Y 轴和 Z 轴位置坐标
  • T:代表机械臂末端点在竖直平面内的角度,通过坐标点逆解出各关节需要转动的角度
  • R:代表手腕关节 2 的转动角度(详见 AngleCtrl 功能中的"R+ DG"列)
  • G:代表末端关节的转动角度(详见 AngleCtrl 功能中的"G+ DG"列)
  • INIT:点击后末端点会复位至产品开机时的中位位置

以上六个参数均可通过"+"和"-"按钮进行调节。

绘画功能

按钮功能说明

绘画按钮功能功能解释
HORIZONTAL DRAG用鼠标操控机械臂在水平平面绘画
VERTICAL DRAG用鼠标操控机械臂在垂直平面绘画

绘画功能界面

注意
  1. 开启绘画功能前,请确保鼠标光标位于绘画区域外,以免功能启动时机械臂快速移至光标所在坐标,影响绘画效果。
  2. LED 亮度值:0→255(关闭→最亮)

JSON 指令操控机械臂

为什么用 JSON 指令控制机械臂?

因为 JSON 是一种人和机器都能轻松理解的通用语言,能让控制机械臂变得像点菜一样简单、灵活。

发送 JSON 指令的方式

web 端发送指令

在 Web 端使用界面中,预留有指令输入框可以发送 JSON 指令对机械臂进行设置或控制等操作。(缺点部分 JSON 指令需要反馈的内容较长会显示不全)

Web 端指令输入框

  1. 根据开始工作部分连接上机械臂的 WiFi 并打开 Web 端使用界面
  2. 在 Web 端使用界面中,找到 "FEEDBACK INFORMATION" 下的输入框
  3. 在此处输入对应的 JSON 指令与机械臂进行通信
  4. 点击 "SEND" 发送后,JSON 指令反馈的信息会在输入框上方显示
提示

web 端中已经准备好每个功能对应的 JSON 代码,点击** INPUT **按钮,即可复制到输入框,以便直接发送和二次修改。

web 端 JSON 代码输入

Python-HTTP 请求通信

注意

不删除虚拟环境相关文件的情况下一次虚拟环境配置一次虚拟环境配置。之后再使用激活即可。
激活虚拟环境方法:

  1. cd 打开解压后的文件夹路径
  2. 输入命令:(虚拟环境名称)\Scripts\activate
.\roarmpython-env\Scripts\activate

确认机械臂当前的 IP 地址:

  • 如果机械臂 WIFI 模式仅处于 AP 模式,则 IP 地址为 192.168.4.1;

  • 如果机械臂 WIFI 模式处于 STA 模式,则可以在机械臂的 OLED 屏幕上获得该机械臂的 IP 地址。 使用以下命令来运行 HTTP 请求通信程序

    python http_simple_ctrl.py (机械臂 IP 地址)
注意

上述两种通信方式,机械臂都需要与该脚本运行的设备处于同一个局域网内。

Python-串口通信

  1. 使用 USB 线通过 Type-C 接口(上图中的 9 号接口)将 PC 与机械臂进行连接。

  2. 在“开始”中的搜索栏中搜索设备管理器查看新插入的端口号,这里新插入的为 COM20,不同电脑插入的端口号不一样,记住机械臂接入的端口号。

    设备管理器

    如果设备管理器中没有显示端口,从操作选项中选择添加过时硬件选项进行端口添加。

    添加过时硬件

  3. 使用以下命令来运行串口通信程序,COM 端口号用上面设备管理器里显示的端口号。

    python serial_simple_ctrl.py (COM 端口号)

    运行完成后,可以看见机械臂进行初始化后的返回信息。在这个界面中可以发送 JSON 格式的指令,也可以获取机械臂的反馈信息,从而与机械臂进行通信。

    串口通信

WiFi 配置


设置默认 WiFi 模式

CMD_WIFI_ON_BOOT

{"T":401,"cmd":3}

设置开机后 WIFI 的默认工作模式

  • cmd:默认工作模式代号,0:关闭,1:AP,2:STA,3:AP+STA。

设置 WiFi 模式

CMD_SET_AP

{"T":402,"ssid":"RoArm-M3","password":"12345678"}

设置 WIFI 为 AP 模式,建立 WiFi 热点。

  • ssid:AP 模式下 WIFI 的名称(SSID),最大长度 32 个字符。
  • password:AP 模式下 WIFI 的密码,最大长度 64 个字符。

CMD_SET_STA

{"T":403,"ssid":"yourWiFiName","password":"yourWiFiPassword"}

设置 WIFI 为 STA 模式,连接到现有的 WiFi 网络。

  • ssid:STA 模式下要连接的 WiFi 网络的名称(SSID),最大长度 32 个字符。
  • password:STA 模式下要连接的 WiFi 网络的密码,最大长度 64 个字符。

CMD_SET_APSTA

{"T":404,"ap_ssid":"RoArm-M3","ap_password":"12345678","sta_ssid":"yourWiFiName","sta_password":"yourWiFiPassword"}

设置 WIFI 为 AP+STA 模式,同时连接到现有的 WiFi 网络。

  • ap_ssid:AP 模式下 WIFI 的名称(SSID),最大长度 32 个字符。
  • ap_password:AP 模式下 WIFI 的密码,最大长度 64 个字符。
  • sta_ssid:STA 模式下要连接的 WiFi 网络的名称(SSID),最大长度 32 个字符。
  • sta_password:STA 模式下要连接的 WiFi 网络的密码,最大长度 64 个字符。

使用该指令,机械臂将会连接到现有的 WIFI,同时建立一个名为 RoArm-M3 的热点。此模式下,OLED 屏幕上会第一行会显示 AP 的 WIFI 名称,第二行会显示无线网络分配的 ip 地址。


查看当前 WiFi 信息

CMD_WIFI_INFO

{"T":405}

查看机械臂当前 WIFI 信息。 返回值如下:

{"ip":"192.168.10.90","rssi":-50,"wifi_mode_on_boot":3,"sta_ssid":"yourWiFiName","sta_password":"yourWiFiPassword","ap_ssid":"RoArm-M3","ap_password":"12345678"}
  • ip:当前连接的 WiFi 网络的名称(SSID)。
  • rssi:当前连接的 WiFi 网络的信号强度,若机械臂仅在 AP 模式下,该值为 0。
  • wifi_mode_on_boot:当前连接的 WiFi 模式,0:关闭,1:AP,2:STA,3:AP+STA。
  • sta_ssid:设置的 STA 模式下要连接的 WiFi 网络的名称(SSID)。
  • sta_password:STA 模式下要连接的 WiFi 网络的密码。
  • ap_ssid:AP 模式下 WIFI 的名称(SSID)。
  • ap_password:AP 模式下 WIFI 的密码。

生成 WiFi 配置文件

WiFi 配置文件是储存在机械臂的 flash 内存中的 wifiConfig.json 文件,文件内容如下:

{"wifi_mode_on_boot":3,"sta_ssid":"JSBZY-2.4G","sta_password":"waveshare0755","ap_ssid":"RoArm-M3","ap_password":"12345678"}

CMD_WIFI_CONFIG_CREATE_BY_STATUS

{"T":406}

根据当前 WIFI 状态生成 WiFi 配置的 wifiConfig.json 文件。 使用该指令后,机械臂会根据当前的 WIFI 状态生成 wifiConfig.json 文件,如果之前没有生成过该文件,则会在 flash 内存中创建一个新的 wifiConfig.json 文件;如果之前已经生成过该文件,则会覆盖原有的 wifiConfig.json 文件。

CMD_WIFI_CONFIG_CREATE_BY_INPUT

{"T":407,"mode":3,"ap_ssid":"RoArm-M3","ap_password":"12345678","sta_ssid":"JSBZY-2.4G","sta_password":"waveshare0755"}

将输入的信息写入 flash 内存中的 wifiConfig.json 文件中。

  • mode:WiFi 模式代号,0:关闭,1:AP,2:STA,3:AP+STA。

关闭 WiFi 连接

CMD_WIFI_STOP

{"T":408}

关闭 WiFi 连接。

机械臂运动控制(MOVING CTRL)

机械臂 JSON 指令控制

这部分是一套机械臂的 JSON 指令集,每条指令对应一个动作,通过 Web 端发送给机械臂执行。


简单控制指令

初始化 / 状态查询

CMD_MOVE_INIT

{"T":100}

让机械臂所有关节转动到初始位置。

CMD_SERVO_RAD_FEEDBACK

{"T":105}

读取当前各关节的弧度值和负载值。 反馈的信息包括:

  • x、y、z:分别代表末端点 X 轴、Y 轴、Z 轴的坐标。
  • tit、b、s、e、t、r、g:分别代表末端关节姿态、基础关节、肩关节、肘关节、手腕关节 1、手腕关节 2、末端关节角度,以弧度制形式显示。
  • tB、tS、tE、tT、tR:分别代表基础关节、肩关节、肘关节、手腕关节 1、手腕关节 2 的负载。
  • torswitchB、torswitchS、torswitchE、torswitchT、torswitchR、torswitchG:分别代表基础关节、肩关节、肘关节、手腕关节 1、手腕关节 2、末端关节的扭矩开关状态(0:关闭扭矩锁;1:开启扭矩锁)。
  • v:代表当前电压,单位:0.01V
单关节控制

CMD_SINGLE_JOINT_CTRL

{"T":101, "joint":0, "rad":0, "spd":0, "acc":10}

控制单个关节转动到指定弧度。

  • joint:关节编号(1~6) 关节序号含义: 1:BASE_JOINT 基础关节 2:SHOULDER_JOINT 肩关节 3:ELBOW_JOINT 肘关节 4:WRIST_JOINT 手腕关节 1 5:ROLL_JOINT 手腕关节 2 6:EOAT_JOINT 末端关节

    机械臂关节示意图

  • rad:目标弧度 各关节角度范围(弧度制):

    关节名称初始值范围转动方向
    BASE_JOINT0-3.14~3.14增加向左转,减少向右转
    SHOULDER_JOINT0-1.57~1.57增加向前转,减少向后转
    ELBOW_JOINT1.570~3.14增加向下转,减少向反方向转
    WRIST_JOINT0-1.57~1.57增加向下转,减少向上转
    ROLL_JOINT0-3.14~3.14增加顺时针转,减少逆时针转
    EOAT_JOINT3.141.08~3.14减少时夹爪张开
  • spd:转动速度 单位为步/秒,数值没有范围,越大速度越快。程序已设定好,当数值为 0 时,以最大速度转动。

  • acc:转动开始和结束时的加速度 单位为步/秒/秒,数值越小启停越平滑,数值可以为 0-254。如设置为 10 时,则按照 1000 步每秒的平方加减速度变速。当加速度值为 0 时,则按照最大的加速度运行。

CMD_SINGLE_JOINT_ANGLE

{"T":121, "joint":1, "angle":0, "spd":10, "acc":10}

同上,但用角度(0~360°)而非弧度。


多关节联动

CMD_JOINTS_RAD_CTRL

{"T":102, "base":0, "shoulder":0, "elbow":1.57, "wrist":0, "roll":0, "hand":1.57, "spd":0, "acc":10}

同时控制所有关节的目标弧度(每个关节一个字段)。

CMD_JOINTS_ANGLE_CTRL

{"T":122, "b":0, "s":0, "e":90, "t":0, "r":0, "h":180, "spd":10, "acc":10}

同上,用角度(b/s/e/t/r/h 分别对应不同关节)。


夹爪 / 末端执行器

CMD_EOAT_HAND_CTRL

{"T":106, "cmd":3.14, "spd":0, "acc":0}

控制夹爪(或末端工具)。

  • cmd:夹爪开合程度,角度转动范围为 1.08 至 3.14 之间,角度减少时,夹爪关节会张开。

延时

CMD_DELAY_MILLIS

{"T":111, "cmd":3000}

暂停 3000 毫秒,用于指令间等待。

总结

  • T:指令类型(类似“动作编号”)
  • 参数:要么是弧度(rad)、要么是角度(angle)
  • 速度/加速度:控制动作的快慢和平滑度 这就像一个“机械臂命令表”——你按格式填好 JSON,发给机械臂,它就知道是动关节、控制夹爪,还是暂停等待。

末端运动学控制

末端位置控制(运动学)

CMD_XYZT_GOAL_CTRL

{"T":104, "x":235, "y":0, "z":234, "t":0, "r":0, "g":3.14, "spd":0.25}

让机械臂末端移动到指定的三维空间坐标(x,y,z),并给定末端朝向(t,r,g)。

  • spd:移动速度(单位:m/s 或比例)适合做点对点运动。

CMD_XYZT_DIRECT_CTRL

{"T":1041, "x":235, "y":0, "z":234, "t":0, "r":0, "g":3.14}

类似上面,区别是立即执行(不带速度/加速度规划),用于精确控制。


总结

  • T:指令类型(类似"动作编号")
  • 参数:使用三维空间坐标(x,y,z)和末端朝向(t,r,g)
  • 速度:控制末端移动的快慢
信息

末端运动学控制让你可以直接指定机械臂末端的空间位置,而不需要关心每个关节的具体角度。

连续运动控制(角控制+逆运动学控制)

连续运动控制

CMD_CONSTANT_CTRL

{"T":123,"m":0,"axis":0,"cmd":0,"spd":0}

用于机械臂的连续控制。收到该指令后,机械臂会按照指定模式持续运动,直到收到停止指令或新的控制指令为止。该指令既支持关节角度控制,也支持末端坐标控制。

参数说明:

  1. m:控制模式

    • 0:角度控制模式 - 控制机械臂各关节按角度方向连续转动。
    • 1:坐标控制模式 - 控制机械臂末端执行器在空间坐标系中连续移动;系统通常会通过逆运动学将末端坐标变化换算为各关节动作。
  2. axis:控制对象 不同模式下,axis 表示的控制对象不同。

    当 m = 0(角度控制模式)时:

    • 1:BASE,底座关节
    • 2:SHOULDER,肩关节
    • 3:ELBOW,肘关节
    • 4:WRIST1,手腕关节 1
    • 5:WRIST2 / ROLL,手腕关节 2
    • 6:HAND,夹爪关节

    当 m = 1(坐标控制模式)时:

    • 1:X 轴
    • 2:Y 轴
    • 3:Z 轴
    • 4:Pitch 角
    • 5:Roll 角
    • 6:HAND / 手腕相关自由度
  3. cmd:运动方向或状态

    • 0:STOP,停止运动
    • 1:INCREASE,正方向持续运动 - 角度控制模式下目标关节角度增加;坐标控制模式下目标坐标值增加
    • 2:DECREASE,反方向持续运动 - 角度控制模式下目标关节角度减少;坐标控制模式下目标坐标值减少
  4. spd:速度系数表示连续运动的速度等级。数值越大,运动速度越快。由于机械臂各关节的最大转速和系统控制频率有限,建议取值范围为 0–20。实际生效速度还会受到硬件能力、负载和安全限制影响。

FLASH 文件系统操作

FLASH 文件操作

CMD_SCAN_FILES

{"T":200}

扫描当前 Flash 文件系统中的全部文件。 返回每个文件的文件名和文件内的第一行内容。

CMD_CREATE_FILE

{"T":201,"name":"file.txt","content":"inputContentHere."}

新建一个文件。

  • name:文件名称(需包含完整后缀)
  • content:文件第一行内容

CMD_READ_FILE

{"T":202,"name":"mission_a.mission"}

读取某一个文件的内容,返回内容会标注行号。

  • name:文件名称(需包含完整后缀)

CMD_DELETE_FILE

{"T":203,"name":"file.txt"}

删除指定文件。

  • name:文件名称(需包含完整后缀)

CMD_APPEND_LINE

{"T":204,"name":"file.txt","content":"inputContentHere."}

在指定文件的末尾增加一行内容。

  • name:文件名称
  • content:要增加的内容

CMD_INSERT_LINE

{"T":205,"name":"file.txt","lineNum":3,"content":"content"}

在指定文件中的指定行数处插入一行内容。

  • name:文件名称
  • lineNum:插入的行数(第一行为 1)
  • content:要插入的内容

CMD_REPLACE_LINE

{"T":206,"name":"file.txt","lineNum":3,"content":"Content"}

替换指定文件中的指定行数的内容。

  • name:文件名称
  • lineNum:要替换的行数
  • content:替换后的内容

CMD_READ_LINE

{"T":207,"name":"file.txt","lineNum":3}

读取指定文件中的指定行数的内容。

  • name:文件名称
  • lineNum:要读取的行数

CMD_DELETE_LINE

{"T":208,"name":"file.txt","lineNum":3}

删除指定文件的指定行数的内容。

  • name:文件名称
  • lineNum:要删除的行数

文件类型说明

  • .mission 文件:任务文件,可存储指令用于机械臂批量操作
  • boot.mission:开机自动运行的任务文件(无文件时自动创建)
  • wifiConfig.json:存储 WiFi 相关配置(无文件时自动创建)

返回格式示例

扫描文件返回:

>>>---=== File Name and First line ===---<<<
[file]: [boot.mission]
[first line]:
{"name":"boot","intro":"these cmds run automatically at boot."}
>>>---=== File Name and First line ===---<<<
[file]: [mission_a.mission]
[first line]:
{"name":"mission_a","intro":"test mission created in flash."}

读取文件返回:

---=== File Content ===---
reading file: [mission_a.mission] starts:
[lineNum: 1 ] - {"name":"mission_a","intro":"test mission created in flash."}
[lineNum: 2 ] - {"T":104,"x":235,"y":0,"z":234,"t":0,"r":0,"g":3.14,"spd":0.25}
^^^ ^^^ ^^^ reading file: mission_a.mission ends. ^^^ ^^^ ^^^

步骤录制和重现

在 ESP32 的 Flash 文件系统中存一个 .mission 文件,里面放 JSON 指令,就能批量录制和回放机械臂的动作。

备注

本部分指令与 FLASH 文件系统操作指令的区别在于,本章仅用来对任务文件进行操作,而 FLASH 文件系统操作可以对所有的文件进行操作。

任务文件操作
注意

任务文件操作基于 FLASH 文件系统函数封装,文件名不需要输入".mission"后缀。

CMD_CREATE_MISSION

{"T":220,"name":"mission_a","intro":"test mission created in flash."}

用来新建一个任务文件。

  • name:文件名称
  • intro:文件介绍

CMD_MISSION_CONTENT

{"T":220,"name":"mission_a","intro":"test mission created in flash."}

用来读取任务文件的具体内容。

  • name:文件名称 读取到的任务文件为 mission_a.mission,返回值如下:
{"T":221,"name":"mission_a"}

---=== File Content ===---
reading file: [mission_a] starts:

{"name":"mission_a","intro":"test mission created in flash."}
[StepNum: 1 ] - {"T":104,"x":235,"y":0,"z":234,"t":3.14,"spd":0.25}
[StepNum: 2 ] - {"T":104,"x":104.3172406,"y":-112.6415887,"z":65.13450799,"t":0,"r":0,"g":3.14,"spd":0.25}
[StepNum: 3 ] - {"T":114,"led":155}
[StepNum: 4 ] - {"T":104,"x":-163.7763876,"y":-138.2353466,"z":105.0922663,"t":0,"r":0,"g":3.14,"spd":0.5}
[StepNum: 5 ] - {"T":114,"led":0}
[StepNum: 6 ] - {"T":114,"led":255}
[StepNum: 7 ] - {"T":104,"x":156.428798,"y":40.20501586,"z":76.68339473,"t":0,"r":0,"g":3.14,"spd":0.25}
[StepNum: 8 ] - {"T":111,"cmd":3000}
[StepNum: 9 ] - {"T":114,"led":0}
^^^ ^^^ ^^^ reading file: mission_a.mission ends. ^^^ ^^^ ^^^
备注

注意:任务文件的第一行内容为任务文件的名称和简要介绍,从第二行起才是需要执行的第一步 JSON 指令,上述读取到的内容会标注出来每个步骤的序号

实际该任务文件案例的内容如下:

{"name":"mission_a","intro":"test mission created in flash."}
{"T":104,"x":235,"y":0,"z":234,"t":3.14,"spd":0.25}
{"T":104,"x":104.3172406,"y":-112.6415887,"z":65.13450799,"t":0,"r":0,"g":3.14,"spd":0.25}
{"T":114,"led":155}
{"T":104,"x":-163.7763876,"y":-138.2353466,"z":105.0922663,"t":0,"r":0,"g":3.14,"spd":0.5}
{"T":114,"led":0}
{"T":114,"led":255}
{"T":104,"x":156.428798,"y":40.20501586,"z":76.68339473,"t":0,"r":0,"g":3.14,"spd":0.25}
{"T":111,"cmd":3000}
{"T":114,"led":0}

CMD_APPEND_STEP_JSON

{"T":222,"name":"mission_a","step":"{\"T\":104,\"x\":235,\"y\":0,\"z\":234,\"t\":3.14,\"r\":0,\"g\":3.14,\"spd\":0.25}"}

用来将一个 JSON 指令追加到指定任务文件中。

  • name:文件名称
  • step:要添加的 JSON 指令,具体格式参考上面的示例。

CMD_APPEND_STEP_FB

{"T":223,"name":"mission_a","spd":0.25}

文件末尾新增运动至当前位置

  • name:文件名称
  • spd:设置机械臂运动到该目标位置的速度。

CMD_APPEND_DELAY

{"T":224,"name":"mission_a","delay":3000}

任务文件步骤之间新增延迟指令

  • name:文件名称
  • delay:延迟时间,单位为毫秒。

CMD_INSERT_STEP_JSON

{"T":225,"name":"mission_a","stepNum":3,"step":"{\"T\":114,\"led\":255}"}

任务文件步骤之间新增 JSON 指令到指定序号

  • name:文件名称
  • stepNum:要插入的步骤序号,从 1 开始计数。
  • step:要插入的 JSON 指令,具体格式参考上面的示例。
备注

注意:在本条指令和后续指令中,给的 stepNum 值是为 JSON 指令执行的步数,而非行数。如果给定的 stepNum 值为 3,则在该任务文件中为第 3 步要执行的 JSON 指令。

CMD_INSERT_STEP_FB

{"T":226,"name":"mission_a","stepNum":3,"spd":0.25}

任务文件步骤之间新增运动至当前位置到指定序号

  • name:文件名称
  • stepNum:要插入的步骤序号,从 1 开始计数。
  • spd:设置机械臂运动到该目标位置的速度。

CMD_INSERT_DELAY

{"T":227,"name":"mission_a","stepNum":3,"spd":3000}

任务文件步骤之间新增延迟指令到指定序号

  • name:文件名称
  • stepNum:要插入的步骤序号,从 1 开始计数。
  • spd:延迟时间。

CMD_REPLACE_STEP_JSON

{"T":228,"name":"mission_a","stepNum":3,"step":"{\"T\":114,\"led\":255}"}

任务文件步骤之间替换 JSON 指令到指定序号

  • name:文件名称
  • stepNum:要替换的步骤序号,从 1 开始计数。
  • step:要替换的 JSON 指令,具体格式参考上面的示例。

CMD_REPLACE_STEP_FB

{"T":229,"name":"mission_a","stepNum":3,"spd":0.25}

任务文件步骤之间替换运动至当前位置到指定序号

  • name:文件名称
  • stepNum:要替换的步骤序号,从 1 开始计数。
  • spd:设置机械臂运动到该目标位置的速度。

CMD_REPLACE_DELAY

{"T":230,"name":"mission_a","stepNum":3,"delay":3000}

任务文件步骤之间替换延迟指令到指定序号

  • name:文件名称
  • stepNum:要替换的步骤序号,从 1 开始计数。
  • delay:延迟时间,单位为毫秒。

CMD_DELETE_STEP

{"T":231,"name":"mission_a","stepNum":3}

任务文件步骤之间删除指定序号

  • name:文件名称
  • stepNum:要删除的步骤序号,从 1 开始计数。

CMD_MOVE_TO_STEP

{"T":241,"name":"mission_a","stepNum":3}

执行任务文件中的指定序号命令

  • name:文件名称
  • stepNum:要执行的步骤序号,从 1 开始计数。

CMD_MISSION_PLAY

{"T":242,"name":"mission_a","times":3}

播放任务文件中的所有命令

  • name:文件名称
  • times:要执行的次数。

ESP-NOW 控制

广播从动模式设置

CMD_BROADCAST_FOLLOWER

{"T":300,"mode":1}
{"T":300,"mode":0,"mac":"00:00:00:00:00:00"}

设置该设备的广播从动模式。

  • mode
    • 1 - [出厂默认] 该设备可以被其它设备发出的广播信号来控制。
    • 0 - 该设备不可以被其它设备发出的广播信号来控制。
  • mac:在 mode 值为 0 的情况下,唯一 Leader 控制设备的 MAC 地址。给定一个 MAC 地址,则该设备只可以被给定 MAC 地址的设备所发出的 ESP-NOW 信息而控制;如果该设备不需要被任何设备控制,可以输入任意一个编造的 MAC 地址,例如:00:00:00:00:00:00。

ESP-NOW 工作方式设置

CMD_ESP_NOW_CONFIG

{"T":301,"mode":3}

设置该设备 ESP-NOW 的工作方式。

  • mode:ESP-NOW 的工作方式的代号。
    • 0 - 关闭;
    • 1 - 流组播 Leader,持续向 peerList 中的设备发送自己的关节位置信息;
    • 2 - 流单播/流广播 Leader,持续向某一 MAC 地址的设备发送自己的关节位置信息,当 MAC 地址设置为 FF:FF:FF:FF:FF:FF 则为流广播控制;
    • 3 - [出厂默认] Follower,当机械臂处于这一模式下时,可以接收来自其它 Leader 设备的 ESP-NOW 信息,也可以作为 Leader 设备向其它设备发送 ESP-NOW 信息。
提示

只有在流组播、流单播/流广播模式下,主控制设备会持续向被控制设备发送自己的关节位置信息,手动转动主控制设备,被控制设备才会跟着做出相同的运动动作。

获取本设备 MAC 地址

CMD_GET_MAC_ADDRESS

{"T":302}

获得本设备的 MAC 地址。 返回值示例: 44:17:93:EE:FD:70 每个设备的 MAC 地址都是独一无二的。当你使用 ESP-NOW 的相关功能时,除广播控制外,都需要获得被控制设备的 MAC 地址。默认情况下,每一台机械臂的 OLED 屏幕上会显示自己的 MAC 地址。


添加被控制设备到 peerList

CMD_ESP_NOW_ADD_FOLLOWER

{"T":303,"mac":"44:17:93:EE:FD:70"}

将被控制设备的 MAC 地址添加到 peerList 中。peerList 是用来存储 MAC 地址的。

  • mac:需要添加的被控制设备的 MAC 地址。 peerList 中可以添加十几个 MAC 地址用于组播控制,但是当使用组播控制时,peerList 中不可以存有用于广播控制的 MAC 地址:FF:FF:FF:FF:FF:FF

从 peerList 删除被控制设备

CMD_ESP_NOW_REMOVE_FOLLOWER

{"T":304,"mac":"44:17:93:EE:FD:70"}

将被控制设备的 MAC 地址从 peerList 中删除。

  • mac:需要删除的被控制设备的 MAC 地址。

组播控制

CMD_ESP_NOW_GROUP_CTRL

{"T":305,"dev":0,"b":0,"s":0,"e":1.57,"h":1.57,"cmd":0,"megs":"hello!"}
{"T":305,"dev":0,"b":0,"s":0,"e":0,"h":0,"cmd":1,"megs":"{\"T\":114,\"led\":255}"}

使用该指令将信息通过 ESP-NOW 组播发送给 peerList 中的全部设备。 参考 ESP-NOW 通信数据结构体部分的内容,该 JSON 指令中各个键对照结构体变量如下,且含补充部分:

  • dev:对应变量 devCode。
  • b、s、e、h:分别对应变量 base、shoulder、elbow 和 hand。
  • cmd:ESP-NOW 控制信息类型。
    • cmd 为 0 时,被控制的机械臂会转动到给定的各个关节的角度;
    • cmd 为 1 时,b、s、e、h 无效,在 megs 输入不会引起阻塞的 JSON 指令,机械臂会执行 JSON 指令对应的功能。
  • megs:对应变量 message。

单播/广播控制

CMD_ESP_NOW_SINGLE

{"T":306,"mac":"44:17:93:EE:FD:70","dev":0,"b":0,"s":0,"e":1.57,"h":1.57,"cmd":0,"megs":"hello!"}
{"T":306,"mac":"FF:FF:FF:FF:FF:FF","dev":0,"b":0,"s":0,"e":1.57,"h":1.57,"cmd":0,"megs":"hello!"}

使用该指令可以单播或广播控制 peerList 中的设备。

  • mac:被控制设备的 MAC 地址,当 MAC 地址为 FF:FF:FF:FF:FF:FF 时,该指令为广播信号,会发送给全部设备。 参考 ESP-NOW 通信数据结构体部分的内容,该 JSON 指令中各个键对照结构体变量如下,且含补充部分:
  • dev:对应变量 devCode。
  • b、s、e、h:分别对应变量 base、shoulder、elbow 和 hand。
  • cmd:ESP-NOW 控制信息类型。
    • cmd 为 0 时,被控制的机械臂会转动到给定的各个关节的角度;
    • cmd 为 1 时,b、s、e、h 无效,在 megs 输入不会引起阻塞的 JSON 指令,机械臂会执行 JSON 指令对应的功能。
  • megs:对应变量 message。
注意

无论是组播控制,还是单播/广播控制,都需要提前将被控制设备的 MAC 地址添加到 peerList 中。