The Project assignment will be handed out on 19 April 2021 .

The project assignment requires you to design and implement a BLE-Based Sensor Network. At the end of the project, you will submit a report and demonstrate your implementation.

Problem Description and Requirements

Bluetooth Low Energy (BLE) is becoming a dominant industry standard for short-range IoT communications. It is now emerging as a good alternative for providing wireless connectivity to low-power sensors. In this project, you will design and implement a BLE-based sensor network which consists of one or more sensor nodes and a gateway. To simplify the project, the sensor network uses a single-hop topology wherein the sensor nodes are all within communication range from the gateway. The gateway also has a backhaul link, which is used for receiving queries via CoAP.

When the gateway receives a query via CoAP, it immediately initiates scanning to find the appropriate sensor. If an appropriate sensor is discovered, the gateway connects to the sensor, reads the data, and sends it back to the requestor. If no appropriate sensor is discovered, the gateway sends back an error message.

The requirements on the gateway and sensor nodes are divided into three types: Core, Completion, and Challenge. To be considered a reasonable attempt, you must design, implement and demonstrate the Core requirements on both the gateway and sensor nodes.

Requirement Type Requirements


  • The gateway node must always be switched on.
  • The gateway node must be able to scan for sensors within its range via the BLE interface.
  • The gateway node must be able to connect to a chosen sensor node and read the necessary data via the BLE interface.


  • The sensor node must always be switched on.
  • The sensor node must advertise its presence and the type of sensor data (e.g. temperature, humidity, etc.) it provides via the BLE interface, so that it can be discovered by the gateway node
  • The sensor node must allow the gateway node to establish connection so the latter can read the sensor data. Since the sensor node has no real attached sensor, you can generate random sensor data during your testing.
Completion Gateway:
  • The gateway node must host a CoAP server which listens for requests via the WIFI interface

  • The gateway node must support the following methods and unique resource identifiers (URIs):

  • GET coap://[gateway-ip-adddress]/temp: This request will return a reading from a temperature sensor.

  • GET coap://[gateway-ip-adddress]/humid: This request will return a reading from a humidity sensor.

You are free to format the payload of the CoAP responses (this is part of your design), however, the response must include the following information: (1) Unix timestamp; (2) sensor reading value; and (3) sensor reading unit. For temperature, the unit must be Celsius whereas for humidity, it must be Percent.

You are also free to define and format the different kinds of error messages that the gateway can respond to a client.



  • The sensor node must be duty-cycled, i.e., it must periodically switch on and switch off to reduce power consumption. You are free to design the duty cycling scheme, but you must thoroughly evaluate the performance trade-offs in your design.
  • You should implement the duty-cycling functionality as an addition to the core sensor node functionality (specified in the core requirements) which can be easily enabled or disabled.

Hardware and Base Code

To facilitate the implementation and evaluation of your designs, two M5Stack devices will be loaned to you. M5Stack is a versatile device equipped with WiFi and BLE which can be easily programmed using Arduino Studio. One key advantage of M5Stack is that you can modify the BLE source code to easily implement your ideas. Of course, you are free to use other BLE devices that you can have access. You may also collaborate with your classmates during testing so you have more devices for testing.

For more information about M5Stack Arduino IDE, visit this page. A tutorial on how to setup Arduio Studio will be done during the lecture on 20 April 2021.

You can download the base code for the gateway here. For the sensor, you can use the example here as base code. You can use the given base codes for implementing your designs. Alternatively, you can write your implementation from scratch.

Report and Source Code

A report explaining your designs and presenting validation results is to be submitted at the end of the project. You should clearly explain the novel aspects of your designs, cite the relevant sources where you have taken codes, ideas, design, etc. from, and also provide explanation of why your designs work well or do not work well under the different scenarios. An important part of your report is the Evaluation section. You must perform experiments to measure the response time of your system. Response time is measured from the perspective of the CoAP client, and defined as the time delay between the sending of the CoAP request and the receipt of the CoAP response. You will need to think about other performance metrics that you want to measure, as well as the parameters that you will need to vary that will affect the performance metrics. You are encouraged to use the template at ReportTemplate to structure your report.

You must submit a copy of your source code through the submission system; that will allow us to run your implementation and validate it. Ensure that your code is properly formatted and commented.

The deadline for the submission of the project report (and source code) is 23 May 2021. A demonstration of your implementation will be carried out on 26-28 May 2021 . See Demo for more information.


Item Description Weight
Core Functionality The gateway and sensor node implementation satisfies the core requirements specified in this handout. This item will be graded during the demo. 40%
Completion Functionality The gateway node implementation satisfies the additional completion requirements specified in this handout. This item will be graded during the demo. 15%
Challenge Functionality The sensor node implementation satisfies the additional challenge requirements specified in this handout. This item will be graded during the demo. 10%
Report The report provides a comprehensive description of the project. See Report section above for more details. The report will be used to grade this item. 30%
Coding This item refers to the clarity and readability of the code you have written, i.e., whether your code uses consistent coding style and sufficient documentation. The source code will be used to grade this item. 5%

M5Stack Github:

Sample BLE Server:

ESP32 BLE Arduino:

Documentation for Arduino ESP32 BLE: (see pages 3-12)

CoAP for Arduino:

CoAP Client Shell (Java Jar):

CoAP Command Line Interface Client: