help Help

IoT Digital Signage Use Cases

Real-world examples of Digital Signage IoT integration
Complete implementation guides with code examples

[ Sensors | GPIO | Smart Displays | Automation ]

Sign Service Elevator Floor 5 ▲ Fire Alarm EVACUATE Temp 24.5°C Kiosk Touch → Relay Real-World IoT Use Cases

Transform Your Digital Signage with IoT Integration

The Internet of Things (IoT) opens up endless possibilities for your digital signage network. By connecting sensors, switches, and other hardware to your displays, you can create dynamic, responsive signage that reacts to real-world events in real-time.

These use cases demonstrate how to integrate various sensors and inputs with SignPlayer using the Raspberry Pi GPIO interface and SignService event routing. Each example includes system diagrams, implementation code, and SignStudio configuration.

Real-time Updates
Real-time Updates

Instant display changes based on sensor input

GPIO Integration
GPIO Integration

Direct hardware connection via Raspberry Pi

Event Routing
Event Routing

SignService handles event distribution

Easy Setup
Easy Setup

Complete code examples ready to use

Elevator

Use Case 1: Elevator Floor Indicator

Display the current floor in an elevator lobby

System Diagram

+-----------------------------------------------------------------------------+
|                        ELEVATOR FLOOR INDICATOR                              |
+-----------------------------------------------------------------------------+

  Building                 IoT                    Digital Signage
  Infrastructure           Layer                  System
  +-------------+     +-------------+     +-------------+     +-------------+
  | Elevator    |     | Raspberry   |     | SignService |     | Lobby       |
  | Floor       | --> | Pi + Floor  | --> | (Windows)   | --> | Display     |
  | Sensors     |     | Detection   |     |             |     |             |
  +-------------+     +-------------+     +-------------+     +-------------+
       |                    |                    |                    |
  Reed switches        GPIO Input            Event Router         Shows:
  or relay outputs     Polling/IRQ           /player/send        "FLOOR 5"

Floor Sensor Types

  Option A: Reed Switches              Option B: Relay Output
  +------------------+                 +------------------+
  | Each floor has   |                 | Elevator panel   |
  | a magnetic reed  |                 | provides dry     |
  | switch activated |                 | contact output   |
  | by magnet on cab |                 | for each floor   |
  +------------------+                 +------------------+
         |                                    |
         v                                    v
  +------------------+                 +------------------+
  | Wire to GPIO     |                 | Wire to GPIO     |
  | GPIO 5 = Floor 1 |                 | Use multiplexer  |
  | GPIO 6 = Floor 2 |                 | or shift register|
  | GPIO 7 = Floor 3 |                 | for many floors  |
  | ...              |                 |                  |
  +------------------+                 +------------------+

Node.js Implementation

#!/usr/bin/node
// iotElevator.js - Elevator Floor Indicator

const https = require('https');
const { exec } = require('child_process');

const SIGNSERVICE_HOST = '192.168.68.52';
const SIGNSERVICE_PORT = 8094;
const EVENT_NAME = 'elevatorFloor';

// GPIO pin mapping for floors
const FLOOR_PINS = {
    5: 1,   // GPIO 5 = Floor 1
    6: 2,   // GPIO 6 = Floor 2
    13: 3,  // GPIO 13 = Floor 3
    19: 4,  // GPIO 19 = Floor 4
    26: 5   // GPIO 26 = Floor 5
};

let currentFloor = 0;
let lastDirection = 'idle';

function sendFloorUpdate(floor, direction) {
    const data = JSON.stringify({
        floor: floor,
        direction: direction,
        displayText: floor.toString()
    });

    const options = {
        hostname: SIGNSERVICE_HOST,
        port: SIGNSERVICE_PORT,
        path: `/player/sendEvent?eventName=${EVENT_NAME}&store=1`,
        method: 'POST',
        rejectUnauthorized: false,
        headers: {
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(data)
        }
    };

    const req = https.request(options, (res) => {
        console.log(`Floor ${floor} ${direction} - sent`);
    });

    req.on('error', (e) => console.error('Send error:', e.message));
    req.write(data);
    req.end();
}

// Poll every 100ms
setInterval(async () => {
    const floor = await detectFloor();

    if (floor !== null && floor !== currentFloor) {
        const direction = floor > currentFloor ? 'up' : 'down';
        currentFloor = floor;
        lastDirection = direction;
        sendFloorUpdate(floor, direction);
    }
}, 100);

console.log('Elevator floor indicator started...');
SignStudio Configuration: Create a scene with a Label component bound to the elevatorFloor event. The floor number updates automatically when the elevator reaches each floor.
Fire Alarm

