Skip to content

Interface and Application Programming

Tool Comparison

For this last group assignment, we compared tool options that are relevant for building an interface between a user, software, and a device. The comparison is based on tools from the official FabAcademy interface and application programming page that were used in our group workflow this week.

The links in the table point to the documentation pages where the tools were used. Here you can find more details and example code and setup.

Scoring

The score is a simple 1-5 rating for general usefulness in interface and application programming.

  • 5: very strong general fit
  • 4: strong fit with small setup or scope limits
  • 3: useful for one part of the workflow
  • 2: possible, but not ideal for this type of task
  • 1: relevant, but weak fit for this comparison
Tool FabAcademy Category General Role Strength Limitation Best Use Case Score Documentation
Codex AI Coding assistant Helps with code structure, debugging ideas, and boilerplate Results still need to be checked and understood Speeding up development while keeping the user in control 3 Williams Documentation
Docker Deploy Running services in containers Makes services repeatable and isolated Adds another layer to understand and manage Running brokers or backend services consistently 4 Williams Documentation
MQTT Device interfaces Publish-subscribe communication Lightweight and well suited for IoT Needs a broker and topic structure Wireless device data, distributed clients, and IoT dashboards 5 Williams Documentation
Mosquitto Device interfaces MQTT broker Lightweight, open source, easy to run locally Requires basic network and broker setup Local MQTT testing and small IoT networks 4 Williams Documentation
pySerial Device interfaces Reading serial data from a board Simple way to connect Python with USB serial devices Requires correct port settings and can lock the port Debugging and streaming values from a microcontroller to a computer 5 Williams Documentation
Three.js / WebGL Graphics 3D browser visualization Makes interactive 3D graphics accessible in the browser More setup than simple 2D graphics 3D views, simulation displays, and visual feedback interfaces 4 Williams Documentation
Arduino Languages Microcontroller programming Direct hardware access, large community, many examples Compile/upload cycle is slower than scripting Reliable firmware for sensors, outputs, and embedded control 5 Williams Documentation
JavaScript Languages Browser-side interaction Runs directly in the browser and connects well to web APIs Browser behavior and async code can add complexity Interactive web interfaces and live browser visualizations 5 Williams Documentation
Python Languages Host-side programming and data handling Easy to read, many libraries, fast to prototype Slower than compiled languages for low-level control Rapid testing, scripts, data processing, and application logic 5 Williams Documentation
WebSockets Languages / dataflow Realtime communication between server and browser Low-latency live updates Needs a running server and connection handling Streaming live device values to a browser interface 5 Williams Documentation
Jupyter Math Interactive development environment Combines code, notes, plots, and experiments in one place Less suitable as a final deployed application Step-by-step testing, documentation, and exploratory workflows 4 Williams Documentation
matplotlib Math Plotting and visualizing values Excellent for quick graphs and data checks Not ideal for polished realtime interfaces Inspecting sensor data, trends, and measurement behavior 4 Williams Documentation
MIT App Inventor User interfaces Visual mobile app development Fast way to create Android apps with buttons, labels, BLE extensions, and block logic Limited flexibility compared to native Android or web apps Simple mobile interfaces for sensors, Bluetooth devices, and quick prototypes 4 Nicos Documentation
Tkinter User interfaces Basic desktop GUI Built into Python and quick to start Visual design is limited compared to modern UI frameworks Small desktop tools, test panels, and simple live displays 4 Williams Documentation

Tool Notes

Codex

Codex is an AI coding assistant that can help with planning, writing, reviewing, and restructuring code. Its main strength is speed: it can generate boilerplate, suggest implementation approaches, and help debug errors quickly. Its weakness is that the output still needs human review, so it is best used in projects where the developer understands the goal and can check the result.

Docker

Docker is used to package and run software services in isolated containers. Its strength is repeatability: the same service can run on different machines with less manual setup. Its weakness is the extra layer of container concepts, so it is most useful for projects that need local servers, brokers, databases, or repeatable deployment environments.

MQTT

MQTT is a lightweight publish-subscribe protocol often used in IoT and sensor networks. Its main strength is that devices and applications do not need to talk directly to each other, because messages are routed through topics on a broker. Its weakness is that the system needs a broker and a clear topic structure, so it is best for distributed projects with multiple devices or clients.

