English Click this button for the international website

Tally light ESP32 voor Blackmagic ATEM switcher

In het vorige artikel schreef ik over het opzetten van een low-budget studio voor het streamen van live video tijdens de Corona (COVID-19) lockdown. Inmiddels heeft de studio een paar upgrades ondergaan. Zo hebben we nu ook de beschikking over een Blackmagic Design ATEM Mini Pro videoswitcher met 4 camera’s. Dit zijn consumentencamera’s zonder tally light. In deze blog laat ik zien hoe je met behulp van een ESP32 microcontroller, in dit geval een M5StickC afkomstig van VNGsystems in Gouda, zelf ESP32 Tally lights kunt maken.

Tally light met ESP32 voor Blackmagic ATEM switcher: inactief/preview/program
Tally light met ESP32 voor Blackmagic ATEM switcher: inactief/preview/program

Tally Light

Een “tally light” (Wikipedia) is een rood indicatielampje dat je meestal bovenop op professionele videocamera’s tegenkomt. Het wordt vooral gebruikt bij opnames met meerdere camera’s. Het lampje geeft aan of een camera “live” (“program”) is. Dit is zowel voor mensen vóór de camera als de cameraman zelf handig om te weten. De cameraman weet dan bijvoorbeeld dat hij z’n camera stil moet houden, en de mensen voor de camera weten in welke camera ze moeten kijken.

