User Tools

Site Tools


communications

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
communications [2016/09/13 03:31]
Matthew Upp
communications [2020/06/07 04:44] (current)
Matthew Upp [Table]
Line 1: Line 1:
-===== Sample code for web interface =====+~~NOTOC~~
  
-Source: http://wiki.malyansys.com/doku.php?id=sample_code_for_web_interface+====== Communications ======
  
 +----
  
-More API will be add soon. +===== Commands =====
  
  
-**Send GCODE M565 to start print file cache.gc**+==== 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?rowsHeaderSource=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             | 
 +|  J    | X       | Moves the X-Axis                   | 
 +| :::   | Y       | Moves the Y-Axis                   | 
 +| :::   | Z       | Moves the Z-Axis                   | 
 +| R     | M       | Return mac address                 | 
 +|  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> <code>
 function start_p(){ function start_p(){
Line 17: Line 81:
 } }
 </code> </code>
 +\\
  
-**Send GCODE M566 to rename file cache.gc** 
-<code> 
-M566 newfilename.gc 
-</code> 
  
-**Get printing status**+==== Get printing status ====
 <code> <code>
 $.get("inquiry",function(data,status){ $.get("inquiry",function(data,status){
Line 42: Line 103:
 }); });
 </code> </code>
 +\\
  
-**Send Control command {P:X} to cancel print**+ 
 +==== Send Control command {P:X} to cancel print ====
 <code> <code>
 function cancel_p(){ function cancel_p(){
Line 53: Line 116:
 } }
 </code> </code>
 +\\
  
  
-**Set extruder temperature**+==== Set extruder temperature ====
 <code> <code>
 function pad(num, size) { function pad(num, size) {
Line 69: Line 133:
 }); });
 </code> </code>
 +\\
  
  
-**Stop preheat heat bed**+==== Stop preheat heat bed ====
 <code> <code>
 $("#clrp").click(function(){ $("#clrp").click(function(){
Line 81: Line 146:
 }); });
 </code> </code>
 +\\
  
-**Set printing speed**+ 
 +==== Set printing speed ====
 <code> <code>
 1X Speed: {C:S10} 1X Speed: {C:S10}
Line 88: Line 155:
 5X Max 5X Max
 </code> </code>
 +\\
 +
  
-**Enable fast mode for web uploading**+==== Send gcode though WebSocket interface ====
 <code> <code>
-GCodeS value can be 2~6 +<script> 
-M563 S6+var ws = new WebSocket('ws://192.168.20.164:81'); 
 +ws.onopen = function () { 
 +  ws.send("G28"); 
 +} 
 +</script>
 </code> </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 X10 Y10
 +</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: 
  
-**Send gcode though websocket interface** 
 <code> <code>
 <script> <script>
Line 105: Line 311:
 </code> </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.1473737465.txt.gz · Last modified: 2016/09/13 03:31 by Matthew Upp