sarthak budakati
Published © MIT

Smart Sensor Data Publishing Node using STM32L475 and MQTT

This project demonstrates a smart Industrial IoT edge node built using the STM32L475 IoT Node that continuously reads onboard environmental

IntermediateProtip3 hours6
Smart Sensor Data Publishing Node using STM32L475 and MQTT

Things used in this project

Hardware components

STM32 Nucleo STM32L475 IoT Discovery Board
×1
USB-A to Mini-USB Cable
USB-A to Mini-USB Cable
×1
laptop
×1

Software apps and online services

STM32CUBEPROG
STMicroelectronics STM32CUBEPROG
MQTT
MQTT

Story

Read more

Custom parts and enclosures

STM32L475 Smart Sensor Data Publishing Node Firmware (MQTT + UART)

Schematics

circuit diagram

Code

STM32L475 Smart Sensor Data Publishing Node Firmware (MQTT + UART)

C/C++
/* USER CODE BEGIN Header */
/*
* Smart Sensor Data Publishing Node
* Author: Sarthak Budakoti
* Board: STM32L475 IoT Discovery Node
*
* Features:
* 1. Reads onboard temperature sensor
* 2. Publishes temperature data using MQTT
* 3. Sends humidity data over UART
*/
/* USER CODE END Header */
#include "main.h"
#include "stdio.h"
#include "string.h"

/* BSP Sensor Drivers */
#include "stm32l475e_iot01_tsensor.h"
#include "stm32l475e_iot01_hsensor.h"

/* UART Handle */
UART_HandleTypeDef huart1;

/* Buffers */
char uartBuffer[100];
char mqttPayload[100];

/* Function Prototypes */
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);

/* MQTT Publish Function */
void MQTT_Publish_Data(float temperature)
{
    sprintf(mqttPayload,
            "{\"temperature\": %.2f}",
            temperature);

    /*
     * Replace this section with actual MQTT publish API
     *
     * Example:
     * MQTT_Publish("stm32l475/sensor/data",
     *              mqttPayload);
     */

    printf("MQTT Published: %s\n", mqttPayload);
}

/* UART Send Function */
void UART_Send(char *msg)
{
    HAL_UART_Transmit(&huart1,
                      (uint8_t*)msg,
                      strlen(msg),
                      HAL_MAX_DELAY);
}

int main(void)
{
    /* HAL Initialization */
    HAL_Init();

    /* Configure System Clock */
    SystemClock_Config();

    /* Peripheral Initialization */
    MX_GPIO_Init();
    MX_USART1_UART_Init();

    /* Initialize Sensors */
    BSP_TSENSOR_Init();
    BSP_HSENSOR_Init();

    /* Initial UART Message */
    UART_Send("System Started...\r\n");

    while (1)
    {
        float temperature;
        float humidity;

        /* Read Sensors */
        temperature = BSP_TSENSOR_ReadTemp();
        humidity = BSP_HSENSOR_ReadHumidity();

        /* Publish Temperature using MQTT */
        MQTT_Publish_Data(temperature);

        /* Send Humidity over UART */
        sprintf(uartBuffer,
                "Humidity: %.2f %%\r\n",
                humidity);

        UART_Send(uartBuffer);

        /* Delay */
        HAL_Delay(2000);
    }
}

/**
  * @brief USART1 Initialization
  */
static void MX_USART1_UART_Init(void)
{
    huart1.Instance = USART1;
    huart1.Init.BaudRate = 115200;
    huart1.Init.WordLength = UART_WORDLENGTH_8B;
    huart1.Init.StopBits = UART_STOPBITS_1;
    huart1.Init.Parity = UART_PARITY_NONE;
    huart1.Init.Mode = UART_MODE_TX_RX;
    huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
    huart1.Init.OverSampling = UART_OVERSAMPLING_16;

    if (HAL_UART_Init(&huart1) != HAL_OK)
    {
        Error_Handler();
    }
}

/**
  * @brief GPIO Initialization
  */
static void MX_GPIO_Init(void)
{
    __HAL_RCC_GPIOA_CLK_ENABLE();
    __HAL_RCC_GPIOB_CLK_ENABLE();
}

/**
  * @brief System Clock Configuration
  */
void SystemClock_Config(void)
{
    /* Auto-generated by CubeMX */
}

/**
  * @brief Error Handler
  */
void Error_Handler(void)
{
    while (1)
    {
    }
}

Credits

sarthak budakati
2 projects • 0 followers

Comments