Tally light op een camera
Tally light op een camera (bron: https://en.wikipedia.org/wiki/Tally_light)

Soms wordt naast rood ook de kleur groen gebruikt om aan te geven dat het beeld van de camera actief is als “preview”. De tally lights worden aangestuurd door de video switcher. In dit geval gebruiken we een Blackmagic Design ATEM Mini Pro en gaat de communicatie draadloos via WiFi.

Blackmagic Design ATEM Mini Pro video switcher

De Blackmagic Design ATEM Mini Pro video switcher is een complete videoproductie- en streaming studio in een klein kastje. Er zijn o.a. inputs voor 4 HDMI bronnen en een output voor HDMI preview. Je kunt de ATEM Mini in bijvoorbeeld OBS Studio als videobron gebruiken d.m.v. de USB-aansluiting. De computer ziet de ATEM Mini dan als een webcam elke je in OBS Studio aan een scene kunt toevoegen.

Blackmagic Design ATEM mini
Blackmagic Design ATEM mini

Je kunt de ATEM Mini met de knoppen bedienen, of op afstand met een PC of Mac met de Blackmagic video switcher software via LAN. We zullen de communicatie via LAN benutten voor dit tally light-project.

Blackmagic Design Atem mini
Getest en aanbevolen door OneGuyOneBlog.com:

Blackmagic Design Atem mini
Amazon.nl

M5StickC: ESP32 ontwikkelmodule

Voor een eerste versie van dit Tally Light-project gebruik ik een M5StickC ESP-32 ontwikkelmodule. Met deze module kun je snel en eenvoudig projecten ontwikkelen en testen. De module heeft naast een ESP32-microcontroller (met ingebouwde WiFi en Bluetooth) een kleine TFT LCD, accu en LED. Ik heb deze module eerder gebruikt voor het project COVID-19 CORONA Tracker: ESP32 & Arduino IDE.

M5Stack M5Stick-C ESP32 Mini-Ontwikkelboard
Getest en aanbevolen door OneGuyOneBlog.com:

M5Stack M5Stick-C ESP32 Mini-Ontwikkelboard
VNGsystems.nl

ATEM Arduino libraries

Voor het programmeren van de M5StickC gebruiken we de bekende Arduino IDE. Daarnaast maken we gebruik van Arduino libraries ontwikkeld door Kasper Skårhøj van SKAARHOJ. Kasper heeft niet alleen een library gemaakt maar ook het communicatieprotocol van de ATEM switchers gedocumenteeerd. De libraries zijn op het moment van schrijven alleen geschikt voor een Arduino (met ethernet shield) of ESP8266 (WiFi), dus we moeten een paar kleine aanpassingen doen om deze met de ESP32 te laten werken.

ESP32 Tally light met M5StickC

Dit was voorlopig genoeg informatie, we gaan nu aan de slag. Voor dit project zullen we de volgende stappen doorlopen:

  1. Installeer de Arduino IDE en maak deze gereed voor het programmeren van de M5StickC.
  2. Installeer de ATEM Arduino libraries en maak deze geschikt voor de ESP32.
  3. Gebruik de sketch uit dit artikel om de tally light te testen.
  4. Pas de sketch naar eigen smaak aan en verbeter deze.

Installeer de Arduino IDE, ESP32 core en M5StickC libraries

Zoals gewoonlijk, installeer je de Arduino IDE met de ESP32 core. Wanneer je de M5StickC gebruikt, installeer je ook de M5StickC libraries. Voor meer informatie kun je de  blog “De M5StickC programmeren met de Arduino IDE” raadplegen. Gebruik je een andere ESP32 module, lees dan de blog “ESP32 met Arduino IDE op Linux en Windows“.

Installeer de ATEM Arduino libraries

Download de SKAARHOJ open projects files van Github. Kopieer de bestanden in de map “ArduinoLibs” naar de libraries map van je Arduino IDE. Als het goed is heb je dan een flink aantal nieuwe mappen in je libraries-map, zoals bijvoorbeeld Arduino/libraries/ATEM, Arduino/libraries/ATEMbase etc.

De library is compatible met Arduino (met ethernet shield) en de ESP8266 (WiFi), maar nog niet met de ESP32. Dit is eenvoudig te verhelpen door in totaal 3 wijzigingen door te voeren in de twee bestanden ATEMbase.cpp en ATEMbase.h.

In libraries/ATEMbase/ATEMbase.cpp, rond regel 50:

Zoek naar

		// Set up Udp communication object:
	#ifdef ESP8266
	WiFiUDP Udp;
	#else
	EthernetUDP Udp;
	#endif

en vervang dit door:

		// Set up Udp communication object:
	WiFiUDP Udp;

 

In het tweede bestand, libraries/ATEMbase/ATEMbase.h, zoek rond regel 35 naar:

#ifdef ESP8266
#include <WifiUDP.h>
#else
#include <EthernetUdp.h>
#endif

en vervang dit door het onderstaande (let op hoofletters/kleine letters):

 #include <WiFiUdp.h>

 

De tweede wijziging in dit bestand, rond regel 60, zoek naar dit fragment:

  	#ifdef ESP8266
  	WiFiUDP _Udp;
  	#else
	EthernetUDP _Udp;					// UDP object for communication, see constructor.
	#endif

en vervang dit door:

  	WiFiUDP _Udp;

Je kunt de ATEM library nu in je ESP32-projecten gebruiken.

Voorbeeldsketch tally light met ESP32 voor arduino IDE

Als voorbeeld heb ik onderstaande sketch gemaakt. Voordat je deze naar je ESP32 kunt uploaden moet je de volgende instellingen aanpassen:

  • ssid: de SSID van je draadloze netwerk
  • password: het wachtwoord van het netwerk
  • cameraNumber: het nummer van de camera (1-4) voor welke je de ESP32 als tally light gaat gebruiken
  • het IP-adres van de ESP32 (elke module heeft een vrij IP-adres nodig)
  • het IP-adres van de ATEM switcher

Als dit allemaal aangepast is kun je de sketch naar je ESP32 uploaden. Kijk naar de seriële monitor voor eventuele foutmeldingen. Als het schern van de M5StickC zwart blijft, dan is het verbinden met WiFi mislukt. Controleer dan de SSID en het wachtwoord.

/*****************
  Tally light ESP32 for Blackmagic ATEM switcher

  Version 2.0

  A wireless (WiFi) tally light for Blackmagic Design
  ATEM video switchers, based on the M5StickC ESP32 development
  board and the Arduino IDE.

  For more information, see:
  https://oneguyoneblog.com/2020/06/13/tally-light-esp32-for-blackmagic-atem-switcher/

  Based on the work of Kasper Skårhøj:
  https://github.com/kasperskaarhoj/SKAARHOJ-Open-Engineering

******************/

#include <M5StickC.h>
#include <WiFi.h>
#include <SkaarhojPgmspace.h>
#include <ATEMbase.h>
#include <ATEMstd.h>

IPAddress clientIp(192, 168, 178, 170);        	// IP address of the ESP32
IPAddress switcherIp(192, 168, 178, 173);	      // IP address of the ATEM switcher
ATEMstd AtemSwitcher;

// http://www.barth-dev.de/online/rgb565-color-picker/
#define GRAY  0x0020 //   8  8  8
#define GREEN 0x0200 //   0 64  0
#define RED   0xF800 // 255  0  0

const char* ssid = "yournetwork";
const char* password =  "yourpassword";

int cameraNumber = 4;
int ledPin = 10;

int PreviewTallyPrevious = 1;
int ProgramTallyPrevious = 1;

void setup() {

  Serial.begin(9600);

  // Start the Ethernet, Serial (debugging) and UDP:
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println("Connecting to WiFi..");
  }
  Serial.println("Connected to the WiFi network");

  // initialize the M5StickC object
  M5.begin();

  pinMode(ledPin, OUTPUT);  // LED: 1 is on Program (Tally)
  digitalWrite(ledPin, HIGH); // off

  // Initialize a connection to the switcher:
  AtemSwitcher.begin(switcherIp);
  AtemSwitcher.serialOutput(0x80);
  AtemSwitcher.connect();
}