Use Case 2: Fire Alarm Integration

Trigger emergency messages when fire alarm activates

System Diagram

+-----------------------------------------------------------------------------+
|                        FIRE ALARM INTEGRATION                                |
+-----------------------------------------------------------------------------+

  Fire Panel               IoT                    Digital Signage
  +-------------+     +-------------+     +-------------+     +-------------+
  | Fire Alarm  |     | Raspberry   |     | SignService |     | All         |
  | Panel       | --> | Pi Monitor  | --> | (Windows)   | --> | Displays    |
  | Relay Out   |     |             |     |             |     | EVACUATE!   |
  +-------------+     +-------------+     +-------------+     +-------------+
       |                    |                    |                    |
  Dry contact          GPIO 17 (NC)         Broadcast to         Override
  output on alarm      Detect open          all players          normal content
Safety Note: This integration is for informational display purposes only. Always ensure proper fire safety systems are in place according to local regulations. The fire alarm panel should trigger audible alarms independently of the digital signage system.

Node.js Implementation

#!/usr/bin/node
// iotFireAlarm.js - Fire Alarm Monitor

const https = require('https');
const { exec } = require('child_process');

const SIGNSERVICE_HOST = '192.168.68.52';
const ALARM_PIN = 17;  // Normally Closed contact
const CHECK_INTERVAL = 500;  // ms

let alarmActive = false;

function sendAlarmEvent(active) {
    const data = JSON.stringify({
        alarm: active,
        message: active ? 'FIRE - EVACUATE IMMEDIATELY' : 'All Clear',
        priority: active ? 'emergency' : 'normal',
        timestamp: new Date().toISOString()
    });

    const options = {
        hostname: SIGNSERVICE_HOST,
        port: 8094,
        path: '/player/sendEvent?eventName=fireAlarm&store=1',
        method: 'POST',
        rejectUnauthorized: false,
        headers: { 'Content-Type': 'application/json' }
    };

    const req = https.request(options);
    req.on('error', (e) => console.error('Send error:', e.message));
    req.write(data);
    req.end();

    console.log(`[${new Date().toISOString()}] Fire alarm: ${active ? 'ACTIVE' : 'CLEARED'}`);
}

setInterval(async () => {
    const currentState = await readAlarmPin();

    if (currentState !== alarmActive) {
        alarmActive = currentState;
        sendAlarmEvent(alarmActive);
    }
}, CHECK_INTERVAL);

console.log('Fire alarm monitor started...');
console.log(`Monitoring GPIO ${ALARM_PIN} (NC contact)`);

How It Works

  • Normally Closed Contact: The fire alarm panel provides a dry contact output that opens when the alarm is triggered
  • GPIO Monitoring: The Raspberry Pi monitors GPIO 17 for state changes
  • Broadcast Event: When alarm activates, an event is broadcast to all SignPlayers
  • Content Override: SignStudio scenes can be configured to display emergency content when the fireAlarm event is received
Kiosk

Use Case 3: Interactive Information Kiosk

Touch-enabled kiosk with hardware feedback

System Diagram

+-----------------------------------------------------------------------------+
|                        INTERACTIVE KIOSK                                     |
+-----------------------------------------------------------------------------+

  User                     Digital Signage            Hardware Feedback
  +-------------+     +-------------------+     +-------------+
  |   Touch     |     |    SignPlayer     |     | LED Strip   |
  |   Screen    | --> |    (Display)      | --> | Confirm     |
  |             |     |                   |     | Button Glow |
  +-------------+     +-------------------+     +-------------+
       |                       |                      |
  Touch events            SignService              GPIO PWM
  on UI buttons           routes event             color change

Features

Menu Selection

Touch buttons to navigate through options

Visual Feedback

LED strip confirms selection with color change

Audio Feedback

Speaker plays confirmation sounds

Print Integration

Send print commands for receipts

LED Color States

// LED Strip colors (RGB values for different states)
const COLORS = {
    idle: { r: 0, g: 50, b: 100 },       // Soft blue
    select: { r: 0, g: 255, b: 0 },       // Green flash
    error: { r: 255, g: 0, b: 0 },        // Red
    processing: { r: 255, g: 165, b: 0 }  // Orange
};

The kiosk controller listens for events from SignService and triggers appropriate hardware responses including LED color changes and sound effects.

Meeting Room

Use Case 4: Meeting Room Display

Show room availability and booking status

System Diagram

