Blog
All Blog Posts | Next Post | Previous Post
Building Kiosks and IoT Systems with Delphi and Miletus
Today

If you are curious how you can use Delphi to create apps that run on SBCs like Raspberry Pi & ODROID, read on!
Not all software runs on a laptop or server. A lot of it lives inside small boxes mounted to a wall or hidden behind a panel: kiosks, terminals and controllers built around single board computers, doing one very specific task.
For one of our custom development projects, we built exactly this kind of kiosk-style application for self-service laundromats. The machines remain coin-operated, but customers now also have the option to start a wash by scanning a QR code and paying digitally.
The entire setup is powered by Delphi, TMS WEB Core and Miletus. In this post, well look at how the pieces fit together and how Miletus helps us bridge a web-based UI with local hardware!
Why Miletus?
Miletus is a TMS WEB Core application type that lets you build native desktop applications with web technologies, using Delphi as your development environment. The UI is built with HTML, JavaScript and CSS via TMS WEB Core, while Miletus packages everything into native executables for Windows, macOS, Linux and ARM targets such as Raspberry Pi.
For this laundromat project, that flexibility was important. By being able to target a single-board computer, we ended up with a device that is compact, affordable and economical to run 24/7. A single-board computer costs well under 100 euros, uses far less power than a typical PC, and fits easily behind a wall or inside a small cabinet.
At the same time, these boards can connect directly to the real world. Miletus for Raspberry Pi exposes hardware interfaces such as I2C, SPI, UART and individual GPIO pins, so the very same application that shows the user interface can also control relays and other electronics.
The Hardware
The laundromats already had their washing machines installed. What we needed to add was a small control station that could show a simple interface, talk to an online payment service and switch the machines on once payment was confirmed.
The basic setup consists of three pieces:
- a relay board to control the machines,
- a touch screen for the user,
- and a single-board computer running the Miletus application.
Development initially started on Raspberry Pi, which is directly supported by Miletus. At the time, however, hardware shortages made Raspberry Pi difficult to source in quantity, so we decided to switch to ODROID-N2+ boards instead.
Curious about what Raspberry Pi and ODROID can do? You can read about them in more detail in the following articles:

You might be tempted to ask: how can an ODROID board run Miletus if you can only find Raspberry Pi as the target? We already covered that part of this journey in an earlier blog post, so if you are curious about that, please head over and read how little effort it took to make Miletus run on a new target!
The Software
As this project was created for a very specific task, we decided on an intentionally short and clear flow:
- The customer selects a washing machine on the screen.
- The application creates a payment request via the REST API and shows a QR code.
- The customer pays with their payment app.
- The Miletus app monitors the payment and, once it is completed, activates the corresponding relay via GPIO.
- The washing machine starts its cycle and the remaining time is indicated until the end.
Once we chose Miletus, the rest of the stack came together quickly. TMS WEB Core let us build the UI in familiar Delphi syntax while targeting the web. A laundromat doesnt need a flashy interface, so we kept it simple with Bootstrap buttons and progress bars. TMS WEB Core also lets you bind controls to HTML templates, making it easy to upgrade the UI later without touching the core architecture.
On the integration side, the TWebHTTPRequest component handled the payment-related REST API calls with very little effort. Miletus then provided the crucial link to the physical world: through its helper methods we could access the GPIO pins, drive the relay board, and control the washing machines directly from the same application.

Proven in Everyday Use
The system has been running continuously for more than a year across four different laundromat locations. These are unattended, self-service environments that operate around the clock. Customers walk in, choose a machine, pay and end up with clean clothes. There is no operator standing beside the terminal to help or reset it.
In that context, reliability matters more than anything else. The fact that this Miletus-based solution has been running smoothly for such a long period is a strong signal that it is well suited to public-facing, always-on scenarios!
What Else Can You Build with Delphi and Miletus?
A laundromat is just one example. The same pattern works anywhere you need a screen, some logic, and a bit of hardware control.
With Delphi, TMS WEB Core and Miletus, you can build:
- kiosk-style terminals,
- ticketing or check-in stations,
- small control panels for buildings or machinery,
- IoT dashboards on single-board computers,
- and many more!
If you thought building a system like this would be complicated, we hope our custom development project gives you some inspiration. Use the Delphi skills you already have, design the UI in TMS WEB Core, and deploy a native application that can interact with hardware, all without learning new languages or frameworks.
If you already have a TMS WEB Core license, try Miletus on Raspberry Pi and see how quickly you can turn a web app into a native, hardware-connected solution. If not, now is the perfect time to get started with our Black Friday offer. And of course, we would love to hear about your projects, whether you are just starting out or already building something exciting!
Tunde Keller
This blog post has not received any comments yet.
All Blog Posts | Next Post | Previous Post