BTE1522 DRE2213 – Week 11 BME280 – Cloud and Local IoT Visualisation

This week, Week 11, we reached an important milestone in the IoT learning journey. Building upon the foundations established in Weeks 9 and 10, this week’s activity focused on visualising sensor data through dashboards, using two different approaches:

      1. A cloud-hosted dashboard using Adafruit IO

      2. A self-hosted dashboard using HTML served directly from the Raspberry Pi Pico W (LilEx3)

By the end of this session, you no longer just reading sensors — but you’ve design a complete IoT data pipelines, from sensing to networking to visualisation.

This week is we transit our attention from collecting data to presenting data.

Using the BME280 environmental sensor, you are able to work with:

        1. Temperature

        2. Humidity

        3. Atmospheric pressure

The same sensor data was then visualised using two different dashboard approaches, highlighting important design choices in IoT systems.

Approach 1: Cloud Dashboard Using Adafruit IO – Refer to Act 7 in TINTA and Google Classsroom 

This method introduces students to cloud-based IoT platforms, a common industry practice.

Key concepts:

        1. WiFi connectivity

        2. MQTT protocol

        3. Publishing data to a third-party server

        4. Remote access and visualisation

Code Explanation (Adafruit IO Method)

from machine import Pin, I2C
import network
import time
from umqtt.simple import MQTTClient
import bme280
      • Imports modules for hardware control, networking, MQTT communication, and the BME280 sensor.

i2c = I2C(1, sda=Pin(2), scl=Pin(3), freq=400000)
bme = bme280.BME280(i2c=i2c)
      • Initializes the I2C bus and the BME280 sensor.

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(wifi_ssid, wifi_password)
      • Connects the Pico W to a WiFi network.

mqtt_client = MQTTClient(
client_id=mqtt_client_id,
server=mqtt_host,
user=mqtt_username,
password=mqtt_password)
      • Configures the MQTT client for communication with Adafruit IO.

values = bme.values
temp = values[0]
mqtt_client.publish(temp_feed, temp)
      • Reads sensor values and publishes temperature data to the cloud dashboard.

This approach shows how sensor data can be accessed anywhere in the world, but depends on external services and internet connectivity.

Approach 2: Self-Hosted HTML Dashboard on Pico W

This method shifts learning toward edge computing and embedded web servers.

Key concepts:

        1. HTTP client–server model

        2. Serving HTML from a microcontroller

        3. JSON data exchange

        4. JavaScript-based live updates

        5. Local network dashboards

 

Code Explanation (HTML Dashboard Method)

import socket
      • Enables the Pico W to act as a web server.

html = """<html>...</html>"""
      • Stores the dashboard webpage directly in Python memory.

s = socket.socket()
s.bind(('0.0.0.0', 80))
s.listen(1)
      • Starts an HTTP server on port 80.

if "/data" in request:
      • Distinguishes between:

        • Page requests (/)

        • Data requests (/data)

values = bme.values
      • Reads temperature, humidity, and pressure in real time.

fetch('/data')
      • JavaScript on the webpage periodically requests new sensor data and updates the display without refreshing the page.

This approach emphasizes system integration, where the device itself becomes the dashboard — similar to ground stations and embedded monitoring panels.

Comparing Both Dashboard Approaches

Feature Adafruit IO HTML on Pico W
Hosting Cloud Local (device)
Internet required Yes Local WiFi only
Protocol MQTT HTTP
Complexity Lower Higher
Control Limited Full
Educational value Intro to IoT cloud Full-stack IoT

Both approaches are valuable, and understanding when to use each is an important engineering skill.

Bringing It All Together

By connecting:

    1. Weeks 9 & 10 (MPU6050 motion sensing & data logging)

    2. Week 11 (IoT dashboards and networking)

you are now capable of:

      1. Interfacing multiple sensors

      2. Logging and processing data

      3. Transmitting data over networks

      4. Designing dashboards (cloud and local)

      5. Building complete IoT systems

At this stage, you are no longer following isolated tutorials, but are now ready to design and execute their own IoT projects.

BTE1522 DRE2213 – Week 9 and 10 MPU6050

Dear DRE and BTE-ian,

notes on serial data communication |  notes on reading MPU6050 data.