+-----------------------------------------------------------------------------+
|                        MEETING ROOM DISPLAY                                  |
+-----------------------------------------------------------------------------+

  Calendar                 IoT Layer              Hardware
  +-------------+     +-------------+     +-------------+     +-------------+
  | Google/     |     | Node.js     |     | SignPlayer  |     | Door LED    |
  | Outlook     | --> | Calendar    | --> | Room Sign   |     | Green/Red   |
  | Calendar    |     | Poller      |     |             |     |             |
  +-------------+     +-------------+     +-------------+     +-------------+
       |                    |                    |                    |
  API Polling           Parse events         Show status          Hardware
  every 60s             Current/Next         Meeting name         indicator

Status Indicators

Green LED = Room Available

The room is free and can be booked. Display shows "Available" with next meeting countdown.

Red LED = Room Occupied

Meeting in progress. Display shows current meeting title, organizer, and time remaining.

Implementation Highlights

async function updateStatus() {
    const meetings = await getCalendarEvents();
    const current = meetings.find(isCurrentMeeting);
    const next = getNextMeeting(meetings);

    const status = {
        occupied: !!current,
        currentMeeting: current ? current.title : null,
        currentOrganizer: current ? current.organizer : null,
        currentEnd: current ? current.end : null,
        nextMeeting: next ? next.title : null,
        nextStart: next ? next.start : null,
        roomName: 'Conference Room A'
    };

    // Update LEDs
    setLED(GREEN_PIN, !status.occupied);
    setLED(RED_PIN, status.occupied);

    // Send to SignPlayer via SignService
    sendEvent('roomStatus', status);
}

// Poll every minute
setInterval(updateStatus, 60000);
Environmental

Use Case 5: Environmental Monitoring Dashboard

Multi-sensor environmental monitoring with alerts

Supported Sensors

+-----------------------------------------------------------------------------+
|                    ENVIRONMENTAL SENSORS                                     |
+-----------------------------------------------------------------------------+

  +------------------+     +------------------+     +------------------+
  | Temperature      |     | Humidity         |     | Air Quality      |
  | DHT11/DHT22      |     | DHT11/DHT22      |     | MQ-135           |
  | GPIO 5           |     | (Same sensor)    |     | GPIO 17 (ADC)    |
  +------------------+     +------------------+     +------------------+

  +------------------+     +------------------+     +------------------+
  | Light Level      |     | Motion           |     | Door Status      |
  | LDR + ADC        |     | PIR HC-SR501     |     | Reed Switch      |
  | GPIO 18 (ADC)    |     | GPIO 22          |     | GPIO 27          |
  +------------------+     +------------------+     +------------------+

Alert Thresholds

// Thresholds for alerts
const THRESHOLDS = {
    tempHigh: 30,      // Celsius
    tempLow: 15,       // Celsius
    humidityHigh: 70,  // Percent
    humidityLow: 30    // Percent
};
  • Temperature monitoring with high/low alerts
  • Humidity tracking for comfort levels
  • Motion detection for occupancy
  • Door status monitoring
  • Real-time dashboard updates every 5 seconds

Dashboard Output

const data = {
    temperature: dht.temp,
    humidity: dht.humidity,
    motion: motion === 1,
    doorClosed: door === 0,
    timestamp: new Date().toISOString(),
    alerts: []
};

// Format for display
data.tempDisplay = data.temperature ? `${data.temperature}C` : '--';
data.humidityDisplay = data.humidity ? `${data.humidity}%` : '--';
data.statusDisplay = data.alerts.length > 0 ? 'ALERT' : 'Normal';
Hardware

Hardware Quick Reference

GPIO pin assignments and power requirements

GPIO Pin Assignments (Common)

GPIO Pin Common Use Notes
4 7 Relay output 5V relay modules
5 29 DHT11 data Temperature/humidity
17 11 Fire alarm input NC contact
18 12 PWM (LED strip) NeoPixel compatible
22 15 PIR motion 3.3V signal
27 13 Reed switch Door/window sensor

Power Requirements

Device Voltage Current Power From
Relay module 5V 50-100mA Pi 5V rail
DHT11 3.3V 1mA Pi 3.3V rail
PIR sensor 5V 50mA Pi 5V rail
LED strip (30 LEDs) 5V 600mA External PSU
Pro Tip: When using LED strips with more than 10 LEDs, always use an external 5V power supply rated for the total current draw. Each WS2812B LED can draw up to 60mA at full white brightness.

Ready to Build Your IoT Digital Signage Solution?

Get started with our free platform and begin integrating sensors with your digital displays today.

live examples, see it in action

Checkout live examples of Digital Signage presentations. The SignPlayer can run everywhere, on Android, Windows, Mac, iPad and even inside your web browser

View More

product pricing

Find out why people call us “the world’s most popular digital signage platform”

View More

customers

Can it really be free?
What’s the catch?
Want to be amazed?
Read on...

View More