Tally light ESP32 untuk switcher Blackmagic ATEM
|
Pada artikel sebelumnya, saya menulis tentang pengaturan studio anggaran rendah untuk streaming video langsung selama penguncian Corona (COVID-19). Studio sejak itu mengalami beberapa peningkatan. Sebagai contoh, kami sekarang juga memiliki switcher video Blackmagic Design ATEM Mini Pro dengan 4 kamera. Ini adalah kamera konsumen tanpa “tally light”. Dalam blog ini saya menunjukkan bagaimana Anda dapat membuat ESP32 Tally menerangi diri Anda sendiri dengan bantuan mikrokontroler ESP32, dalam hal ini, M5StickC dari VNGsystems di Gouda.


Tally Light
“Tally light” (Wikipedia) adalah lampu indikator merah yang biasanya ditemukan di atas kamera video profesional. Ini terutama digunakan saat merekam dengan beberapa kamera. Lampu menunjukkan apakah kamera “hidup” (“program”). Ini berguna untuk diketahui oleh orang-orang di depan kamera dan juru kamera. Sang juru kamera kemudian tahu, misalnya, bahwa ia harus menjaga kameranya tetap diam, dan orang-orang di depan kamera tahu kamera mana yang harus dilihat.


Terkadang, selain merah, warna hijau juga digunakan untuk menunjukkan bahwa gambar kamera aktif sebagai “pratinjau”. Lampu penghitungan dikontrol oleh pengalih video. Dalam hal ini kami menggunakan Desain Blackmagic ATEM Mini Pro dan komunikasi berjalan nirkabel melalui WiFi.
Blackmagic Design ATEM Mini Pro video switcher
Blackmagic Design ATEM Mini Pro video switcher adalah produksi video lengkap dan streaming studio dalam sebuah kotak kecil. Ada, antara lain, input untuk 4 sumber HDMI dan output untuk pratinjau HDMI. Anda dapat menggunakan ATEM Mini di, misalnya, OBS Studio sebagai sumber video dengan menggunakan konektor USB. Komputer melihat ATEM Mini sebagai webcam masing-masing yang dapat Anda tambahkan ke sebuah adegan di OBS Studio.


Anda dapat mengontrol ATEM Mini dengan tombol, atau dari jarak jauh dengan PC atau Mac dengan perangkat lunak pengalih video Blackmagic melalui LAN. Kami akan menggunakan komunikasi melalui LAN untuk proyek penghitungan ringan ini.
M5StickC: modul pengembangan ESP32
Untuk versi pertama dari proyek Tally Light ini saya menggunakan modul pengembangan M5StickC ESP-32. Dengan modul ini Anda dapat dengan cepat dan mudah mengembangkan dan menguji proyek. Selain mikrokontroler ESP32 (dengan built-in WiFi dan Bluetooth), modul ini memiliki LCD TFT kecil, baterai dan LED. Saya sebelumnya telah menggunakan modul ini untuk proyek COVID-19 CORONA Tracker: ESP32 & Arduino IDE.
ATEM Arduino libraries
Kami menggunakan Arduino IDE yang terkenal untuk memprogram M5StickC. Kami juga menggunakan perpustakaan Arduino yang dikembangkan oleh Kasper Skårhøj dari SKAARHOJ. Kasper tidak hanya membuat perpustakaan tetapi juga mendokumentasikan protokol komunikasi dari pengalih ATEM. Pada saat penulisan, perpustakaan hanya cocok untuk Arduino (dengan ethernet shield) atau ESP8266 (WiFi), jadi kita perlu melakukan beberapa penyesuaian kecil untuk membuatnya berfungsi dengan ESP32.
Tally light ESP32 dengan M5StickC
Ini informasi yang cukup, untuk saat ini, kami sekarang sedang memulai. Untuk proyek ini kami akan melalui langkah-langkah berikut:
- Instal Arduino IDE dan siapkan untuk memprogram M5StickC.
- Instal pustaka ATEM Arduino dan membuatnya cocok untuk ESP32.
- Gunakan sketsa dari artikel ini untuk menguji penghitungan cahaya.
- Sesuaikan sketsa dengan selera Anda dan tingkatkan.
Instal pustaka Arduino IDE, ESP32, dan M5StickC
Seperti biasa, instal Arduino IDE dengan ESP32 core. Saat menggunakan M5StickC, Anda juga menginstal perpustakaan M5StickC. Untuk informasi lebih lanjut, lihat blog “Memprogram M5StickC dengan Arduino IDE”. Jika Anda menggunakan modul ESP32 lain, baca blog “ESP32 dengan Arduino IDE di Linux dan Windows“.
Instal perpustakaan ATEM Arduino
Unduh file proyek terbuka SKAARHOJ dari Github. Salin file dalam folder “ArduinoLibs” ke folder libraries IDE Arduino Anda. Anda harus memiliki beberapa folder baru di folder perpustakaan Anda, seperti Arduino / libraries / ATEM, Arduino / libraries / ATEMbase, dll.
Perpustakaan kompatibel dengan Arduino (dengan perisai Ethernet) dan ESP8266 (WiFi), tetapi belum dengan ESP32. Ini mudah diperbaiki dengan membuat total 3 perubahan pada dua file ATEMbase.cpp dan ATEMbase.h.
Di libraries/ATEMbase/ATEMbase.cpp, sekitar baris 50:
Pencarian untuk
// Set up Udp communication object: #ifdef ESP8266 WiFiUDP Udp; #else EthernetUDP Udp; #endif
dan ganti dengan:
// Set up Udp communication object: WiFiUDP Udp;
Dalam file kedua, libraries/ATEMbase/ATEMbase.h, sekitar baris 35:
#ifdef ESP8266 #include <WifiUDP.h> #else #include <EthernetUdp.h> #endif
ganti ini dengan baris berikut (perhatikan huruf besar dan kecil):
#include <WiFiUdp.h>
Perubahan kedua dalam file ini, sekitar baris 60, cari potongan ini:
#ifdef ESP8266 WiFiUDP _Udp; #else EthernetUDP _Udp; // UDP object for communication, see constructor. #endif
dan ganti dengan:
WiFiUDP _Udp;
Anda sekarang dapat menggunakan perpustakaan ATEM dalam proyek ESP32 Anda.
Contoh sketsa “Tally Light” dengan ESP32 untuk Arduino IDE
Sebagai contoh, saya membuat sketsa di bawah ini. Sebelum Anda dapat mengunggahnya ke ESP32 Anda, Anda perlu menyesuaikan pengaturan berikut:
- ssid: SSID dari jaringan nirkabel Anda
- password: kata sandi jaringan
- cameraNumber: jumlah kamera (1-4) di mana Anda akan menggunakan ESP32 sebagai penghitungan cahaya
- IP address ESP32 (setiap modul membutuhkan alamat IP tersedia)
- IP address dari switcher ATEM
Ketika semua ini telah disesuaikan, Anda dapat mengunggah sketsa ke ESP32 Anda. Lihatlah monitor serial untuk melihat pesan kesalahan. Jika inti dari M5StickC tetap hitam, menghubungkan ke WiFi telah gagal. Kemudian periksa SSID dan kata sandi.
/***************** 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); }
Jika unggahan berhasil dan koneksi ke jaringan dan switcher ATEM dibuat, M5StickC akan menampilkan status kamera yang ditentukan dalam kode:
- Layar menunjukkan nomor kamera (1-4);
- Saat kamera tidak aktif, tampilan akan menjadi gelap;
- Jika kamera aktif sebagai “pratinjau”, tampilan akan berubah menjadi hijau;
- Jika kamera aktif sebagai “program” tampilan akan berubah merah dan LED merah bawaan dari M5StickC akan menyala.
Kode ini juga tersedia di GitHub.
Sesuaikan dan perbaiki sketsa
Seperti biasa di blog ini, informasi ini hanya dimaksudkan sebagai titik awal untuk proyek Anda sendiri. Dengan sketsa dan instruksi ini, Anda dapat dengan cepat menyusun sesuatu yang sederhana, lalu menyesuaikan dan menyempurnakannya sesuai keinginan Anda sendiri. Sudahkah Anda membuat sesuatu yang menarik? Beri tahu kami di komentar di bawah artikel ini!