Skip to content
Go to file

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


This repo contains a set of tools that you can use to set up a simple, scalable, MQTT over BLE implementation.

WARNING: This is not in a usable state yet!

Getting Started

On a PC:

  • Install an MQTT server at the default port on localhost
  • Install node.js and npm
  • cd nodejs_bridge;nodejs index.js
  • cd nodejs_server;nodejs index.js
  • Connect to an Espruino device and upload espruino_node

How it works

You have 3 main components:

  • MQTToBLE nodes - low power Bluetooth LE devices that want to use MQTT
  • MQTToBLE bridge - powered Bluetooth LE devices with internet connections. These communicate with MQTToBLE nodes and connect to a MQTToBLE server
  • MQTToBLE server - a server with an internet connection. This controls everything, choosing the nearest MQTToBLE bridge and telling it to connect to a MQTToBLE node

Note: The directories within this repo are for implementations of components for different platforms.


  • Each MQTToBLE node implements the MQTT protocol, and then uses BLE to transport the MQTT datastream.
  • A MQTToBLE node spends 99% of its time as a normal BLE advertiser.
  • An MQTToBLE bridge will connect to a MQTToBLE node when there is data to be sent to is or the MQTToBLE node advertises that it has data it needs to send. The bridge will then disconnect after a short period of inactivity.

Each MQTToBLE node advertises the following 128 bit Service UUIDs:

  • ac910000-43be-801f-3ffc-65d26351c312 - Implements MQTToBLE, but no data to send
  • ac910001-43be-801f-3ffc-65d26351c312 - Implements MQTToBLE, there is data ready to send

Each MQTToBLE node also has the following BLE service and characteristics (much like Nordic UART):

  • Service ac910001-43be-801f-3ffc-65d26351c312
  • TX Characteristic ac910002-43be-801f-3ffc-65d26351c312 - from bridge TO node
  • RX Characteristic ac910003-43be-801f-3ffc-65d26351c312 - from node TO bridge


Currently this is not implemented, however:

  • An MQTToBLE bridge could bond with every device it connects to
  • A PIN could be added to MQTToBLE nodes and the MQTToBLE server could be made aware of the PINs of all enrolled devices.

Bridge -> Server comms

These are also done over MQTT:

  • Each bridge has a name
  • MQTToBLE/{bridgename}/advertise {addr:str, rssi:int, dataReady:bool} is sent from the bridge for each advertisement received
  • To connect, server sends MQTToBLE/{bridgename}/tx {addr:str, data:[...]} to the bridge, which can contain empty ([]) data. Data to be sent must be chunked into 20 byte chunks already by the server.
  • When data is received, the bridge sends MQTToBLE/{bridgename}/rx {addr:str, data:[...]} to the server with any received data packets



  • More node implementations. ESP32 Arduino, nRF51/2 C code


  • More testing/hardening of ESP32 implementation
  • Report back TX complete/fail
  • Some kind of configuration other than the .h file (HTTP server?) so one binary can be used on multiple devices


  • Handle TX complete/fail messages
  • Keep track of whether a bridge is busy and don't send it more data if it is


This repo contains a set of tools that you can use to set up a simple, scalable, MQTT over BLE implementation



No releases published
You can’t perform that action at this time.