RoArm-M2-S FLASH文件系统操作

FLASH文件系统操作

机械臂所使用的下位机驱动板在掉电后会损失数据,如果想保存一些数据使其不会随着掉电丢失,可将这些数据写入文件储存于Flash文件系统中,只需在掉电前将文件写入Flash,这样掉电后文件不会丢失,上电后读取文件即可。

本章的JSON指令用于操作存储在 ESP32 FLASH 中的文件,包括扫描文件、新建文件、编辑文件内容、读取文件内容等。掉电后文件不会丢失,若您重新给RoArm-M2-S上传程序,也可在Arduino IDE中选择保留Flash文件。


扫描FLASH文件

{"T":200}
  • 200:表示这条指令为 CMD_SCAN_FILES,用来扫描当前 Flash 文件系统中的全部文件。

返回的数据如下:

>>>---=== 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 Name and First line ===---<<<
[file]: [wifiConfig.json]
[first line]:
{"wifi_mode_on_boot":3,"sta_ssid":"JSBZY-2.4G","sta_password":"waveshare0755","ap_ssid":"RoArm-M2","ap_password":"12345678"}

返回值包括每个文件的文件名和文件内的第一行内容,此处的文件名会显示出完整的文件名,若您创建新的文件是带有后缀的,则也会显示。后缀为 .mission 的文件即为任务文件,可以储存一些指令用于机械臂批量操作。

  • boot.mission 是机械臂开机自动运行的任务文件,开机过程中如果发现没有该文件则会自动创建一个,其余全部 JSON 指令都可以添加到该文件中来配置开机后需要自动执行的步骤;
  • mission_a.mission 是测试创建的任务文件案例,并不代表您的 RoArm-M2 中会有 mission_a.mission 这个文件;
  • wifiConfig.json 用于储存 wifi 相关配置的文件,开机时如果没有扫描到该文件会自动新建,并使用默认的 AP 模式来建立热点,有关 wifiConfig.json 的具体信息会在RoArm-M2-S_WIFI配置中介绍。

新建文件

{"T":201,"name":"file.txt","content":"inputContentHere."}
  • 201:表示这条指令为CMD_CREATE_FILE,用来新建一个文件。
  • name:要新建的文件名称,必须输入完整的文件名称,若您要创建一个.txt后缀的文件,则文件名必须带.txt后缀,如上。
  • content:该文件的第一行的内容。


读取文件内容

{"T":202,"name":"mission_a.mission"}
  • 202:表示这条指令为CMD_READ_FILE,用来读取某一个文件的内容。
  • name:要读取的文件名称,必须输入完整的文件名,若您创建时的文件是带后缀的,则输入的文件名必须包含后缀。

返回内容如下,返回内容会标注出来行号(以下是案例,并不代表您的RoArm-M2中会有mission_a.mission这个文件):

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

---=== 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":3.14,"spd":0.25}
[lineNum: 3 ] - {"T":104,"x":104.3172406,"y":-112.6415887,"z":65.13450799,"t":2.448233337,"spd":0.25}
[lineNum: 4 ] - {"T":114,"led":155}
[lineNum: 5 ] - {"T":104,"x":-163.7763876,"y":-138.2353466,"z":105.0922663,"t":2.466641107,"spd":0.5}
[lineNum: 6 ] - {"T":114,"led":0}
[lineNum: 7 ] - {"T":114,"led":255}
[lineNum: 8 ] - {"T":104,"x":156.428798,"y":40.20501586,"z":76.68339473,"t":3.052621768,"spd":0.25}
[lineNum: 9 ] - {"T":111,"cmd":3000}
[lineNum: 10 ] - {"T":114,"led":0}
[lineNum: 11 ] - {"T":1,"mode":1}
^^^ ^^^ ^^^ reading file: mission_a.mission ends. ^^^ ^^^ ^^^

案例mission_a.mission 文件中实际的文件内容如下:

{"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":2.448233337,"spd":0.25}
{"T":114,"led":155}
{"T":104,"x":-163.7763876,"y":-138.2353466,"z":105.0922663,"t":2.466641107,"spd":0.5}
{"T":114,"led":0}
{"T":114,"led":255}
{"T":104,"x":156.428798,"y":40.20501586,"z":76.68339473,"t":3.052621768,"spd":0.25}
{"T":111,"cmd":3000}
{"T":114,"led":0}
{"T":1,"mode":1}


删除文件

{"T":203,"name":"file.txt"}
  • 203:这条指令为CMD_DELETE_FILE,用来删除指定文件。
  • name:要删除的文件名称,必须输入完整的文件名。


编辑FLASH文件

在文件的末尾新增一行内容

{"T":204,"name":"file.txt","content":"inputContentHere."}
  • 204:这条指令为CMD_APPEND_LINE,用来在指定文件的末尾增加一行输入的内容。
  • name:要编辑的文件名称,必须输入完整的文件名。
  • content:要增加的内容。


在文件中指定行数插入内容

{"T":205,"name":"file.txt","lineNum":3,"content":"content"}
  • 205:这条指令为CMD_INSERT_LINE,用来在指定文件中的指定行数处插入一行输入的内容。
  • name:要编辑的文件名称,必须输入完整的文件名。
  • lineNum:指定新内容插入的行数,文件第一行的lineNum为1;例如这里lineNum的值为3,原有的第三行会变成第四行,新加入的内容会作为第3行。
  • content:要插入的内容。


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

{"T":206,"name":"file.txt","lineNum":3,"content":"Content"}
  • 206:这条指令为CMD_REPLACE_LINE,用来替换指定文件中的指定行数的内容。
  • name:要编辑的文件名称,必须输入完整带后缀的文件名。
  • lineNum:指定要替换内容的行数,例如这里lineNum的值为3,代表原本第3行的内容会被替换。
  • content:输入要替换后的内容。


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

{"T":207,"name":"file.txt","lineNum":3}
  • 207:这条指令为CMD_READ_LINE,用来读取指定文件中的指定行数的内容。
  • name:要读取的文件名称,必须输入完整的文件名。
  • lineNum:要读取的指定行数。


删除文件中指定行的内容

{"T":208,"name":"file.txt","lineNum":3}
  • 208:这条指令为CMD_DELETE_LINE,用来删除指定文件的指定行数的内容。
  • name:要编辑的文件名称,必须输入完整的文件名。
  • lineNum:要删除的行数,例如这里lineNum的行数为3,代表第3行的内容将被删除,那么之后行数的内容将会递进一行。