Rapid Firmware Development with the Barracuda App Server

(IoT Device Client Programming Using Lua)

In the following video tutorial, we show how the Barracuda App Server can be used to rapidly and interactively develop control logic in an embedded FreeRTOS system without having to compile or upload new firmware during the development process.

IoT Device = Client or Server?

From a device perspective, IoT typically means acting as a network client. This tutorial focuses on using Lua and the Barracuda App Server network libraries for simplifying the design of an IoT device client. The web server component is used for the initial development, then later disabled in the final product since only the network client libraries are needed.

What is an IoT device?

An IoT device is simply a network enabled client that sends and/or receives data from an online cloud server. The data transmitted can be anything including sensor data and control messages. IoT device protocols include HTTP, MQTT, WebSockets, SMQ, OPC-UA and so on.

The high level Lua language included in the Barracuda App Server is really well suited for running on embedded systems, including microcontrollers. You may have used other high level languages such as Python, and you will find Lua very similar to Python. In general, high level languages, including JavaScript, have much in common. We like to refer to Lua as a high level language, and not a scripting language, since the code is compiled into machine code. However, the machine code is run on a Lua virtual machine and not natively on the microcontroller. In general, you will find Lua being fast when it is used for what it is good at.

The real benefit with Lua comes when mixing real time modules implemented in C code with control logic designed in Lua. The dynamic nature of Lua enables the developers to interactively test control code in an embedded device without having to build and upload new firmware.

In the video below, we will look into how Lua can significantly speed up the interactive development time of an IoT enabled headless device. A headless device simply means it has no graphical user interface, neither onboard or remotely via web. However, we will use a web based IDE and the Barracuda App Server running on the microcontroller during the interactive development process to speed up the development time. When the development is complete, the web based IDE will be removed and the final IoT application implemented in Lua will be embedded as a ZIP file inside the firmware image.

From Interactive Development to Released Product

The video below shows the complete development process from rapid interactive development to creating the final firmware release. The video starts by providing an introduction to the available tools and documentation.

Download Barracuda App Server for ESP32:

We use an ESP32 in the video tutorial below, but Lua can run on most embedded systems. You can follow along the video tutorial with your own ESP32 if you install the Barracuda App Server for ESP32.

ESP32 Lua boot

Rapid Firmware Development Video Tutorial (19 Minutes):

Download video example code from GitHub. Use the SharkSSL IDE for easy firmware flashing.

The online service "If This Then That" (IFTTT) introduced in the above video is a great tool for DIY projects. However, if you're looking to create a professional IoT client, check out the MQTT Sparkplug Enabled Weather Station example. This ready-to-run example offers a valuable opportunity to explore the capabilities and benefits of using Lua and MQTT Sparkplug in embedded devices. You can use the design patterns you learned in the above video when creating any type of IoT client, including MQTT clients.

MQTT Sparkplug enabled weather station

Why Use Lua in Embedded Systems?

The C/C++ programming languages dominate embedded systems programming, but developers often run into issues such as buffer overflows, memory leaks, and other memory corruption errors. With Lua you avoid these problems, particularly in larger projects where many computer programmers with varying skills are involved.

Why Lua and not Python?

Lua abstracts out the details for the underlying microcontroller hardware. Instead of worrying about the bits and the bytes, a developer simply accesses methods of a peripheral object to control the hardware. Hardware control is done via a so called Lua binding. The abstraction of the hardware layer allows developers to focus on the application specifics rather than on the workings of the low-lying hardware.

New to Lua?

Get a quick introduction to Lua by following our Online Interactive Lua Tutorials

See also:

Discover More:

No matter what your background or project goals, we're here to help you find the perfect solution! Are you a maker looking for the right tools? A startup trying to get off the ground? A large business seeking new software solutions? We've got you covered.

If you have any questions or just aren't sure which product is right for you, don't hesitate to reach out. Our team is dedicated to helping you overcome your hardware/software challenges and find the best solution for your needs. Let us know how we can help - we'd love to lend a hand!


OPC-UA Client & Server

An easy to use OPC UA stack that enables bridging of OPC-UA enabled industrial products with cloud services, IT, and HTML5 user interfaces.

Edge Controller

Edge Controller

Use our user programmable Edge-Controller as a tool to accelerate development of the next generation industrial edge products and to facilitate rapid IoT and IIoT development.

On-Premises IoT

On-Premises IoT Platform

Learn how to use the Barracuda App Server as your On-Premises IoT Foundation.

Embedded Web Server

Barracuda Embedded Web Server

The compact Web Server C library is included in the Barracuda App Server protocol suite but can also be used standalone.

WebSocket Server

Microcontroller Friendly

The tiny Minnow Server enables modern web server user interfaces to be used as the graphical front end for tiny microcontrollers. Make sure to check out the reference design and the Minnow Server design guide.

WebDAV Server

Network File System

Why use FTP when you can use your device as a secure network drive.

HTTP Client

Secure HTTP Client Library

PikeHTTP is a compact and secure HTTP client C library that greatly simplifies the design of HTTP/REST style apps in C or C++.

WebSocket Client

Microcontroller Friendly

The embedded WebSocket C library lets developers design tiny and secure IoT applications based on the WebSocket protocol.

SMTP Client

Secure Embedded SMTP Library

Send alarms and other notifications from any microcontroller powered product.

Crypto Library

RayCrypto C Library

The RayCrypto engine is an extremely small and fast embedded crypto library designed specifically for embedded resource-constrained devices.

Embedded PKI Service

Automatic SSL Certificate Management for Devices

Real Time Logic's SharkTrust™ service is an automatic Public Key Infrastructure (PKI) solution for products containing an Embedded Web Server.


Modbus TCP client

The Modbus client enables bridging of Modbus enabled industrial products with modern IoT devices and HTML5 powered HMIs.

Posted in Whitepapers