User Tools

Site Tools


communications

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
communications [2016/08/19 09:09]
Matthew Upp created
communications [2017/11/25 11:53] (current)
Matthew Upp [Table]
Line 1: Line 1:
-**test**+~~NOTOC~~ 
 + 
 +====== Communications ====== 
 + 
 +---- 
 + 
 +===== Commands ===== 
 + 
 + 
 +==== G-code ==== 
 +Standard Marlin compatible G-codes can be found at the [[http://​reprap.org/​wiki/​G-code|RepRap wiki: G-code]]. \\ 
 +<wrap lo>//Not all standard G-code are supported by the MP Select Mini.//</​wrap>​ \\ 
 + 
 +See the [[g-code|G-code]] page for information about software to use and how to send G-code. 
 +\\ 
 + 
 + 
 +==== Extended G-code ==== 
 +See the [[extended_g-code_table|Extended G-code Table]] for G-code that is more or less specific to the MP Select Mini & Malyan printers. \\ 
 +\\ 
 + 
 + 
 +==== Command Format ===== 
 + 
 +<​code>​ 
 +{CMD:​PARAM} 
 + 
 +Start byte: "​{"​ 
 + 
 +Command string: CMD. Please reference to available command list.  
 + 
 +Divide byte: ":"​ 
 + 
 +Value string: PARAM 
 + 
 +End byte: "​}"​ 
 +</​code>​ 
 +\\ 
 + 
 + 
 +=== Available Commands === 
 +{{tablelayout?​rowsFixed=1&​rowsVisible=15&​colwidth="​60px,​80px,​245px"&​float=left}} 
 +^  CMD  ^  PARAM  ^  function ​                         ^ 
 +|  P    | X       | Cancel print                       | 
 +| :::   | H       | Homing ​                            | 
 +| :::   | P       | Pause print                        | 
 +| :::   | R       | Resume print                       | 
 +| :::   | M       | Print cache.gc ​                    | 
 +|  C    | T0000   | Set T0 temperature ​                | 
 +| :::   | P000    | Set hotbed temperature ​            | 
 +|  e    | e       | Return printing status ​            | 
 +| :::   | M       | Return mac address ​                | 
 +|  J    | X       | Moves the X-Axis ​                  | 
 +|  :::  | Y       | Moves the Y-Axis ​                  | 
 +|  :::  | Z       | Moves the Z-Axis ​                  | 
 +|  S    | I       | List files on the microSD card     | 
 +|  V    |         | Displays firmware versions on LCD  | 
 +|  W    |         | Deletes WiFi SSID and password ​    | 
 +|       ​| ​        ​| ​                                   | 
 +\\ 
 +\\ 
 + 
 +---- 
 + 
 +===== Sample Code for Web UI ===== 
 + 
 + 
 +==== Sample Web UI ==== 
 +Moved to it's own page. [[sample_webui|Sample Web UI]] \\ 
 +\\ 
 + 
 + 
 +==== Send GCODE M565 to start print file cache.gc ==== 
 +<​code>​ 
 +function start_p(){ 
 + $.ajax({ 
 + url: "​set?​code=M565",​ 
 + cache: false 
 + }).done(function(html) { 
 + }); 
 +
 +</​code>​ 
 +\\ 
 + 
 + 
 +==== Get printing status ==== 
 +<​code>​ 
 +$.get("​inquiry",​function(data,​status){ 
 + $("#​rde"​).text(data.match(/​\d+/​g)[0]);​ 
 + $("#​rdp"​).text(data.match(/​\d+/​g)[2]);​ 
 + var c=data.charAt(data.length-1);​ 
 + if (c=='​I'​) 
 +
 + $("#​stat"​).text("​Status:​ Idle"​);​ 
 + $("#​pgs"​).css("​width","​0%"​);​ 
 +
 + else if (c=='​P'​) 
 +
 + $("#​stat"​).text("​Status:​ Printing"​);​ 
 + $("#​pgs"​).css("​width",​data.match(/​\d+/​g)[4]+"​%"​);​ 
 +
 + else $("#​stat"​).text("​Status:​ "); 
 +}); 
 +</​code>​ 
 +\\ 
 + 
 + 
 +==== Send Control command {P:X} to cancel print ==== 
 +<​code>​ 
 +function cancel_p(){ 
 +    $.ajax({ 
 + url: "​set?​cmd={P:​X}",​ 
 + cache: false 
 + }).done(function(html) { 
 + }); 
 +
 +</​code>​ 
 +\\ 
 + 
 + 
 +==== Set extruder temperature ==== 
 +<​code>​ 
 +function pad(num, size) { 
 +    var s = "​000"​ + num; 
 +    return s.substr(s.length-size);​ 
 +
 + 
 +var value=pad($("#​wre"​).val(),​3);​ 
 +$.ajax({ 
 + url: '​set?​cmd={C:​T0'​+value+'​}',​ 
 + cache: false 
 +}).done(function(html) { 
 +}); 
 +</​code>​ 
 +\\ 
 + 
 + 
 +==== Stop preheat heat bed ==== 
 +<​code>​ 
 +$("#​clrp"​).click(function(){ 
 + $.ajax({ 
 + url: "​set?​cmd={C:​P000}",​ 
 + cache: false 
 + }).done(function(html) { 
 + }); 
 +}); 
 +</​code>​ 
 +\\ 
 + 
 + 
 +==== Set printing speed ==== 
 +<​code>​ 
 +1X Speed: {C:S10} 
 +1.5X Speed: {C:S15} 
 +5X Max 
 +</​code>​ 
 +\\ 
 + 
 + 
 +==== Send gcode though WebSocket interface ==== 
 +<​code>​ 
 +<​script>​ 
 +var ws = new WebSocket('​ws://​192.168.20.164:​81'​);​ 
 +ws.onopen = function () { 
 +  ws.send("​G28"​);​ 
 +
 +</​script>​ 
 +</​code>​ 
 +\\ 
 + 
 + 
 +==== REST ==== 
 +Using AJAX and REST a single line of code g-code can be sent without a socket connection. 
 + 
 +<​code>​ 
 +http://​192.168.2.150/​set?​code=G28 
 +</​code>​ 
 + 
 + 
 +Send extended command though REST: 
 + 
 +<​code>​ 
 +http://​192.168.1.155/​set?​cmd={P:​X} 
 +</​code>​ 
 +\\ 
 + 
 +==== Web Browser Address Bar ==== 
 +While the MP Select Mini V1/V2 is connected to WiFi you may use the format ​**''​%%http://​PRINTERS_IP_ADDRESS/​set?​code=G-CODE_COMMAND%%''​** to send a single line of code g-code using a web browsers address/URL bar. See the examples in the following code block. 
 + 
 +**Format:** ''​%%http://​PRINTERS_IP_ADDRESS/​set?​code=G-CODE_COMMAND%%''​ \\ 
 +<​code>​ 
 +http://​192.168.20.113/​set?​code=G1 X53 
 +http://​192.168.20.113/​set?​code=M563 S6 
 +http://​192.168.20.113/​set?​code=G1 X Y 
 +</​code>​ 
 + 
 +When a command is sent and received successfully the browser should display `Ok`, `OK`, or `ok`. Additional g-code commands can be sent one after another using the same format.  
 + 
 +\\ 
 + 
 +---- 
 + 
 + 
 +===== Network interface ===== 
 + 
 + 
 +==== UDP Interface ==== 
 +MM32 will response UDP broadcast or unicast on port 6000.  
 + 
 +Command: "​{e:​e}"​ will reply with current status; "​{e:​M}"​ will echo MAC address. 
 + 
 +Below is sample C# code for discovery MM32 in local network.  
 + 
 +<​code>​ 
 +            NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();​ 
 + 
 +            for (int i = 0; i < interfaces.Length;​ i++) 
 +            { 
 +                if (interfaces[i].OperationalStatus != OperationalStatus.Up) continue; 
 +                IPInterfaceProperties property = interfaces[i].GetIPProperties();​ 
 +                foreach (UnicastIPAddressInformation ip in property.UnicastAddresses) 
 +                { 
 +                    //​textBox1.Text += ip.Address + Environment.NewLine;​ 
 + 
 +                    if (ip.Address.AddressFamily == AddressFamily.InterNetworkV6) continue; 
 +                    if (ip.Address.GetAddressBytes()[0] == 255 || ip.Address.GetAddressBytes()[0] == 0) continue; 
 + 
 +                    UdpClient client = new UdpClient(new IPEndPoint(ip.Address,​ 0)); 
 +                    IPEndPoint iep = new IPEndPoint(IPAddress.Broadcast,​ 6000); 
 +                    byte[] buffer = Encoding.UTF8.GetBytes("​{e:​e}"​);​ 
 +                    client.Send(buffer,​ buffer.Length,​ iep); 
 +                    Thread.Sleep(100);​ 
 +                    while (client.Available != 0) 
 +                    { 
 +                        byte[] data = client.Receive(ref iep); 
 +                        //​textBox1.Text += Encoding.UTF8.GetString(data) + Environment.NewLine;​ 
 + 
 +                        //if (Encoding.UTF8.GetString(data).Contains("​}"​)) textBox1.Text += iep.Address;​ 
 +                         
 +                        string str = Encoding.UTF8.GetString(data);​ 
 + 
 +                            var regex = new Regex(@"​\d+"​);​ 
 +                            MatchCollection mc = regex.Matches(str);​ 
 + 
 +                            if (mc.Count == 4) 
 +                            { 
 +                                notifyIcon1.Text = "​Extruder:"​ + mc[0].Value + "°C Target:"​ + mc[1].Value + "​°C\nPlatform:"​ + mc[2].Value + "°C Target:"​ + mc[3].Value + "​°C";​ 
 +                            } 
 +                             
 +                        toolStripComboBox1.Items.Add(iep.Address);​ 
 +                        toolStripComboBox1.SelectedIndex = 0; 
 + 
 +                        localIP = ip.Address;​ 
 +                    } 
 + 
 +                    client.Close();​ 
 +                } 
 +            } 
 +</​code>​ 
 +\\ 
 + 
 +==== TCP Interface ==== 
 +The printer also supports TCP interface instead of COM port to send G-code. Create a TCP socket on port 23 and send G-code as a string to receive a response. 
 + 
 +  * Send empty line included LF/CR character to flush garbage in buffer.  
 + 
 +  * Handle RST(reset) signal properly by closing the current connection and open a new socket to recover from disconnect.  
 + 
 +The printer by default will accept two TCP connections. If a single connection sends a command, both connected sockets will receive same response message.  
 + 
 +Use a program like PuTTY or another Telnet client to connect to the MP Select Mini. 
 + 
 + 
 +---- 
 + 
 + 
 + 
 +===== Upload Custom Web UI ===== 
 +<wrap lo><​wrap hi>//​NOTE:​ You'll need to be using at least UI Controller firmware version 42 to enable this feature.//</​wrap></​wrap>​ 
 +  - Enter ''​%%http://​PRINTERS_IP_ADDRESS/​up%%''​ into a web browsers address bar 
 +  - Upload html file using the 3rd "​Choose File" button 
 +  - Click the "​Upload web" button 
 +  - Enter ''​%%http://​PRINTERS_IP_ADDRESS%%''​ 
 +  - Custom Web UI should appear 
 + 
 + 
 +===== Default Web UI ===== 
 +  - Enter ''​%%http://​PRINTERS_IP_ADDRESS/​up%%''​ into a web browsers address bar 
 +  - Click the "​Upload web" button (don't bother with the "​Choose File" button 
 +  - Enter ''​%%http://​PRINTERS_IP_ADDRESS%%''​ 
 +  - Default Web UI will appear 
 + 
 + 
 +==== Sample Web UI ==== 
 +Moved to it's own page. [[sample_webui|Sample Web UI]] \\ 
 + 
 + 
 +---- 
 + 
 + 
 +==== WebSocket ==== 
 +The printer provides a WebSocket server for integrating control panel using a Web UI. Below is sample Javascript code to send G28 command though the WebSocket:  
 + 
 +<​code>​ 
 +<​script>​ 
 +var ws = new WebSocket('​ws://​192.168.43.50:​81'​);​ 
 +ws.onopen = function () { 
 +  ws.send("​G28"​);​ 
 +
 +</​script>​ 
 +</​code>​ 
 + 
 +Using JavaScript along with the WebSocket, you can create a custom Web UI. 
 + 
 + 
 +==== WebSocket Test Page ==== 
 +Moved to it's own page. [[websocket_test_page|WebSocket Test Page]] \\ 
 +\\
communications.1471597751.txt.gz · Last modified: 2016/08/19 09:09 by Matthew Upp