User Tools

Site Tools


developer_guide_for_mm32_platform

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
developer_guide_for_mm32_platform [2017/02/05 14:35]
admin [Gcode uploading]
developer_guide_for_mm32_platform [2019/03/20 04:21] (current)
Line 1: Line 1:
 +!! This page is under construction !!
  
 +If you have questions or report bug, please send email to: support at malyansys dot com.
 +
 +===== MM32 Platform =====
 +
 +Malyan M200/​M100/​M160/​M190/​M300/​M450 printer use 32-bit MCU powered main board, which name we called MM32 platform. This document will describe detail about MM32 platform, to help 3rd party developer to create app to work with our device. ​
 +
 +MM32 platform include below blocks: ​
 +
 +1. 32-bit MCU with native high speed USB interface and 72Mhz and up clock frequency to support real-time operation during printing. ​
 +
 +2. Wireless network support including webUI, TCP/​web-socket link for Gcode interface, UDP discovery/​monitor protocol and smartconfig for setting AP's name or password. ​
 +
 +3. LCD screen interface and changeable theme. ​
 +
 +MM32+ board is planed which reserved more programmability,​ will available for sale in the future. ​
 +
 +===== Command =====
 +
 +=== G-code ===
 +Please reference to [[extended_gcode_table]] for more information. ​
 +
 +=== Extended command ===
 +
 +Extended command is use to monitor status and control Gcode command flow. This group of command is sent though different channel to gcode and have priority. ​
 +
 +== Command format ==
 +
 +{CMD:PARAM}
 +
 +Start byte: "​{"​
 +
 +Command string: CMD. Please reference to available command list. 
 +
 +Divide byte: ":"​
 +
 +Value string: PARAM
 +
 +End byte: "​}"​
 +
 +== Available commands ==
 +
 +^ CMD   ^ PARAM ^ comment ^
 +| 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 |
 +
 +===== Network interface =====
 +
 +=== UDP discovery ===
 +
 +MM32 will response UDP broadcast or unicast on port 6000. 
 +
 +Command: "​{e:​e}"​ will reply 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 ===
 +
 +MM32 support TCP interface instead of com port to send gcode. Create TCP socket to MM32(port 23) and send gcode as string will receive response. ​
 +
 +1. Send empty line included LF/CR character to flush garbage in buffer. ​
 +
 +2. Handle RST signal properly. Close current connection and open new socket will recover from disconnect. ​
 +
 +Note: MM32 default accept two TCP connections. If single connection send command, both connected sockets will receive same respond message. ​
 +
 +Sample App 1: Telnet [[http://​malyansys.com/​downloads/​Mputty.exe]]
 +
 +Sample App 2: Modified Repetier-host (To be added)
 +
 +=== Web socket ===
 +
 +Because most web browser lack of support of TCP socket, MM32 provide web socket for integrating control panel using web UI. Below sample code in Javascript is use to send G28 command though the web socket: ​
 +
 +<​code>​
 +<​script>​
 +var ws = new WebSocket('​ws://​192.168.43.50:​81'​);​
 +ws.onopen = function () {
 +  ws.send("​G28"​);​
 +}
 +</​script>​
 +</​code>​
 +
 +Using web socket with javascipt can implement web interface with MM32. 
 +
 +=== REST method ===
 +
 +Using AJAX and REST method can send single line gcode without socket connection: ​
 +
 +<​code>​
 +http://​IP_ADDRESS/​set?​code=G28\nG29
 +</​code>​
 +
 +Send extended command though REST: 
 +
 +<​code>​
 +http://​IP_ADDRESS/​set?​cmd={P:​X}
 +</​code>​
 +
 +
 +=== Upload new webUI ===
 +
 +To change original web UI, upload html file using browser to the 3rd upload box in address: http://​printer_address/​up
 +
 +If zero size file uploaded, original web page will recovered. ​
 +
 +
 +==== Gcode uploading ====
 +
 +MM32 platform provide two methods to upload plain text format gcode file. MicroSD card must exist in card slot. All uploaded files will be cached in microSD card, saved as "​cache.gc"​. ​
 +
 +Make sure disable background polling thread/​timer,​ file upload procedure will be interrupt if other command issued. ​
 +
 +Recommend use fast mode before uploading using gcode: **M563 S6**
 +
 +=== HTTP post ===
 +
 +Upload gcode to url: http://​ip_address/​upload
 +
 +Using web browser: ​
 +<​code>​
 +Dropzone.options.mydz = {
 +    dictDefaultMessage:​ "​Upload GCode here",
 + accept: function(file,​ done) {
 + if (file.name.contains("​.g"​)) done();
 + else done("​Not a valid GCode file."​);​
 + },
 + init: function() {
 + this.on('​error',​ function(file,​ response) {
 +            var errorMessage = response.errorMessage;​
 +            $(file.previewElement).find('​.dz-error-message'​).text(errorMessage);​
 +        });
 + this.on("​addedfile",​ function() {
 +   if (this.files[1]!=null){
 + this.removeFile(this.files[0]);​
 +   }
 + });
 + }
 +};
 +
 +<div id="​dropzone"><​form action="/​upload"​ class="​dropzone"​ id="​mydz"/></​div>​
 +</​code>​
 +
 +=== Download from web server ===
 +
 +Using gcode M564 will download http file: 
 +<​code>​
 +M564 http://​server/​file.gcode
 +</​code>​
 +
 +Gcode M565 will download and print http file: 
 +<​code>​
 +M565 http://​server/​file.gcode
 +</​code>​
 +
 +
 +
 +=== To be continue ===
developer_guide_for_mm32_platform.txt · Last modified: 2019/03/20 04:21 (external edit)