profile image
Hans Philipp Zimmermann
⌖ Verl, Germany

I am a self taught software developer proficient in many programming languages. I can write apps for Windows, Android and iOS.

Moreover I am able to write software for various microcontoller architectures.

Another skill of mine is electrical engineering. I can do electronic circuit design from prototype to production.

About me


In 2010 I started learning C programming. I was motivated by the fact that I was in need of a piece of software that did not exist. So I decided to create it on my own and while doing so I discovered my passion for programming. Since then I have realized countless projects and learned several languages targeting a lot of subject areas inluding desktop development, mobile development, embedded development and web design.

+ My Story

I am not a studied computer scientist or electronics engineer. My actual educational background is that of an industrial mechanic. In 2008 I came to CNC machining through a job change. Since then I work as a CNC programmer and operator.

As already mentioned, I started to deal with programming in 2010. This was not a private decision but had quite practical reasons that concerned my work as a CNC programmer. We had problems to find suitable software to transfer and archive CNC programs with our specific EPL2 controllers to a Windows computer.

So I developed a suitable software. What started as a small project quickly developed into a complex application with far more functions than originally planned. During this project I could learn a lot and discovered my passion for programming. I haven't developed the CNC Suite application for a long time, but I update it from time to time and it is also available in the Windows Store. You can find the resources below in my Portfolio.

Beside the CNC Suite Application I worked on several small Projects to learn more about C++ and C Programming. In this time I discovered embedded programming in C and also in assembly language. In this time I was very interested in assembly language, I bought a book from Daniel Kussworm about modern x86 assembly language programming. You can see results of my experiments in the CNC Suite application repository.

In 2015 I had the idea to build technical designer furniture. Therefore, I have made myself self-employed part-time. This was for me a great playground where I could develop freely and learned a lot about electronics development, microcontroller programming, manual craft and CAD construction. To present my products and distribute them online I also had to learn the basics in Website programming in HTML, CSS and Javascript. I also learned how to use the 3D printer and how to design 3D models with Fusion 360. A small insight on what I created can be viewed on my old website. I ended this venture in 2019 as the cost to revenue ratio was not appropriate. But I have gained a lot of knowledge and insight from it.

During this time I also started to deal intensively with Bluetooth hardware and the control through apps. This gave birth to the idea that forms the basis for my current project, the LaRoomy Bluetooth Control System.

+ My Skills

Programming Knowledge:
  • C, C++ and C#
  • Android - Kotlin
  • iOS - Swift
  • HTML, CSS & Javascript
  • IDE: Visual Studio, Visual Studio Code, Android Studio, XCode, Microchip Studio, Powershell ISE
Scripting Knowledge:
  • NSIS
  • PowerShell
Operating Systems:
  • All Windows Operating Systems
  • Windows Server 2019/2022
  • Linux (Kali Linux, Ubuntu, Debian)
  • Mac OS
Electrical Engineering:
  • PCB Design with Eagle
  • Analog and Digital Circuit Design
Manufacturing & Construction
  • CAD with Fusion 360
  • 3D Printing
  • CNC Lathe and Milling
Other Skills:
  • Nmap, Metasploit, Wireshark
  • Clean Code, Software Design Patterns, Agile Development
  • German (native)
  • English
  • Driving License Class B

Portfolio


LaRoomy - Bluetooth Control

The LaRoomy Bluetooth-Control-System is made to quickly implement Bluetooth remote control features in embedded projects. It consists of the LaRoomy App and the LaRoomy API, a remote framework for embedded systems.

The cababilities of a remote device will be fetched by the LaRoomy App during the connection process and presented to the user. Now the user is able to control the remote device with the LaRoomy App through a unique app view customized for the specific remote device.

laroomy concept
• LaRoomy App (Kotlin/Swift)

The LaRoomy App for Android is written in Kotlin and the LaRoomy App for iOS is written in Swift. The iOS version is currently under development and not available in the App Store by now.

laroomy app ui view visit laroomy app website
• LaRoomy API for 32bit architectures (C/C++)

With the LaRoomy API all device capabilities can be defined in the source code of the remote device. The LaRoomy App adapts to the capabilities of the device and shows only necessary elements in the user interface which conforms to the properties of the device.

The API is available for different microcontroller architectures: Atmel SAM, Espressif ESP32, ST STM32 and Nordic nRF52. Examples are provided for all libraries.



• LaRoomy API for 8bit architectures (C)

This is a minimized version of the LaRoomy API for 8bit architectures. It is written in C. The GitHub repository contains application examples and a test board with schematic and pcb layout.




DNS-SD Device Control Project (C#/C++)

This project contains two elements, a windows application written in C# and a firmware project for the ESP32 microcontroller written in C++. The windows application acts as a dns-sd server. Every remote device which comes online in the local network connects automatically to the dns-sd server. Once the connection is established, a secure connection will be constructed by using symetric and assymetric encryption methods to achieve an end-to-end encryption.

dns-sd project encryption scheme

CNC Suite - Extended NC Editor

This desktop app is a tool to create, edit and archive CNC programs. Moreover it handles the serial data transmission from and to a machines with RS232 interface. It is written in C++ with a litte shade of C and assembly. It is also available in the Microsoft Store.

cnc suite app user interface

Serial Monitoring Tool

A lightweight and intuitive App to monitor up to four Serial Ports at the same time. The app is written in C# with the .NET Framework and the WinUI UX-Platform. The app is available in the Microsoft Store.

serial monitoring app user interface

Serial Data Transmission Utilities

While working as a CNC-Programmer it was a recurrent problem to find an application for modern systems which is capable to communicate with older machines via RS232 interface to transmit G-Code based CNC programs. So I decided to create this app by myself.

rs232 concept

On my way to this objective and when I published the first UWP app EPL-Exchange (written in C#) on the Microsoft Store, I realized that this is not only a problem of mine. Many other companies using older machines are concerned by this subject. With the feedback to my existing apps and information and requests from other companies, I created different solutions to cover many requirements including a platform independent wireless interface.


• EPL Exchange - UWP app written in C#

EPL Exchange is a tool to edit text based nc files and transmit them to or from a cnc machine. It is written for the Universal Window Platfrom in C#. When I later started to create electronic constructions, I added a terminal component to communicate with pcb modules over a UART interface.

epl exchange app ui view
• Transfer - Win32 desktop app (C/C++)

The purpose of the Transfer app is to exchange programs with older cnc machines via RS232 interface. After publishing my app EPL-Exchange in the Microsoft Store, I often had user request how to run the app on older windows systems. For an UWP app this is not possible, but a win32 app could be downward compatible. Therefore the app is intentionally kept simple. It runs down to Windows XP SP1.

transfer app ui view
• RS232 Websocket - A platform independent solution (C++)

One issue bothered me all the time: there was always the need for a cable connected to the machine and a desktop pc is needed in the vicinity of the machine. This was my motivation to develop a wireless and platform independent solution. A device based on an ESP8266 controller. The controller provides a websocket browser interface to enter or save programs and to transmit them to the machine. The controller converts the data and sends it over UART to a RS232 level converter.

websocket schematic picture

After some experiments I had the proove of concept, so I created the board with Eagle PCB Layout Editor. The case is created with Autodesk Fusion 360 and printed with my 3D printer. The firmware for the ESP8266 is written in C++ with Visual Studio Code. The front end web interface is written in html/css/javascript.

websocket schematic picture