{"id":16238370,"url":"https://github.com/bdring/pendantsforfluidnc","last_synced_at":"2025-07-18T02:41:35.918Z","repository":{"id":198594272,"uuid":"700996725","full_name":"bdring/PendantsForFluidNC","owner":"bdring","description":"Pendants for controlling FluidNC CNC firmware","archived":false,"fork":false,"pushed_at":"2025-04-04T21:40:33.000Z","size":3002,"stargazers_count":41,"open_issues_count":2,"forks_count":18,"subscribers_count":11,"default_branch":"main","last_synced_at":"2025-06-07T00:32:51.843Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bdring.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-10-05T17:42:18.000Z","updated_at":"2025-05-23T07:01:08.000Z","dependencies_parsed_at":"2023-10-28T21:29:18.332Z","dependency_job_id":"d2ffce20-a36a-40c0-8e55-94ba3d0dcd58","html_url":"https://github.com/bdring/PendantsForFluidNC","commit_stats":null,"previous_names":["bdring/pendantsforfluidnc"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/bdring/PendantsForFluidNC","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bdring%2FPendantsForFluidNC","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bdring%2FPendantsForFluidNC/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bdring%2FPendantsForFluidNC/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bdring%2FPendantsForFluidNC/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bdring","download_url":"https://codeload.github.com/bdring/PendantsForFluidNC/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bdring%2FPendantsForFluidNC/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264492267,"owners_count":23617025,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-10T13:40:05.405Z","updated_at":"2025-07-09T16:03:31.411Z","avatar_url":"https://github.com/bdring.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PendantsForFluidNC\nPendants for controlling FluidNC CNC firmware\n\nThis is a collection of example \"pendant\" programs showing how to\nprogram a auxiliary microcontroller or other computer to interact\nwith a FluidNC CNC controller. FluidNC uses the [GRBL serial\nline protocol](https://github.com/gnea/grbl/wiki/Grbl-v1.1-Interface)\nfor control and status.  Unlike classic GRBL controllers which\nspeak that serial protocol on only one serial port,\nFluidNC can have multiple \"channels\" simultaneously speaking\nthe serial protocol.  The additional channels can include\nextra serial ports, TCP/Telnet connections, and TCP/WebSocket\nconnections.\n\nAnother serial port (UART) is an excellent way to connect an auxiliary\nmicrocontroller (MCU).  Every MCU has at least one UART, and most have\ntwo or more.  A UART needs only two signal lines and in some use\ncases only one.  Most MCU UARTs can operate at least as fast as\n115200 baud (10K characters per second) and some can go up to\n1Mbaud (100K characters per second) or more.  That is typically\nfast enough for a lot of interesting use cases.\n\n## What is a Pendant?\n\nIn addition to the main operator's console, traditional CNC machines\noften included an auxiliary control box that hung from a cable near\nthe machine.  Those boxes were called \"pendants\" because they were\nhanging or suspended from overhead. Typically pendants could perform a\nsubset of the most common operations like jogging and job\nstart/pause/stop.  Thus the word \"pendant\" has come to mean any small\nauxilary control for a CNC machine.\n\nA FluidNC Pendant that is implemented on a small MCU can be very\ninexpensive, since suitable MCUs can cost in the range of $1 to a few\ndollars.  The packaging and user-facing I/O devices (small displays,\npushbuttons, etc) are likely to dominate the cost.\n\n## What Can FluidNC Pendants Do?\n\nIn principle, a FluidNC Pendant could do anything that a traditional\nGCode Sender program can do, limited only by the resources of the\nMCU on which it is implemented.  Typically, a given pendant will\nonly do a targeted subset of the possibilities, because otherwise\nit would be just another sender requiring a full computer.  Some\nexamples of small-pendant use cases include:\n\n* Running \"playlists\" for art machines\n* Jog controllers\n* Input expansion\n* Extra displays like light towers or OLEDs, to show machine state\n\n## How Do I Use This Code?\n\nThis code is a collection of examples to help you develop your own\ncustom pendants.  Many of the examples can be compiled for several\ndifferent MCUs, including various ESP32 variants, AVR Arduinos and\nsome ARM MCUs.  We expect that you will start with an example that\nis similar to your desired gadget and modify/extend it for your needs.\nWe do not provide free consultation for doing that.\n\nOne of the basic components that is useful for display pendants is\nthe GrblParser class.  GrblParser decodes standard GRBL protocol\nreport messages and calls user-supplied code to display the information\ntherein.\n\n## Support\n\nThis code is not supported.  It is provided as a courtesy to help\nyou get started.  If you have ideas for new features, please implement\nthem yourself or contract with someone to do so.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbdring%2Fpendantsforfluidnc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbdring%2Fpendantsforfluidnc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbdring%2Fpendantsforfluidnc/lists"}