文/神顯豪 臧一豪 潘角 盧森鍇
(1.桂林理工大學信息科學與工程學院 廣西壯族自治區桂林市 541004)
(2.桂林凱歌信息科技有限公司 廣西壯族自治區桂林市 541000)
科技發展日新月異,3D 打印技術正在飛速發展中,而隨著人們使用手機的頻率逐漸提高,手機APP 控制需求的不斷增加,通過移動端來遠程控制3D 打印機的技術應運而生,大大改善了傳統設備通過有線連接的弊端,成為目前最受人們青睞的3D 打印技術。
本文將設計基于android 的3D 打印機遠程控制與調度系統,Wi-Fi 模塊連接上服務器,在android 端開發程序實現連接上服務器,以服務器在中間當做橋梁作用建立聯系,Wi-Fi 模塊接收到數據就發送到3D 打印機硬件,最終完成遠程對3D 打印機的控制管理。
硬件系統主要由打印機主板、Wi-Fi 模塊兩部分組成。Wi-Fi 模塊用于接收來自手機 APP 和服務器端的控制命令。用戶可以通過手機無線網絡或者Wi-Fi 連接到服務器端,通過 APP 控制系統發送控制命令對打印機進行控制,3D 打印遠程控制系統體系結構如圖1 所示。
控制系統整體硬件連接較為簡單可以輕松接入,3D 打印機主板有專用的打印機USB 接口,將USB 連接線接入計算機其中一個USB 連接口[4]。另外的Wi-Fi 模塊使用USB-TTL 模塊接入計算機另一個USB 接口,USB-TTL 模塊引出的串口TX、 TX 接口接入Wi-Fi 模塊則完成了硬件連接,3D 打印機與Wi-Fi 模塊硬件連接示意圖如圖2 所示。
其中,計算機是核心部分,計算機程序為Wi-Fi 模塊和打印機之間的橋梁,計算機端程序也可以對打印機噴頭移動、噴頭和熱床溫度、溫度讀取等控制。并且將打印機信息發送到Wi-Fi 模塊,Wi-Fi 模塊將數據傳輸到服務器再到手機,做到手機端也可以控制打印機打印文件或簡單移動等等[5]。
Wi-Fi 模塊負責與服務器數據傳輸、消息收發等,Wi-Fi 模塊本次設計選擇使用ESP8266,這款Wi-Fi 模塊有價格低、方便使用等特點。在當前不少企業和廠家都使用該模塊做智能家居或遠程控制的應用。

圖1:系統總體體系示意圖

