关于 sm2uploader 水个说明的帖子

自2020年底第一次发布这个小工具以来,我从未完整的介绍过这个东西,但事实上我几乎每天在使用它,也一直有用户在询问它的使用方法、兼容情况,我很高兴这个工具因为使用价值被大家关注。

对于没有体验过的朋友,先开一张图看下:

是的这个工具运行在终端里,但你先别跑,水这个帖子就是想说说它到底能做什么、怎么玩。

朴素的命名说明了它只做一件事:向 Snapmaker 的设备上传文件,没有其它功能。

目前支持 Snapmaker A-Series / J1 / Artisan。

代码在 Github 上开放,欢迎任何方式的改进,使用 Golang 语言编写,通过跨平台编译,支持各种 CPU 架构的 Windows/macOS/Linux(当然也包括Raspberry Pi)

Release 页面中你会找到所有预编译好的程序文件,选择一个适合你操作系统的下载即可(如果没有也请留言告诉我)。

建议新手解压缩到一个方便在终端里执行的位置,例如:

  • Windows: d:\sm2uploader\sm2uploader.exe
  • macOS & Linux: ~/bin/sm2uploader

sm2uploader 支持 2 种运行模式:直接上传,虚拟 OctoPrint 中转上传


我打算先说说 虚拟 OctoPrint,因为它更便于使用。如前面的终端图片里下半部分展示的那样,我预先启动了 8844 和 8843 两个本地端口,分别对接到 J1 和 A350 两台打印机,这里是模拟了 OctoPrint 的 HTTP 服务,任何上传到这个端口的文件都会转发到对应的打印机去。

如何在切片软件中使用?3D打印社群里最流行的切片软件,都支持向 OctoPrint 发送文件的功能,包括 UltimakerCura/PrusaSlicer/Simplify3D/ideaMaker,下图是 PrusaSlicer 支持的类型:

你只需要在打印机设置中找到这个选项,填入端口号,就完成了配置。接下来就是正常的切片操作,在 “导出/保存 Gcode” 的步骤中,通常会出现 “上传/打印” 的按钮,不要犹豫,按它,然后就可以去打印机屏幕上找到这个切片文件了。

如果你对 Windows 的命令行操作不熟悉,跟着下面的步骤操作:

首先从文件管理器进入刚刚解压好的目录,然后在路径框输入 cmd,打开命令行窗口

开始运行程序:

> sm2uploader-win64.exe -octoprint :8844


因为它开放了一个网络端口 ...you can upload files to http://localhost:8844,可能会弹出安全提示,在家里或者小型工作室网络下是不必担心的,甚至可以从另一台电脑连接过来发送文件到打印机(就像共享的照片打印机一样)。
更安全的方式是 -octoprint 127.0.0.1:8844 只允许本机访问,因为这个 “虚拟” 的 OctoPrint 是没有 Key/Password 认证的,也许将来我会添加这个功能。

如果你使用 macOS / Linux ,我会认为你已经知道如何在 Terminal 中运行这些命令,就不水了。

现在可以打开切片软件配置,以 PrusaSlicer 为例:

点打印机右边的小齿轮,添加物理打印机,在弹出的窗口中填入一个名字,例如 “地下室的A350”,选择类型为 OctoPrint,在 URL 中填入上面的地址 http://localhost:8844,点击 Test 按钮看看是否正确,就配置完成了。

现在切片,打印机选择 “地下室的A350”,在导出按钮旁边就出现了一键上传 :tada::tada:

以上就是 OctoPrint 模式的全部了。对于资深玩家,如果你有 NAS 设备或者树莓派,运行一个常驻服务进程是更好的方法,忽略掉 sm2uploader 的存在 :slight_smile:

接下来是 直接上传 模式,继续水


  • 我保存了一些切好的 gcode,需要的时候就翻出来打一个
  • 对于激光和 CNC,很多 CAM 软件并不支持连接到 OctoPrint,需要导出后手动上传到设备
  • 打印机固件更新的服务器有时候不稳定,我习惯先用电脑下载固件包,然后上传到打印机的屏幕去升级

这些场景下,直接上传模式是非常高效的。有了前面的经验,你已经清楚如何向 sm2uploader 添加其它命令参数,现在直接在程序后面添加需要上传的文件路径。如果地址太长不方便输入,从文件管理器里把文件拖到命令行窗口即可(如果路径有空格请使用半角引号把文件路径包起来),如果一次上传多个文件,每个文件使用空格分隔:

> sm2uploader-win64.exe "d:\3D Models\testmodel.gcode" "d:\3D Models\egg.gcode" 

Discovering ...
Use the arrow keys to navigate: ↓ ↑ → ←
? Select a printer:
  ▸ A350@192.168.1.235 - Snapmaker 2 Model A350
    J1@192.168.1.201 - Snapmaker J1

我拥有 A350 和 J1 两台设备,现在都出现在列表中,上下键选择后回车,文件就开始上传了。如果只有一台设备会自动选中它,或者指定参数 -host J1,这个名字在打印机屏幕的 设置-关于 里面修改,现在我觉得应该给它们一些更有活力的名字。