This week, you’ve gone thru to one of the most exciting aspects of embedded systems and sensor-based computing: collecting, processing, and logging motion data using the MPU6050 sensor. Working with the LilEx3 – our in-house Raspberry Pi Pico–based picosatellite simulator, you explored how real satellites interpret motion, orientation, and attitude information through microcontrollers and built-in algorithms.

This activity was designed not only to strengthen understanding of Python programming on microcontrollers, but also to demonstrate how sensor data can be captured, logged, and interpreted, a fundamental skill in IoT, robotics, aerospace, and scientific computing.

1. Introducing the MPU6050 Sensor

The MPU6050 combines a 3-axis accelerometer and 3-axis gyroscope, allowing us to detect:

        1. Linear acceleration (AX, AY, AZ)

        2. Angular velocity (GX, GY, GZ)

        3. Motion patterns

        4. Orientation of a device in space

In satellite engineering, this type of sensor is crucial for:

        1. Attitude determination

        2. Stabilisation

        3. Orientation control

        4. Deployment sequence monitoring

For our LiLex3 picosatellite simulator, this data helps you to understand how satellites “sense” their position and respond to environmental changes.

2. Python Programming on the Raspberry Pi Pico

Acomplishing the task, you wrote MicroPython code to:

      1. Initialise the I2C communication bus

      2. Read real-time sensor values

      3. Display values on the Thonny console

      4. Log data into a .txt file for later analysis

This hands-on exercise strengthened key Python concepts:

  1. Variables & Data Types
    • You handled multiple numeric readings and stored them in variables such as ax, ay, az.
  2. Functions & Modular Code
    • They used functions like mpu.values() and learned how functions return multiple sensor readings at once.
  3. Loops
    • A continuous while True: loop was used to collect real-time data every second.
  4. File Handling
    • One of the most important skills today was learning how to open, write, and save data to a file—essential for logging experiments.
  5. Example snippet:
    • file = open("data.txt", "a")
      file.write(f"{count},{ax},{ay},{az},{gx},{gy},{gz}\n")
      file.flush()
    • This allowed the Pico to create a growing dataset, which you can later open in Excel for plotting or further analysis.
  6. Printing to Console
    • The real-time values were also displayed in the Thonny console, helping you can visualize live changes as they physically moved the LiLex3 module.

3. Experiencing Motion: Determining Roll, Pitch, and Yaw

Rather than reading just “raw numbers,” you were tasked to interpret meaning behind the MPU6050 readings.

Through controlled physical movement of the LiLex3:

        1. Pitch changed when tilting forward/backward

        2. Roll changed when tilting left/right

        3. Yaw changed when rotating horizontally (similar to turning a compass)

By observing accelerometer and gyroscope patterns, you began to understand how flight controllers, drones, and satellites estimate their orientation in space.

This experience reinforces why MPU data is vital in aerospace applications:

      1. CubeSat attitude determination

      2. Drone flight stabilization

      3. Rocket telemetry

      4. Robotics navigation

      5. VR/AR motion tracking

Then you were encouraged to mark down the sensor readings corresponding to specific movements and attempt simple calculations for roll/pitch/yaw using standard trigonometric formulas (e.g., atan2).

4. Data Logging: Building a Dataset for Analysis

One of the biggest takeaways was the importance of data logging.

By saving values into a .txt file, you learned how to:

        1. Record experimental data
        2. Align timestamps and readings
        3.  Import the file into Excel
        4. Plot sensor graphs (AX vs. time, pitch changes, etc.)
        5. Observe patterns corresponding to movement

This introduces to real scientific data workflows used in:

        1. Research experiments

        2. IoT sensor monitoring

        3. Engineering testing

        4. Satellite mission data collection

The logged dataset becomes the “flight log” for their miniature picosatellite simulator.

5. Conclusion: Why Today’s Activity Matters

Today’s class was not just about wiring a sensor and reading numbers. It was about understanding how real systems sense, interpret, and record the world around them.

You learned:

        1. Embedded Python programming

        2. Real-time sensor acquisition

        3. Data logging techniques

        4. Interpreting physical motion through numerical patterns

        5. Satellite-style orientation measurement

By the end of the session, every student had generated their own dataset and gained insight into how satellites determine roll, pitch, and yaw—all through hands-on experimentation with the LiLex3 and MPU6050.

This activity bridges classroom concepts with real aerospace and IoT engineering, preparing you for more advanced missions involving filtering (Kalman), attitude determination, and flight-control algorithms.