圖2:硬件連接示意圖
3D 打印機控制實質為對3D 打印機主板的控制,控制打印機主板過程都使用的G-code 代碼對打印機控制?,F在也有不少優良的打印機控制程序,例如Repetier Host 軟件就能夠對市面大多數打印機控制,并且程序內部能導入stl 文件或gcode 文件顯示3D 圖形,軟件內置了兩款當前時下流行和比較優秀的切片引擎Slic3r 和curaEngine,切片引擎其實就是將3D 模型stl 文件分層處理,通過引擎內部的算法,編碼成為3D 打印機能夠讀懂的一條條G-M 指令組。
打印機通常就只需要控制噴頭、熱床溫度,X、Y、Z 軸移動,文件打印等。本設計中所涉及的控制的G-code 代碼如表1 所示。
在打印文件stl 文件經過切片引擎切片后獲得的G-M 指令的gcode 文件,程序進行逐行的讀取文件信息過濾掉注釋并發送到3D打印機主板上面,就能夠實現打印出一個完整的物品。本次設計中程序與打印機之間通信使用Ping-Pong 通信,其實質就是在打印文件過程只有收到了打印機返回的ok 應答才發送下一行G-code 代碼。
桌面控制應用基層需要實現使用串口進行讀取和發送數據,使用Eclipse 軟件建立新工程后,首先導入所需要的jar 包。MainFrame.Java 是程序的主類,也是程序的入口類,類中實現應用顯示控件,控件監聽,讀取文件等方法等。程序中桌面用于的主要邏輯事件完成是監聽事件,其余部分都幾乎都是初始化控件或者數據等。程序中最主要部分就是是通過按鍵監聽事件開啟和關閉線程、發送指定的G-M 指令等,完成后臺邏輯。當噴頭Y 方向鍵點擊監聽事件觸發,第一步需要判斷打印機的串口目前是否為打開狀態,如果串口打開情況下就發送G1 Y Moving_distance (移動距離)指令使噴頭向相應位置移動一定距離。在程序中創建了MyThread_ESP8266、thread_AndroidPrint、MyThread_file,3 個線程類,在點擊按鈕的時候實現相應功能則開啟線程。
使用“android studio” 軟件新建空白項目,程序選擇android9.0(API28),在android 程序要實現接和收服務器端的數據、數據解析和生成、控件布局、按鍵監聽等。
android 程序在真機上運行時需要對程序中使用權限聲明,在本設計中使用了網絡權限,所以需在APP 中提早聲明,添加網絡請求權限如下所示:
android 端連接服務器需要實現長連接才能接收到服務器端發送過來的數據,建立長連接分為4 個部分完成,長連接的配置ConnectionConfig 類、長連接管理ConnectionManager 類、session管理SessionManager 類、服務中實現長連接MinaService 類。長連接配置類中配置了服務器公網IP 地址、端口號、讀取數據的Buffer大小、超時連接等,在每次打開程序的時程序都會發送數據自動與服務器建立長連接。
計算機控制主要功能是對打印機溫度、X、Y、Z 軸移動、打印文件等控制。下面就進行對程序進行黑盒測試,在打開文件直接將打印機的USB 接入電腦串口,ESP8266 模塊使用USB-TTL 模塊連接電腦另外一個串口。雙擊程序圖標打開程序,設置打印串口波特率250000 和ESP8266 模塊波特率115200 再打開串口,準備開始測試。
首先對計算機端程序單機測試,僅測試程序能否獨立控制打印機和發送數據等,對計算機控制程序黑盒測試過程記錄如表2 所示。
首先需要利用計算機控制程序將ESP8266 模塊初始化并連接上服務器端,連接完成后程序會默認為當前所有打印機為空閑狀態,每隔12S 會發送10 臺打印機空閑狀態的JSON 數據到服務器端然后將這數據轉而下發到android 手機APP,這時僅需要打開手機APP 查看是否為10 臺空閑打印機即可,查看程序中空閑碎片中的確為10 臺空閑中的打印機信息。在android 客戶端能夠接收到ESP8266 模塊發送的數據,在打印機一號預約打印頁面,點擊噴頭位移控制按鈕可以對當前打印機噴頭的移動和溫度控制,當移動Y軸20 時在計算機控制程序段能接收都android 客戶端發送的一條Json 數據,這條數據通過計算機控制程序可以過濾并解析后向打印機發送移動噴頭的指令信息。
對3D 打印機打印整個文件測試只需要在一號打印機預約打印頁面點擊打印物品,android 會發出一條“{"PID":"01","GID":"4"}”的Json 數據,表示打印機1 號打印機4 號物品,打印機就能實現整個模型的打印。

表1:本設計設計的G-code 代碼表

表2:計算機控制程序測試結果表
通過在android 手機APP 多種輸入測試,可以發現程序幾乎沒有任何功能上的問題。
通過對計算機控制程序、服務器端程序、android 客戶端程序黑盒測試,程序各個部分都能正常符合預期的運行,功能無異常情況,在對android 客戶端程序測試其實就是相當于對整個系統整合起來進行測試,都無異常情況,表明整個控制系統功能是可以實現的。
通過實際測試表明,用戶可通過移動端來遠程控制3D 打印機,并對其進行一系列指令操作,并且3D 打印機打印出的物品符合用戶需求,具有高效、精準的優點。