有些时候打印机的网络断开了,或者其它原因无法通过 UDP 广播协议告诉 sm2uploader 它还活着(也许重启打印机又好了),如果你知道它的 IP 地址,可以试着直连它的 TCP 服务:

> sm2uploader-win64.exe -host 192.168.1.235 c:\testmodel.gcode

Printer IP: 192.168.1.235
Printer Model: Snapmaker 2 Model A350
Uploading file 'testmodel.gcode' [10.1 MB]...
Printer 192.168.1.235 is not available.

嗯。。。这么看起来它确实又又又掉线了,内置的天线容易被铝框架或者其它金属干扰信号。

直传模式就这么多了,扯了半天这个工具就是要敲各种命令,挺烦的不是?:angry:


更烦的来了,实现下面这些,你必须开始自己写亿点点代码 :laughing::laughing:

  • Windows:

  1. 你还记得程序所在的路径:d:\sm2uploader\sm2uploader-win64.exe
  2. 打开记事本,输入以下内容,注意修改其中的程序路径,且路径中尽量不要包含空格:
@COLOR 0A
@d:\sm2uploader\sm2uploader-win64.exe %*
@PAUSE
  1. 保存,在保存对话框的 “地址栏” 中输入 shell:sendto 回车,会跳转到 SendTo 目录,能在这里看到右键菜单里出现的其它那些程序,比如 Fax/Mail/Bluetooth 等等
  2. 选择保存的文件类型为 All Files,文件名为 Send to Snapmaker.bat
  3. 现在你可以像前面图片中那样右键选中文件进行发送,弹出的窗口会显示进度信息,完成后按任意键关闭即可。
  • macOS:

  1. 通过 Spotlight 打开 Automator 程序,就是 Mac 引以为傲的小机器人
  2. Cmd+N 新建一个 Quick Action
  3. 从左侧 Library 中搜索 Run AppleScript 并将它拖到右侧 workflow 中,receives 选择 files or folders
  4. 在代码框中粘贴以下代码并替换程序路径
on run {input, parameters}
	set uploader to "~/bin/sm2uploader-darwin-arm64"
	set tfiles to ""
	repeat with f in input
		set p to POSIX path of f
		set tfiles to (tfiles & " " & p)
	end repeat
	
	tell application "Terminal"
		activate
		do script uploader & " " & tfiles
	end tell
	return input
end run
  1. 保存为 Send to Snapmaker
  2. 从 Finder 选择需要上传的文件,右键 - Quick Actions - Send to Snapmaker,弹出的窗口中会显示进度信息,完成后按 Cmd+Q 关闭即可。

啊啊啊啊,终于水完了,感谢你看到这里,赶快动手试试,如果觉得不好用直接去修代码,修完再来吐槽😝

截止目前程序版本为 v1.5,有更新我会在这个帖子进行说明。

2 Likes

新变更 不再来水一下?

sm2uploader v2.1 更新说明

过去在 PrusaSlicer / SuperSlicer / OrcaSlicer 中切片给 Snapmaker 打印,需要额外配置 后处理脚本(Post-processing script) ,然后配合 sm2uploader 进行上传操作。很多人难以理解相关的设置导致无法正确使用。

从 v2.0 开始,sm2up 就已经内置了 smfix 的全部功能,所以无需再设置后处理脚本,最好的方式是配置 OctoPrint 兼容模式,这在第一篇中已经解释了如何配置。

v2.1 (或者说从 smfix v1.8 开始),实现了对 Gcode 的一些优化,包括:

  • trim 移除每行指令前后的空白字符,并将多个空行合并为一个空行,以减少发送给下位机的无效数据
  • shutoff 在 J1 和双喷嘴模组中,某个挤出机在完成最后一次工作后,温度将被关闭,减少耗电
  • preheat 过去在 Slic3r 的所有分支切片软件中,多挤出机的切换工作,只能在发生 toolchange 时执行温度控制,为了避免空闲的喷嘴长时间保持在打印温度而发生堵头(clog),通常会将其降温到 60-65%,下一次 toolchange 时,它无法像 Cura 那样对下一个喷嘴/执行头提前升温。等待升温是非常浪费时间的,某些情况下模型的打印时间会翻倍。现在只需要启用 打印机设置(Printer settings) 中的 剩余时间(Support remaining times),这个 preheat 功能将为你实现智能温度控制(OrcaSlicer 无需设置)。

我在 J1 上充分测试了其可靠性,但是双喷嘴模组可能会因为提前预热而发生漏料,目前我还没有办法测试它。如果你不需要这些功能,可以在 物理打印机设置(Physical Printer) 中填入 API Keynopreheat;noshutoff;notrim 来关闭对应的各项功能。

下载地址:Releases · macdylan/sm2uploader · GitHub

如果你自己设置了 toolchange gcode 可能需要注意,给 M104/109 指令加上 T 参数,以确保以上功能可以正常使用。例如:

M104 S210  ; ❌

M104 S110 T[current_extruder]  ; ✅
M109 S230 T[next_extruder]

或者可以使用我的 3dp configs

2 Likes