Mosquitto

Mosquitto is an open source MQTT broker. Its strength is that it is lightweight, widely used, and easy to run for local tests or small networks. Its weakness is that networking, authentication, and broker configuration still need to be understood for more serious deployments, so it is best for MQTT prototypes and small IoT systems.

pySerial

pySerial is a Python library for communicating with serial ports. Its strength is simplicity: it makes it easy to read data from microcontrollers over USB serial. Its weakness is that serial ports can be locked by other programs and need correct port and baud-rate settings, so it is best for direct debugging, simple data streaming, and local hardware tests.

Three.js / WebGL

Three.js is a JavaScript library that makes WebGL easier to use for 3D graphics in the browser. Its strength is that it can create interactive 3D scenes without writing raw WebGL code. Its weakness is that it needs more setup than basic HTML or 2D graphics, so it is best for projects that need spatial visualization, simulations, or expressive browser-based feedback.

Arduino

Arduino is a widely used platform for programming microcontrollers, usually with C/C++ style sketches. Its strength is direct hardware control, strong community support, and many existing libraries and examples. Its weakness is the compile-and-upload workflow, so it is best for embedded projects where reliable sensor reading, output control, and timing matter.

JavaScript

JavaScript is the standard language for interactive behavior in web browsers. Its strength is that it runs directly in the browser and can connect user interfaces with web APIs, graphics, and live communication. Its weakness is that asynchronous behavior can become complex, so it is best for browser-based dashboards, controls, visualizations, and web applications.

Python

Python is a high-level programming language that is very useful for scripting, data handling, and rapid prototyping. Its strength is readability and the large ecosystem of libraries for hardware communication, plotting, web servers, and data processing. Its weakness is that it is usually not the best choice for very low-level or highly time-critical embedded tasks, so it is best for host-side tools, experiments, and application logic.

WebSockets

WebSockets provide a persistent connection for realtime communication between a client and a server. Their strength is low-latency updates without repeatedly refreshing or polling. Their weakness is that connection state and reconnect behavior need to be handled, so they are best for live dashboards, browser interfaces, multiplayer tools, and realtime device feedback.

Jupyter

Jupyter is an interactive notebook environment that combines code, text, outputs, and visualizations. Its strength is that experiments can be documented and executed step by step in one place. Its weakness is that notebooks can become messy or hard to deploy as final applications, so Jupyter is best for exploration, learning, testing, and documenting workflows.

matplotlib

matplotlib is a Python plotting library for creating charts and visualizations. Its strength is quick visual inspection of data, especially during testing and analysis. Its weakness is that it is not ideal for polished realtime interfaces, so it is best for graphs, measurements, debugging, and documenting data behavior.

MIT App Inventor

MIT App Inventor is a browser-based development environment for creating Android applications with a visual interface and block-based programming logic. Its main strength is that simple mobile apps can be built quickly without writing native Android code. Components such as buttons, labels, sensors, and extensions can be combined in the Designer view, while the app behavior is defined in the Blocks editor. The limitation is that App Inventor is less flexible than a fully custom Android app or a web application. More complex layouts, advanced debugging, and larger software architectures can become harder to manage. However, for a simple sensor interface with a clear user interaction, it is a very good fit.

Tkinter

Tkinter is Python’s built-in toolkit for simple desktop interfaces. Its strength is that it requires little setup and is enough for basic windows, buttons, labels, and test interfaces. Its weakness is that it looks less modern than many dedicated UI frameworks, so it is best for small desktop tools, debug panels, and quick control interfaces.

Conclusion

For quick testing and documentation, Python, pySerial, matplotlib, and Jupyter were the most useful combination. For building a real interface, JavaScript with WebSockets was the strongest path because it allowed live values to reach the browser, while MIT App Inventor was the most direct option for creating a simple mobile interface. For visual feedback, Three.js/WebGL was useful when the interface needed more than numbers or a simple plot. For wireless communication, MQTT with Mosquitto was the best fit because it separated the device from the computer and made the data available to multiple clients. Overall, the best results can be archived by combining different tools with clear roles.