IoT Device Development: An Overview

Date: 1 September 2021

The article gives a brief overview of what is required to develop an IoT device to work with DashIO. It covers all three connection types; BLE (Bluetooth LE), TCP and MQTT and any IoT device hardware and is therefore a general description of the steps required for success. Take a look at the code examples to see how it works on specific hardware platforms.

IoT Device Communication Layers

Select an IoT device with suitable characteristics for your requirements. Make sure has the hardware capabillties for the type of comunication you want (i.e. Bluetooth LE, Ethernet or WiFi etc.). Communication between the IoT device and the DashIO app is achieved through three abstract layers:

Layer Name Description
3 Your Application Create Controls. Manage sensors, actuators and other IoT device behaviour and identify them to the Dash Connection layer.
2 DashIO Device and Connections Create a Device and connections to encode and decode IoT Dashboard messages using a DashIO library.
1 Messaging through BLE, TCP and MQTT connection types (a) BLE (Bluetooth Low Energy) messaging through BLE peripheral.
(b) TCP socket messaging over WiFi or Ethernet etc.
(c) MQTT client subscribe and publish messaging over WiFi or Ethernet etc.

For layer 1, one or more connection types may be used together in an IoT device.
Each layer is easily managed in your IoT device, as described below, and starting with the lowest level layer 1:

Layer 1(a): Bluetooth LE (BLE):

Bluetooth LE is a fast way to connect to an IoT device that is close by. It is easy to connect to because credentials such as a username and password are not required. However, this results in security limitations. Typically, only client can communicate through a BLE connections to an IoT devce at a time.

For basic information on BLE communication, take a look at the excellent introduction at:

BLE Setup

BLE communication for DashIO is achieved with one BLE service containing a characteristic having the properties write without response and notify. Alternatively, you may use two characteristics; one for write without response and one for notify. You may also use the property write instead of write without response.

Install the appropriate BLE library you have chosen for your IoT device. Your IoT device BLE hardware may require setting unique identifiers (UUIDs) for the service and characteristics of the BLE connection. For example, for the ESP32, you will need to create 128 bit service and characteristic UUIDs. These can be generated using an online tool such as:

BLE Device Discovery

The DashIO app can perform a BLE scan to discover BLE connected IoT devices. You must ensure that the firat 6 characters of the advertised peripheral name (local name) are "DashIO" so that the DashIO Dashboard can identify the correct IoT devices.

Layer 1(b): TCP

TCP sockets are another fast way to connect to an IoT device that is close by. TCP provides better secutiry that BLE. TCP can potentially allow multiple clients to connect to an IoT device simultaneously.


You will need to install and setup an appropriate WiFi or Ethernet library to allow your IoT device to communicate through your local network. For WiFi, you will require the SSID and password for your local WiFi network.

TCP Socket

Communication with the DashIO app is achieved through a TCP socket and your IoT device will be operating as a server on a specified TCP port. Therefore, you may need to install an appropriate TCP server library or it may be part of the WiF/Ethernet library.

TCP Device Discovery

The DashIO app can discover the IoT device using mDNS. Therefore, you may need to install an appropriate mDNS library or it may be part of the WiFi/Ethernet library.

For discovery, mDNS search string must be setup with a service-id of "DashIO" and a protocol of "tcp". Th service-id and protocol may be combined to become "_DashIO._tcp."

If mDNS is not available in your IoT device, you can manually create a connection to the IoT device in the DashIO app. You will need to know the IP address and port for your IoT device.

Layer 1(c): MQTT

MQTT is a great way to send messages between IoT devices and dash the DashIO MQTT Server allows connectivity between IoT devices anywhere on the Internet. For more details, take a look at the the MQTT website:


You will need to install and setup an appropriate WiFi or Ethernet library to allow your IoT device to communicate through your local network. For WiFi, you will require the SSID and password for your local WiFi network.


Install an MQTT client library on your IoT Device and setup the MQTT host. You will need your MQTT account username and password and the MQTT broker URL, port and SSL setting. For the dash Server, the settings are as follows:

Setting Value
Port 8883
SSL enabled

There are four MQTT topics that are used for sending and receiving messages through the MQTT publish and subscribe system and their structure is:

“username / device_ID / topic_tip”

The username is the MQTT account username and the device_ID is a unique identifier for the IoT device, typically the mac address from the comms peripheral in the IoT device.

The topic_tip is the only part of the topic that differs between the four topics. The topic_tip may be one of the following:

topic_tip Description
“control” The IoT device subscribes to the Control topic to receive Control messages from the DashIO app.
“data” The IoT device publishes messages for the DashIO app on the data topic.
“alarm” The IoT device may publish alarm messages through the alarm topic. The dash server uses the alarm messages to create Push Notifications for the mobile phone or tablet running the DashIO app application.
Alarm messages are only available if you are using the dash server.
“announce” When an IoT device is powered up, it should publish an announce message to register the IoT device with the dashsServer.
Announce messages are only available if you are using the DashIO server.

MQTT Device Discovery

The DashIO app can discover the IoT device using an MQTT connection ONLY if it is using dash, the DashIO MQTT broker. The IoT device must send an announce message on the anounce topic for device discovery to be successful. The dash server sends a list of known connections to the DashIO app so the app can discover the IoT device.

Layer 2: Dash Device and Connection

Download and include the DashIO library in your IoT device project.

Create Device Object Instance

Create a DashioDevice from the DashIO library. The DashioDevice stores the unique device identifier and is used to create messages for sending to the DashIO app. Typically, the device identifier is obtained from the mac address of the communications peripheral of the IoT device, alternatively a UUID may also be used.

Create Connection Object Instances

Create one Connection from the DashIO library for each connection type you are using in Layer 1. The connections are used to process and store incoming messages.

Layer 3: Your Application

Build the input and output functionality, sensors, displays, buttons and other behaviour into your IoT device and assign these to the Connections. This is the process of creating the back-end of the Controls in the IoT Device. Each Control will require a unique control_ID for its connection, so that the DashIO app can identify it.

Connections, Devices, Device Views and Controls

The DashIO app enables user configurable Controls to be placed on Device Views on the DashIO app. The Controls model the behaviour of the IoT device. Each Control is able to display information received from the IoT device or to send Control information to the IoT device.

Messages are used to send and receive data between Controls on the DashIO app and corresponding abstract Controls within the IoT device. Connections are use to manage the messages. A connection is required for each connection type (BLE, TCP or MQTT) supported by the IoT device.

Each Control belongs to, and is displayed on, a Device View on the DashIO app. Each Device View belongs to an IoT device. Device Views are displayed on the DashIO app in columns. The Device View’s height has a maximum value of the screen height and width of one to three columns. The number of columns on the DashIO app differs between phones and tablets as follows:


  • Orientation: Portrait only
  • One column


  • Orientation: Landscape only
  • Three columns

A Device View contains a number of user configurable parameters that combine into a theme for the Device View. All Controls on the Device View are displayed according to the theme of the Device View.

The following figure shows the relations ship between Controls, Device Views, devices and connections: