# 关于 sm2uploader 水个说明的帖子

**URL:** <https://forum.snapmaker.com/t/sm2uploader/30918>\
**Category:** Showcase & Prints\
**Tags:** 中文板块, Slicer\_Profile\
**Created:** [April 18, 2023, 12:10pm UTC](https://forum.snapmaker.com/t/sm2uploader/30918 "2023-04-18T12:10:17Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![macdylan](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.snapmaker.com/macdylan/32/18460_2.png) [@macdylan](https://forum.snapmaker.com/u/macdylan)\
**Post date:** [April 18, 2023, 12:10pm UTC](https://forum.snapmaker.com/t/sm2uploader/30918/1 "2023-04-18T12:10:17Z")

</div>

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

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

 ![image](https://us1.discourse-cdn.com/flex022/uploads/snapmaker/original/3X/d/7/d7dff259db9f8454e34eadf2765f31ec775b9b56.jpeg)

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

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

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

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

> **[GitHub - macdylan/sm2uploader: A command-line tool for send the gcode file to...](https://github.com/macdylan/sm2uploader)**
>
> A command-line tool for send the gcode file to Snapmaker Printers via WiFi connection.

在 [Release](https://github.com/macdylan/sm2uploader/releases) 页面中你会找到所有预编译好的程序文件，选择一个适合你操作系统的下载即可（如果没有也请留言告诉我）。

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

- 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 支持的类型：

 ![image](https://us1.discourse-cdn.com/flex022/uploads/snapmaker/original/3X/c/d/cd9d0548aa9d05ce4fc174bda785da36ea69aa52.png)

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

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

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

 ![image](https://us1.discourse-cdn.com/flex022/uploads/snapmaker/original/3X/c/d/cd857e25d7546a19c5ebe9b3ef161f5838272489.jpeg)

开始运行程序：

```auto
> sm2uploader-win64.exe -octoprint :8844

```

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

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

现在可以打开切片软件配置，以 PrusaSlicer 为例：

 ![image](https://us1.discourse-cdn.com/flex022/uploads/snapmaker/original/3X/b/5/b51b7e7c30f07dc92da999b0ba0b6028958a4325.png)

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

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

 ![image](https://us1.discourse-cdn.com/flex022/uploads/snapmaker/original/3X/8/8/889cbcd86584aa763e011a9ff8fe03ec25546982.jpeg)

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

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

* * *

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

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

```auto
> 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 服务：

```auto
> 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.

```

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

直传模式就这么多了，扯了半天这个工具就是要敲各种命令，挺烦的不是？😠

* * *

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

 ![image](https://us1.discourse-cdn.com/flex022/uploads/snapmaker/original/3X/9/c/9cc04ebd8322c1fdc660b416524bba89f96179fb.jpeg)

 ![image](https://us1.discourse-cdn.com/flex022/uploads/snapmaker/original/3X/4/0/40083c8304717eddafebde72101547b3008c4a32.jpeg)

- 
### Windows:

1. 你还记得程序所在的路径：`d:\sm2uploader\sm2uploader-win64.exe`
2. 打开记事本，输入以下内容，注意修改其中的程序路径，且路径中尽量不要包含空格：

```auto
@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  
 ![image](https://us1.discourse-cdn.com/flex022/uploads/snapmaker/original/3X/f/7/f779dad5c147639e4df0b0810705ef36f9a0038c.jpeg)
4. 在代码框中粘贴以下代码并替换程序路径

```auto
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](https://github.com/macdylan/sm2uploader/releases/tag/v1.5)，有更新我会在这个帖子进行说明。

---

<div class="post-metadata">

**Author:** ![canislupus](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.snapmaker.com/canislupus/32/23592_2.png) [@canislupus](https://forum.snapmaker.com/u/canislupus)\
**Post date:** [August 1, 2023, 2:57am UTC](https://forum.snapmaker.com/t/sm2uploader/30918/2 "2023-08-01T02:57:12Z")

</div>

新变更 不再来水一下？

---

<div class="post-metadata">

**Author:** ![macdylan](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.snapmaker.com/macdylan/32/18460_2.png) [@macdylan](https://forum.snapmaker.com/u/macdylan)\
**Post date:** [August 1, 2023, 4:51pm UTC](https://forum.snapmaker.com/t/sm2uploader/30918/3 "2023-08-01T16:51:20Z")

</div>

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 Key` 为 `nopreheat;noshutoff;notrim` 来关闭对应的各项功能。

下载地址：[Releases · macdylan/sm2uploader · GitHub](https://github.com/macdylan/sm2uploader/releases)

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

```plaintext
M104 S210 ; ❌

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

```

或者可以使用我的 [3dp configs](https://github.com/macdylan/3dp-configs)

---

<div class="post-metadata">

**Author:** ![Jade](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.snapmaker.com/jade/32/30672_2.png) [@Jade](https://forum.snapmaker.com/u/Jade)\
**Post date:** [September 4, 2024, 6:18am UTC](https://forum.snapmaker.com/t/sm2uploader/30918/4 "2024-09-04T06:18:01Z")

</div>

Dylan, 我突然想起来你之前发过这个很棒的介绍帖子，我想让技术文档同事把 sm2uploader 加在 PrusaSlicer, OrcaSlicer 的 Wiki 基础教程末尾，作为提供给高阶用户的工具资源信息。你有空时可以看看最上面的原贴是否有需要更新的信息么？以及是否考虑在中文末尾增加英文翻译，做成一个双语帖子？ 😁

顺便提一下，永远可以在 release 页面下载到最新的版本哦：[Releases · macdylan/sm2uploader · GitHub](https://github.com/macdylan/sm2uploader/releases)