void loop() {

  // Check for packets, respond to them etc. Keeping the connection alive!
  AtemSwitcher.runLoop();

  int ProgramTally = AtemSwitcher.getProgramTally(cameraNumber);
  int PreviewTally = AtemSwitcher.getPreviewTally(cameraNumber);

  if ((ProgramTallyPrevious != ProgramTally) || (PreviewTallyPrevious != PreviewTally)) { // changed?

    if ((ProgramTally && !PreviewTally) || (ProgramTally && PreviewTally) ) { // only program, or program AND preview
      drawLabel(RED, BLACK, LOW);
    } else if (PreviewTally && !ProgramTally) { // only preview
      drawLabel(GREEN, BLACK, HIGH);
    } else if (!PreviewTally || !ProgramTally) { // neither
      drawLabel(BLACK, GRAY, HIGH);
    }

  }

  ProgramTallyPrevious = ProgramTally;
  PreviewTallyPrevious = PreviewTally;
}

void drawLabel(unsigned long int screenColor, unsigned long int labelColor, bool ledValue) {
  digitalWrite(ledPin, ledValue);
  M5.Lcd.fillScreen(screenColor);
  M5.Lcd.setTextColor(labelColor, screenColor);
  M5.Lcd.drawString(String(cameraNumber), 15, 40, 8);
}

Als het uploaden gelukt is en een verbinding met het netwerk en de ATEM switcher tot stand is gebracht, zal de M5StickC de status van de in de code aangegeven camera weergeven:

  • Het display geeft het nummer van de camera weer (1-4);
  • Als de camera niet actief is zal het display donker zijn;
  • Als de camera actief is als “preview” dan zal het display groen kleuren;
  • Als de camera actief is als “program” dan zal het display rood kleuren en de ingebouwde rode LED van de M5StickC oplichten.

Deze code kun je ook vinden op GitHub.

Pas de sketch aan en verbeter deze

Zoals gewoonlijk op dit blog is deze informatie slechts bedoeld als startpunt voor je eigen project. Met deze sketch en aanwijzingen kun je snel iets eenvoudigs in elkaar zetten, om vervolgens naar eigen inzicht aan te passen en te perfectioneren. Heb je er zelf iets interessants mee gemaakt? Laat het weten in de commentaren onder dit artikel!

VNG Systems

M5Stack M5Stick-C ESP32 Mini-Ontwikkelboard
Getest en aanbevolen door OneGuyOneBlog.com:

M5Stack M5Stick-C ESP32 Mini-Ontwikkelboard
VNGsystems.nl

Eén Reactie

Voeg een reactie toe

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *