Autopilot untuk Blackmagic Design ATEM switcher
|
Proyek ini adalah autopilot sederhana untuk pengalih video Atem dari Blackmagic Design. Ini seperti proyek sebelumnya “Tally light ESP32 untuk switcher Blackmagic ATEM” berdasarkan mikrokontroler ESP32. Juga untuk autopilot ini, kami kembali menggunakan modul pengembangan M5StickC (dari VNGsystems) yang kami program dengan Arduino IDE, tetapi tentu saja Anda dapat menggunakan papan pengembangan ESP32 lainnya.
Mengapa beralih otomatis?
Selama periode Corona (COVID-19), kami mulai menyiarkan semua jenis acara secara langsung. Biasanya ada seseorang yang bergeser dengan rapi, sebagaimana mestinya. Tapi bayangkan, Anda adalah satu-satunya teknisi di studio pada aliran DJ 4 jam. Pengantar pizza ada di pintu, Anda harus pergi ke toilet, Anda ingin minum bir atau Anda hanya perlu meregangkan kaki. Maka Anda ingin keluar dari belakang ATEM tanpa disadari pemirsa. Pada saat itu Anda dapat menyalakan autopilot. Ini tidak akan bergeser sekreatif teknisi shift terlatih, tetapi jika Anda tidak tinggal terlalu lama, tidak ada yang akan memperhatikan.
Persyaratan
Selain M5StickC Anda juga memerlukan beberapa hal lain, yaitu Arduino IDE, inti ESP32, pustaka M5StickC, dan pustaka ATEM. Jika Anda belum menginstalnya sebelumnya, ikuti langkah-langkah di bawah ini. Jika Anda sudah memiliki semua ini di komputer Anda, Anda sudah dapat mencoba sketsa di bagian bawah halaman ini.
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.


Sketsa Autopilot Arduino
Pengoperasian sketsa itu sederhana. Input acak (baru) selalu dipilih sebagai “pratinjau”. Pratinjau sebelumnya kemudian menjadi aktif sebagai “program”. Kami menunggu antara beralih. Panjang periode ini juga dipilih secara acak, dengan durasi minimum dan maksimum yang telah ditetapkan.
Dalam sketsa Anda dapat menyesuaikan hal-hal berikut dengan situasi Anda sendiri:
- clientIp: masukkan alamat IP (gratis) untuk ESP32 di sini
- switcherIp: Alamat IP dari switch Atem
- ssid: nama jaringan WiFi Anda
- password: kata sandi jaringan WiFi Anda
- cameras: jumlah input yang ingin Anda gunakan (untuk Atem mini misalnya 4)
- minTime: waktu tunggu minimum dalam detik
- maxTime: waktu tunggu maksimum dalam detik
Sketsa lainnya berbicara sendiri, Anda tentu saja dapat membuatnya serumit yang Anda inginkan.
/***************** Autopilot for Blackmagic Design Atem switcher Version 1.0 Automatic switcher/controller for Blackmagic Design ATEM video switchers, based on the M5StickC ESP32 development board and the Arduino IDE. For more information, see: https://id.oneguyoneblog.com/2020/07/13/autopilot-untuk-blackmagic-design-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 cameras = 4; // Total number of camera inputs int ledPin = 10; // LED is on pin 10 int minTime = 3; // Min. waiting time int maxTime = 10; // Max. waiting time int programInput = 1; // Set a default program input int previewInput = 2; // Set a default preview input int timeout = 1000; // Set a default waiting time void setup() { Serial.begin(9600); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.println("Connecting to WiFi.."); } Serial.println("Connected to the WiFi network"); M5.begin(); // Initialize the M5StickC pinMode(ledPin, OUTPUT); // LED pin digitalWrite(ledPin, HIGH); // LED off AtemSwitcher.begin(switcherIp); // Initialize a connection to the switcher AtemSwitcher.serialOutput(true); AtemSwitcher.connect(); } void loop() { AtemSwitcher.runLoop(); // Check for packets, respond to them, keeping the connection alive static unsigned long start_time = millis(); if (millis() - start_time >= timeout) { // Time to switch? digitalWrite(ledPin, LOW); // LED on white switching programInput = previewInput; // For "program", choose the current preview input previewInput = randomNumber(); // For "preview", choose a new (random) input AtemSwitcher.changePreviewInput(previewInput); // Switch to new preview AtemSwitcher.changeProgramInput(programInput); // Switch to new program drawLabel(BLACK, GRAY, HIGH); // Display program input number on LCD display Serial.print("Program: "); // Print to the serial console Serial.println(programInput); start_time = millis(); timeout = 1000 * random(minTime, maxTime + 1); // Pick a new random time to wait befor switching again digitalWrite(ledPin, HIGH); // LED off } } 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(programInput), 15, 40, 8); } int randomNumber() { // Pseudo random non-consecutive number while (previewInput == programInput) { previewInput = random(1, cameras + 1); } return previewInput; }
Sketsa ini juga dapat ditemukan di GitHub.
Buat autopilot Anda sendiri
Seperti kebanyakan proyek di situs web ini, proyek ini juga hanya titik awal untuk kreasi Anda sendiri. Sesuaikan sketsa dengan selera Anda atau buat sesuatu yang sama sekali berbeda. Jika Anda telah membuat sesuatu yang menarik, beri tahu kami di bagian komentar di bawah artikel ini!