Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Benachrichtigung über das Veröffentlichungsdatum neuer TV-Serien/Anime

Komponenten und Verbrauchsmaterialien

Angepasste JLCPCB-Leiterplatte
× 1
Arduino Nano 33 IoT
× 1
Raspberry Pi 3 Model B
Raspberry Pi 3 oder Raspberry Pi 4
× 1
Raspberry Pi 4 Model B
Raspberry Pi 3 oder Raspberry Pi 4
× 1
SparkFun Nokia 5110 Bildschirm
× 1
Serieller MP3-Player von OPEN-SMART
× 1
RGB diffundierte gemeinsame Anode
× 1
Flash-Speicherkarte, SD-Karte
× 2
Widerstand 220 Ohm
× 12
Drucktastenschalter 6x6x5
× 4
TaydaElectronics DC POWER JACK 2,1 MM LAUFTYP PCB MOUNT
× 1

Notwendige Werkzeuge und Maschinen

Lötkolben (generisch)
Heißklebepistole (generisch)

Apps und Onlinedienste

Arduino-IDE
KiCad
NotePad++

Über dieses Projekt

Beschreibung

Obwohl es unzählige Web- und Mobilanwendungen gibt, um die Veröffentlichungsdaten von Lieblingssendungen zu verfolgen, wollte ich ein Gerät erstellen, das mich benachrichtigt, wenn eine neue Episode einer Serie oder ein Anime in meiner Liste von Grund auf neu veröffentlicht wird - Hardware und Software - mit verschiedene Funktionen.

Zuerst habe ich eine Webanwendung - TV Series / Anime Release Date Tracker - in PHP erstellt, um eine Serien-/Anime-Liste zu erstellen und Informationen über ihre Veröffentlichungsdaten zu sammeln. In dieser Hinsicht habe ich die TVMAZE REST API verwendet, die es der Anwendung ermöglicht, Episodeninformationen nach Veröffentlichungsdatum genau abzurufen, wenn auch ohne verschiedene und verwirrende Codierungsschritte. Dann habe ich einen LAMP-Server (w/ MariaDB) auf dem Raspberry Pi eingerichtet, um die Anwendung auszuführen. Aber für diejenigen, die keinen Raspberry Pi haben und keinen als Host verwenden möchten, habe ich eine kostenlose Version der Anwendung mit einer benutzerfreundlichen Oberfläche auf meiner Website veröffentlicht. Außerdem finden Sie den Quellcode der Anwendung unten.

Nachdem ich die Informationen mit der Webanwendung übertragen hatte, entschied ich mich, ein Arduino Nano 33 IoT als Entwicklungsboard zu verwenden, um die von der Anwendung generierten Daten zu sammeln, wenn eine neue Episode bei der Veröffentlichung erscheint. Nachfolgend finden Sie weitere Informationen, wie ich die von der Anwendung übermittelte Antwort mit einem Trennzeichen aussortiert habe. Und um Funktionen und Modi zu verwalten, die ich auf dem Nano 33 IoT implementiert habe, habe ich eine Benutzeroberfläche (Menü) mit einem Nokia 5110-Bildschirm und Drucktasten entwickelt.

Schließlich, um informiert zu werden, wenn eine neue Episode einer Show in meiner Liste mit ihrem Eröffnungssong veröffentlicht wird, habe ich aufgrund seiner einfach zu verwendenden UART-Befehlsliste ein serielles MP3-Player-Modul (OPEN-SMART) verwendet. Außerdem kann ich den MP3-Player-Modus hinzufügen, um alle Eröffnungslieder abzuspielen, was das Gerät zu einem faszinierenden Accessoire für mein Zimmer gemacht hat :)

Nachdem ich mein Design auf einem Steckbrett fertiggestellt und den Code getestet hatte, entwarf ich eine Leiterplatte (TV-Serie / Anime Release Date Notifier) ​​mit einer einzigartigen Retro-Telefonform, um ein brandneues und einfach zu bedienendes Gerät zu schaffen.

Vielen Dank an JLCPCB für das Sponsoring dieses Projekts.

Schritt 1:Entwerfen und Löten der TV-Serie / Anime Release Date Notifier PCB

Ich habe das PCB für TV-Serien / Anime Release Date Notifier mit KiCad entworfen. Ich habe die Gerber-Datei des PCB unten angehängt. Wenn Sie möchten, können Sie dieses PCB bei JLCPCB bestellen, um dieses Projekt zu replizieren und benachrichtigt zu werden, wenn neue Episoden Ihrer Lieblingssendungen veröffentlicht werden :)

Zuerst habe ich mit einem Lötkolben Header, Drucktasten, 220Ω Widerstände, die Strombuchse, 5mm Anode RGB LED angebracht.

Komponentenliste auf der Platine:

A1 (Header für Arduino Nano 33 IoT)

J1 (Header für seriellen MP3-Player)

J2 (Header für DS3231 - nicht erforderlich)

J3 (Header für Nokia 5110 Bildschirm)

J4 (Stromanschluss)

D1 (5-mm-Anoden-RGB-LED)

K1, K2, K3, K4 (Drucktasten)

R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12 (220Ω Widerstände)

Schritt 2:Einrichten eines LAMP-Webservers mit MariaDB auf Raspberry Pi

Wenn Sie ein Neuling in der Programmierung mit Raspberry Pi sind, können Sie sich die gut erklärten Anweisungen und Tutorials auf der offiziellen Raspberry Pi-Website ansehen.

Um zum offiziellen Tutorial zur Einrichtung des Raspberry Pi zu gelangen, klicken Sie hier.

  • Öffnen Sie ein Terminalfenster, indem Sie im Menü Zubehör> Terminal auswählen.
  • Installieren Sie das Apache2-Paket, indem Sie den folgenden Befehl in das Terminal eingeben und die Eingabetaste drücken:

sudo apt-get install apache2 -y

  • Um den Server zu testen, öffnen Sie Chromium, indem Sie im Menü Internet> Chromium-Webbrowser auswählen und http://localhost eingeben.
  • Wenn Sie möchten, können Sie auch die IP-Adresse Ihres Raspberry Pi verwenden.

Hostname -I

  • Installieren Sie das PHP-Paket mit dem folgenden Befehl:
  • Vergiss nicht, den Pi zu aktualisieren.

sudo apt-get-Update

sudo apt-get install php -y

  • Installieren Sie die Pakete MySQL Server (MariaDB) und PHP-MySQL, indem Sie den folgenden Befehl in das Terminalfenster eingeben:

sudo apt-get install mariadb-server php-mysql -y

  • Um einen neuen Benutzer zu erstellen, führen Sie den MySQL-Befehl zur sicheren Installation im Terminalfenster aus.

sudo mysql_secure_installation

  • Sie werden aufgefordert, aktuelles Passwort für root einzugeben (für keines eingeben): — Drücken Sie die Eingabetaste.
  • Geben Sie Y ein und drücken Sie die Eingabetaste, um Root-Passwort festzulegen .
  • Geben Sie bot ein unter Neues Passwort: Eingabeaufforderung und drücken Sie die Eingabetaste.
  • Geben Sie Y ein, um Anonyme Benutzer zu entfernen .
  • Geben Sie Y ein, um Root-Login aus der Ferne zu verbieten .
  • Geben Sie Y ein, um Testdatenbank zu entfernen und darauf zuzugreifen .
  • Geben Sie Y ein, um Berechtigungstabellen jetzt neu zu laden .
  • Wenn Sie fertig sind, sehen Sie diese Nachricht - Alles erledigt! und Danke für die Nutzung von MariaDB!

  • Um eine Datenbank (tvseries) zum Speichern von Variablen zu erstellen, die von der TVMAZE REST API generiert wurden, führen Sie diesen MySQL-Befehl im Terminalfenster aus:

sudo mysql -uroot -p

  • Geben Sie das Root-Passwort ein - bot
  • Sie werden mit der Nachricht Willkommen beim MariaDB-Monitor begrüßt .
  • Folgen Sie den folgenden Zeilen nach der MariaDB [(keine)]> :Aufforderung zum Erstellen der Fernsehserie Datenbank in MariaDB:

Datenbank für Fernsehserien erstellen;

GEWÄHREN SIE ALLE PRIVILEGIEN AUF tvseries.* TO 'root'@'localhost' IDENTIFIZIERT VON 'bot';

SPÜLEN PRIVILEGIEN;

  • Beenden Sie die MariaDB-Eingabeaufforderung mit Strg + D.

  • Um Daten von der TVMAZE REST API abzurufen, indem Sie lediglich file_get_contents() verwenden Funktion in PHP, installieren Sie das php-curl-Paket:

sudo apt-get install php-curl

  • Starten Sie dann den Apache-Server neu, um die installierten Pakete auf dem localhost verwenden zu können:

sudo service Apache2 Neustart

Schritt 3:Abrufen von Informationen von der TVMAZE REST API zu Ihrer Lieblingsserie/Ihrem Lieblingsanime

TVMAZE bietet eine kostenlose und benutzerfreundliche REST-API, mit der Benutzer Sendungen nach Name, Datum, Episodennummer usw. suchen können. Sie können die verfügbaren Endpunkte und Abfragen überprüfen:

Gehe zur TVMAZE REST API.

Ich habe die Episode nach Datum verwendet Option zum Abrufen aller Episoden einer bestimmten Show, die an einem bestimmten Datum ausgestrahlt wurden.

Um Informationen nach Veröffentlichungsdatum zu erhalten, müssen Sie Ihre Lieblingssendungen auf TVMAZE suchen und die in den Links angegebene TV-ID verwenden.

  • URL:/shows/:id/episodesbydate?date=:date
  • Datum:ISO 8601-Format
  • Beispiel:http://api.tvmaze.com/shows/1/episodesbydate?date=2013-07-01

Wenn am angegebenen Datum eine Episode ausgestrahlt wird, gibt die API ein Array mit vollständigen Episodeninformationen zurück.

Andernfalls gibt die API ein HTTP 404 zurück.

Unten können Sie meine Lieblingsserien/Anime-Liste einsehen, die ich erstellt habe, um zu verfolgen, ob es eine neue Episode einer davon gibt, die mit meinem Projekt veröffentlicht wird.

Ich habe The Late Late Show hinzugefügt, um meinen Code zu testen, da es sich um eine tägliche Show handelt.

1) Ein Stück

TV-ID:1505

https://www.tvmaze.com/shows/1505/Einteiler

2) My Hero Academia

TV-ID:13615

https://www.tvmaze.com/shows/13615/boku-no-hero-academia

3) Westwelt

TV-ID:1371

https://www.tvmaze.com/shows/1371/westworld

4) Die Simpsons

TV-ID:83

https://www.tvmaze.com/shows/83/the-simpsons

5) Die Late Late Show mit James Corden

TV-ID:2831

https://www.tvmaze.com/shows/2831/the-late-late-show-with-james-corden

Schritt 4:Entwicklung des TV-Serien-/Anime-Release-Datums-Trackers (Anwendung), der auf Raspberry Pi in PHP ausgeführt wird, und Erstellen der Serientabelle zum Einfügen von Daten

Ich habe den TV-Serien-/Anime-Release-Date-Tracker in PHP entwickelt und den Quellcode der Anwendung im Abschnitt Code-Erläuterung unten für Interessierte erklärt.

Wenn Sie die Webentwicklung mit PHP jedoch nicht mögen, können Sie die Anwendung unter Downloads - namens TV-Series-Anime-Episode-Tracker.zip - herunterladen und auf Raspberry Pi hochladen, ohne in PHP-Codierung einzutauchen.

Hochladen :

Installieren Sie mithilfe der folgenden Schritte den Tracker für das Veröffentlichungsdatum von TV-Serien / Animes auf dem Localhost:

  • Laden Sie die Anwendung herunter - TV-Series-Anime-Episode-Tracker.zip - einschließlich der Dateien index.php und query.php.

  • Entpacken Sie die TV-Series-Anime-Episode-Tracker.zip.

  • Verschieben Sie den Anwendungsordner (TV-Series-Anime-Episode-Tracker) von Downloads auf den Server (/var/www/html), indem Sie das Terminal verwenden, da der Apache-Server ein geschützter Ort ist.

sudo mv /home/pi/Downloads/TV-Series-Anime-Episode-Tracker/ /var/www/html/

  • Gehe zum Tracker für das Veröffentlichungsdatum von TV-Serien/Animen:

http://localhost/TV-Series-Anime-Episode-Tracker/

Funktionen :

1) Öffnen Sie nach der Installation die Anwendung, um eine Tabelle namens series in der Datenbank (tvseries) zu erstellen. Wenn Sie die Datei index.php zum ersten Mal öffnen, erstellt die Anwendung automatisch die Tabelle namens series und informiert den Benutzer - Datenbanktabelle erstellt!

2) Wenn die Datenbanktabelle (Serie) erfolgreich in der Datenbank erstellt wurde, informiert die Anwendung den Benutzer - Datenbanktabelle gefunden!

3) Führen Sie nach dem Erstellen der Datenbanktabelle (Serie) die folgenden Schritte aus, um die für die TVMAZE REST API erforderlichen Variablen für jede Show in Ihrer Liste einzufügen:

  • Führen Sie diesen MySQL-Befehl im Terminalfenster aus:

sudo mysql -uroot -p

  • Geben Sie das Root-Passwort ein - bot
  • Wähle die Fernsehserie Datenbank:

TV-Serien verwenden;

  • Fügen Sie die erforderlichen Variablen - Serienname, TV-ID, Status - in die Tabelle für jede Sendung ein. Die Statusvariable wird von der Anwendung verwendet, um den Benutzer ohne Wiederholung zu benachrichtigen, wenn an einem bestimmten Datum eine neue Episode veröffentlicht wird.

INSERT INTO `series` (`series_name`, `tv_id`, `status`) VALUES ('One Piece', '1505', 'Pending');

5) Auf der query.php stellt die Anwendung Anfragen an die TVMAZE REST API, um zu erkennen, ob neue Episoden von Shows in der Datenbank veröffentlicht werden. Wenn die TVMAZE REST API ein Array mit vollständigen Episodeninformationen einer veröffentlichten Episode zurückgibt, druckt die Anwendung einmal Informationen, die von Arduino Nano 33 IoT zuordenbar sind, um eine Wiederholung zu verhindern.

http://localhost/TV-Series-Anime-Episode-Tracker/query.php

%Series_Name%Season%Episode_Number%Episode_Name%

%The Late Late Show%2020%91%Jason Schwartzman, Alicia Key%

6) Andernfalls druckt die AnwendungKein Eintrag gefunden!

Code-Erklärung :

1) index.php

  • Definieren Sie die Datenbankverbindungseinstellungen - "localhost", "root", "bot", "tvseries".
  • In der checkDatabase() Funktion, erkennt, ob es eine Datenbanktabelle in der angegebenen Namensserie gibt.
  • In der createTable() Funktion, erstellen Sie die Serientabelle, wenn sie nicht in der Datenbank gefunden wird und informieren Sie den Benutzer.

2) query.php

  • In der Abfrage Klasse, definieren Sie den Pfad zur TVMAZE-API, um Anfragen zu stellen.
  • Im define_user() Funktion, rufen Sie die Verbindungseinstellungen und den Tabellennamen ab.
  • Im check_ep_release_date() Funktion mit file_get_contents() Funktion erkennen, ob eine neue Episode für eine bestimmte TV-ID am aktuellen Datum veröffentlicht wird. Ändern Sie die Statusvariable in der Datenbank von Pending in Released, wenn eine neue Episode veröffentlicht wird, um eine Wiederholung zu verhindern.
  • In der track_db_entries() Funktion, führen Sie die check_ep_release_date() für jede in der Datenbanktabelle registrierte Show - Serien.

Schritt 4.1:Webanwendung ohne Raspberry Pi ausführen

Für Abonnenten meiner Website (TheAmplituhedron) habe ich eine kostenlose Version des TV-Serien / Anime Release Date Tracker für diejenigen entwickelt, die keinen Raspberry Pi haben oder einen als Host für dieses Projekt verwenden möchten.

Es bietet eine benutzerfreundliche Oberfläche für die Verwaltung der Datenbank. Wenn Sie diese Schnittstelle mit Ihrem Projekt verwenden möchten, anstatt das Terminal auf dem Raspberry Pi zum Einfügen von Daten zu verwenden, kontaktieren Sie mich bitte.

Gehen Sie zur Anwendung:

https://www.theamplituhedron.com/dashboard/TV-Series-Anime-Episode-Tracker/

Schritt 5:Arduino Nano 33 IoT einrichten

Wenn Sie ein Anfänger in der Programmierung mit Arduino Nano 33 IoT sind:Machen Sie sich keine Sorgen, die Verwendung mit Arduino IDE ist einfach. Laden Sie einfach die erforderlichen Treiber herunter - Arduino SAMD Core - wie hier gut erklärt.

Um sich über Arduino Nano 33 IoT mit dem WLAN verbinden zu können, laden Sie hier die WiFiNINA-Bibliothek herunter.

Um Text zu drucken und Grafiken auf dem Nokia 5110 Display zu zeichnen, laden Sie die Bibliothek LCD5110_Basic hier herunter.

Ich habe den zweiten seriellen Port (Serial1) des Arduino Nano 33 IoT verwendet, um mit dem seriellen MP3-Player zu kommunizieren.

Serielle Ports auf dem Arduino Nano 33 IoT :

"Der USB-Anschluss des Boards ist direkt mit den USB-Host-Pins des SAMD21 verbunden. Dieses Routing ermöglicht es Ihnen, das Arduino NANO 33 IoT als Client-USB-Peripheriegerät zu verwenden (das als Maus oder Tastatur an den Computer angeschlossen ist) ) oder als USB-Hostgerät, damit Geräte wie Maus, Tastatur oder ein Android-Telefon an das Arduino NANO 33 IoT angeschlossen werden können.Dieser Port kann auch als virtueller serieller Port mit dem Serial-Objekt in der Arduino-Programmiersprache verwendet werden . Die Pins RX0 und TX1 sind ein zweiter serieller Port, der als Serial1 verfügbar ist."

Dann ist Arduino Nano 33 IoT bereit, den Projektcode auszuführen :)

Schritt 6:Senden von Befehlen an den seriellen MP3-Player (OPEN-SMART)

Ich habe eine Playlist erstellt, die aus Eröffnungsliedern meiner Lieblingsserien-/Animeliste in diesem Projekt besteht:

1) Einteiler - Eröffnung | Hör zu

2) My Hero Academia - Eröffnung | Hör zu

3) Westworld - Eröffnung | Hör zu

4) Die Simpsons - Eröffnung | Hör zu

5) Die Late Late Show - Eröffnung | Hör zu

Wenn Sie möchten, können Sie meine Playlist in einem gezippten Ordner herunterladen - Opening_songs.zip.

Es ist mühelos, einen seriellen MP3-Player mit Arduino Nano 33 IoT zu verwenden, solange Sie die UART-Befehle kennen, die zum Auslösen der richtigen Funktionen erforderlich sind. Ich habe ein serielles MP3-Player-Modul mit Lautsprecher von OPEN-SMART verwendet. Wenn Sie also einen seriellen MP3-Player mit einem anderen Markennamen haben, funktionieren die unten gezeigten Befehle nicht für Sie.

Folgen Sie den Anweisungen der Anleitung:

"Das Modul ist eine Art einfacher MP3-Player, der auf einem hochwertigen MP3-Audiochip basiert. Es kann 8kHz ~ 48kHz Abtastfrequenz MP3- und WAV-Dateiformate unterstützen. Es gibt einen TF-Kartensteckplatz an Bord , damit Sie die Micro-SD-Karte anschließen können, auf der Audiodateien gespeichert sind. Die MCU kann den MP3-Wiedergabestatus steuern, indem sie Befehle über den UART-Anschluss an das Modul sendet, z. B. Lieder wechseln, Lautstärke und Wiedergabemodus ändern usw. Sie können auch Debuggen Sie das Modul über das USB-zu-UART-Modul. Es ist kompatibel mit Arduino / AVR / ARM / PIC."

"Stellen Sie sicher, dass Ihre Micro-SD-Karte als FAT16 oder FAT32 formatiert ist und sich darin einige Songs befinden. Sie sollten die Ordner „01“ und „02“ erstellen und einige Songs mit dem Namen 001xxx.mp3 / 002xxx.mp3 ablegen / 003xxx.mp3 darin."

Mit anderen Worten, um Befehle genau ausführen zu können, speichern Sie Ihre Songs in einem Ordner namens '01' und fügen Sie den Songnamen fortlaufende Nummern hinzu - 001One Piece-Opening.mp3, 002My Hero Academia-Opening.mp3 usw.

Um UART-Befehle an den seriellen MP3-Player mit Arduino Nano 33 IoT zu senden, habe ich eine Funktion namens send_command_to_MP3_player . erstellt . Es überträgt jedes Byte im angeforderten Befehl über den zweiten seriellen Port an den RX0- und TX1-Pins an den Serial MP3-Player - Serial1 - je nach Länge des angeforderten Befehls - 4, 5 oder 6.

Trennen Sie den Befehl, den Sie an den seriellen MP3-Player senden möchten, wie unten gezeigt nach Bytes - 0x7e. Alle Befehle beginnen mit '7E' und enden mit 'EF'. Das zweite Byte ist die Anzahl der Bytes dazwischen - '02', '03', '04'. Laden Sie unten das Handbuch für den seriellen MP3-Player von OPEN-SMART herunter, um alle Befehle zu überprüfen und detailliertere Anweisungen zu erhalten.

// Definieren Sie die erforderlichen MP3-Player-Befehle.
// Sie können alle angegebenen Befehle von der Projektseite aus einsehen:
// Speichergerät auf TF-Karte auswählen
static int8_t select_SD_card[] ={0x7e, 0x03, 0X35, 0x01, 0xef}; // 7E 03 35 01 EF
// Spiel den Song mit dem Verzeichnis:/01/001xxx.mp3
static int8_t play_song_1[] ={0x7e, 0x04, 0x41, 0x00, 0x01, 0xef}; // 7E 04 41 00 01 EF
// Spiel den Song mit dem Verzeichnis:/01/002xxx.mp3
static int8_t play_song_2[] ={0x7e, 0x04, 0x41, 0x00, 0x02, 0xef}; // 7E 04 41 00 02 EF
// Spiel den Song mit dem Verzeichnis:/01/003xxx.mp3
static int8_t play_song_3[] ={0x7e, 0x04, 0x41, 0x00, 0x03, 0xef}; // 7E 04 41 00 03 EF
// Spiel den Song mit dem Verzeichnis:/01/004xxx.mp3
static int8_t play_song_4[] ={0x7e, 0x04, 0x41, 0x00, 0x04, 0xef}; // 7E 04 41 00 04 EF
// Spiel den Song mit dem Verzeichnis:/01/005xxx.mp3
static int8_t play_song_5[] ={0x7e, 0x04, 0x41, 0x00, 0x05, 0xef}; // 7E 04 41 00 05 EF
// Song abspielen.
static int8_t play[] ={0x7e, 0x02, 0x01, 0xef}; // 7E 02 01 EF
// Song anhalten.
static int8_t pause[] ={0x7e, 0x02, 0x02, 0xef}; // 7E 02 02 EF
// Nächstes Lied.
statisch int8_t next_song[] ={0x7e, 0x02, 0x03, 0xef}; // 7E 02 03 EF
// Vorheriger Song.
statisch int8_t previous_song[] ={0x7e, 0x02, 0x04, 0xef}; // 7E 02 04 EF

Schritt 7:Programmierung von Arduino Nano 33 IoT

  • Fügen Sie die erforderlichen Bibliotheken hinzu.
  • Definieren Sie Ihre WLAN-Einstellungen - SSID und Passwort.
  • Geben Sie die IP-Adresse Ihres Raspberry Pi ein.
  • Definieren Sie den Pfad der Anwendung (query.php) in Raspberry Pi.
  • Initialisieren Sie die Ethernet-Client-Bibliothek.
  • Definieren Sie die Bildschirmeinstellungen des Nokia 5110.
  • Definieren Sie die Grafiken für verwandte Bildschirmmodi - Fernsehen und Musik.
  • Um verschiedene Grafiken (monochrome Bilder) zu erstellen, gehen Sie zu Monochrome Image Converter.
  • Definieren Sie die erforderlichen MP3-Player-Befehle.
  • Definieren Sie Menüoptionen und Modi mit flüchtigen booleschen Werten.
  • Definieren Sie die Steuertasten und RGB-LED-Pins.
  • Initiieren Sie die serielle Kommunikation für das serielle MP3-Player-Modul am zweiten seriellen Port - Serial1 .
  • Verbinde dich mit dem WLAN-Netzwerk.
  • Überprüfen Sie die Verbindung sowohl auf dem seriellen Monitor als auch auf dem Nokia 5110-Bildschirm.
  • In den read_buttons() Funktion, erhalten Sie Daten von den Steuertasten - Rechts, OK, Links und Beenden.
  • Im change_menu_options() , erhöhen oder verringern Sie die Optionsnummer mit den Tasten Rechts und Links.
  • In der Schnittstelle() Funktion, drucken Sie die Schnittstelle (Menü).
  • Wenn der Init-Tracker Modus ausgewählt ist, verbinden Sie sich mit der Webanwendung namens TV Series / Anime Release Date Tracker.
  • Wenn eingehende Bytes verfügbar sind, erhalten Sie die Antwort von der Webanwendung.
  • Verwenden von endsWith() Funktion erkennen, ob die Antwort das Prozentzeichen (Trennzeichen) enthält oder nicht.
  • Wenn enthalten, teilen Sie die Antwortzeichenfolge auf einfache Weise durch ein vordefiniertes Trennzeichen auf. '%'(Prozentsatz) ist in diesem Projekt als Trennzeichen definiert.
  • Informationen als Teilzeichenfolgen abrufen - Series_Name, Season, Episode, Episode_Name.
  • Drucken Sie Informationen aus und spielen Sie den Eröffnungssong der veröffentlichten Serie/des Animes bis zum Ende.
  • Warten Sie, bis die Exit-Taste gedrückt wird.
  • Wenn eine leere Antwort vorhanden ist, drucken Sie Keine veröffentlichte Episode erkannt :(
  • Zeichne das TV-Symbol, während du bis zur neuen Anfrage zählst.
  • Warten Sie bis zur nächsten Anfrage.
  • Wenn der MP3-Player-Modus ausgewählt ist, ziehen Sie das Musik-Player-Symbol. Steuern Sie den MP3-Player mit den Steuertasten - Rechts, Links, OK.
  • Wenn der Schlafmodus ausgewählt ist, aktivieren Sie den Schlafmodus in 10 Sekunden und drucken Sie die verbleibenden Sekunden.

Connections and Adjustments

// Connections
// Arduino Nano 33 IoT:
// Nokia 5110 Screen
// D2 -------------------------- SCK (Clk)
// D3 -------------------------- MOSI (Din)
// D4 -------------------------- DC
// D5 -------------------------- RST
// D6 -------------------------- CS (CE)
// RGB
// D9 -------------------------- R
// D10 -------------------------- G
// D11 -------------------------- B
// LEFT_BUTTON
// A0 --------------------------- S
// OK_BUTTON
// A1 --------------------------- S
// RIGHT_BUTTON
// A2 --------------------------- S
// EXIT_BUTTON
// A3 --------------------------- S
// DS3231 (Optional for Nano and Not Required for Nano 33 IoT)
// A4 --------------------------- SDA
// A5 --------------------------- SCL

After finishing and uploading the code to the Arduino Nano 33 IoT, I attached all required components to the board via headers.

I also provided a connection slot for a DS3231 RTC Module for those who want to change the Arduino Nano 33 IoT with the Arduino Nano. But, you need to enter release dates manually for each show to the Arduino Nano without being able to obtain data from the web application to create a countdown timer with the RTC.

Note:You can connect either a speaker or headphones to the Serial MP3 Player to listen to soundtracks in the playlist. I connected the speaker delivered in addition to the Serial MP3 Player (OPEN-SMART).

Modes and Features

1) While the device tries to connect to the WiFi network, it displays Waiting... Attempting to connect to WiFi .

2) After establishing a successful connection, the device informs the user with this message - Connected to WiFi!!!

3) Then, the device prints the interface (menu) presenting available modes - A.Init Tracker, B.MP3 Player , and C.Sleep . To switch among modes, use the Right and Left buttons. Subsequently, press the OK button to select a mode.

A.Init Tracker

A.1) After selecting the A.Init Tracker mode, the device attempts to connect to the localhost hosted by the Raspberry Pi. If successful, it informs the user with this message - Connected to the server!!! Conversely, the device displays this message - Connection Error!!!

A.2) If the application (TV Series / Anime Release Date Tracker) sends a data string that of a released episode of a registered series/anime in the database, then the device:

  • Prints the episode information - Series Name, Season, Episode Number, and Episode Name:

One Piece, 10x54, Luffy's Determination

  • Plays the opening song of the released series/anime,
  • And, turns the RGB to the color assigned to the released series/anime.

For instance, I assigned these colors below for each show in my list:

  • One Piece -> Red
  • My Hero Academia -> Green
  • Westworld -> Blue
  • The Simpsons -> Yellow
  • The Late Late Show -> Purple

Unless the Exit button is pressed, the device keeps displaying the episode information and showing the assigned color.

The device notifies the user for once for each released episode to prevent any recurrence.

A.3) After the Exit button is pressed, the device draws the television icon while waiting for the next request to the application.

A.4) If there is no released episode of a registered series/anime in the database, the device displays this message - No Released Episode Detected :( - and then; draws the television icon until the next request to the application.

A.5) The device returns to the interface (menu) if the Exit button is pressed while displaying the television icon.

B. MP3 Player

I implemented this feature as a subsidiary and fun one to turn this device into an intriguing accessory for my room.

B.1) After selecting the B.MP3 Player mode, the device draws the music note icon and lets the user play all opening songs by using the control buttons:

  • Right - Next Song
  • Left - Previous Song
  • OK - Pause

B.2) The device returns to the interface (menu) if the Exit button is pressed.

C.Sleep

C.1) After selecting the C.Sleep mode, the device enables the sleep mode in 10 seconds and prints the remaining seconds on the screen.

C.2) While maintaining the sleep mode, the device applies a given color pattern to the RGB as a nightlight.

C.3) The device returns to the interface (menu) if the Exit button is pressed.

Videos and Conclusion

After completing all steps above, I decided to fasten the device to my bookcase by using a hot glue gun. It works stupendously :)

Code

  • Series_Release_Date_Notifier.ino
  • index.php
  • query.php
Series_Release_Date_Notifier.inoArduino
 //////////////////////////////////////////////////// // TV Series / Anime New Episode // // Release Date Notifier // // ------------------------- // // Arduino Nano 33 IoT // // by Kutluhan Aktar // // // ////////////////////////////////////////////////////// Get informed when new episodes of your favorite shows are on release with their opening songs via Nano 33 IoT and Raspberry Pi. //// I developed a corroborating web application in PHP for this project, named TV Series / Anime Release Date Tracker. // You can either use a Raspberry Pi as the server, explained in the project tutorial, or TheAmplituhedron with the real-time database interface if you are a member. //// For more information:// https://www.theamplituhedron.com/projects/TV-Series-Anime-New-Episode-Release-Date-Notifier/// // You can use the mentioned web application in free version on TheAmplituhedron as the host server if you are a subscriber:// https://www.theamplituhedron.com/dashboard/TV-Series-Anime-Episode-Tracker///// Connections// Arduino Nano 33 IoT:// Nokia 5110 Screen// D2 --------------------------- SCK (Clk)// D3 --------------------------- MOSI (Din) // D4 --------------------------- DC // D5 --------------------------- RST// D6 --------------------------- CS (CE)// RGB// D9 --------------------------- R// D10 --------------------------- G// D11 --------------------------- B// LEFT_BUTTON// A0 --------------------------- S// OK_BUTTON// A1 --------------------------- S// RIGHT_BUTTON// A2 --------------------------- S// EXIT_BUTTON// A3 --------------------------- S// DS3231 (Optional for Nano and Not Required for Nano 33 IoT)// A4 --------------------------- SDA // A5 --------------------------- SCL// Include required libraries:#include #include #include char ssid[] ="[_SSID_]"; // your network SSID (name)char pass[] ="[_PASSWORD_]"; // your network password (use for WPA, or use as key for WEP)int keyIndex =0; // your network key Index number (needed only for WEP)int status =WL_IDLE_STATUS;// Note:Uncomment equivalent connection settings provided under related lines for using the web application hosted on TheAmplituhedron if you are a subscriber.// Enter the IPAddress of your Raspberry Pi.IPAddress server(192, 168, 1, 22);/* // name address for TheAmplituhedron. Change it with your server if you are using a different host server than TheAmplituhedron.char server[] ="www.theamplituhedron.com";*/// Define the pathway of the application in Raspberry Pi.String application ="/TV-Series-Anime-Episode-Tracker/query.php";/*// Define your hedron if you are using TheAmplituhedron as the host server for this project:String HEDRON ="[_HEDRON_]";// Define the pathway of the web application. If you are using TheAmplituhedron as the host server for this project as I did, just enter your hedron. Otherwise, enter the pathway on your server.String application ="/dashboard/TV-Series-Anime-Episode-Tracker/" + HEDRON;*/// Initialize the Ethernet client libraryWiFiClient client;/* WiFiSSLClient client; */// Define screen settings.LCD5110 myGLCD(2,3,4,5,6);extern uint8_t SmallFont[];extern uint8_t MediumNumbers[];// Define the graphics for related screen modes.extern uint8_t tv[];extern uint8_t music[];// Define the required MP3 Player Commands.// You can inspect all given commands from the project page:// Select storage device to TF cardstatic int8_t select_SD_card[] ={0x7e, 0x03, 0X35, 0x01, 0xef}; // 7E 03 35 01 EF// Play the song with the directory:/01/001xxx.mp3static int8_t play_song_1[] ={0x7e, 0x04, 0x41, 0x00, 0x01, 0xef}; // 7E 04 41 00 01 EF// Play the song with the directory:/01/002xxx.mp3static int8_t play_song_2[] ={0x7e, 0x04, 0x41, 0x00, 0x02, 0xef}; // 7E 04 41 00 02 EF// Play the song with the directory:/01/003xxx.mp3static int8_t play_song_3[] ={0x7e, 0x04, 0x41, 0x00, 0x03, 0xef}; // 7E 04 41 00 03 EF// Play the song with the directory:/01/004xxx.mp3static int8_t play_song_4[] ={0x7e, 0x04, 0x41, 0x00, 0x04, 0xef}; // 7E 04 41 00 04 EF// Play the song with the directory:/01/005xxx.mp3static int8_t play_song_5[] ={0x7e, 0x04, 0x41, 0x00, 0x05, 0xef}; // 7E 04 41 00 05 EF// Play the song.static int8_t play[] ={0x7e, 0x02, 0x01, 0xef}; // 7E 02 01 EF// Pause the song.static int8_t pause[] ={0x7e, 0x02, 0x02, 0xef}; // 7E 02 02 EF// Next song.static int8_t next_song[] ={0x7e, 0x02, 0x03, 0xef}; // 7E 02 03 EF// Previous song.static int8_t previous_song[] ={0x7e, 0x02, 0x04, 0xef}; // 7E 02 04 EF// Define menu options and modes using volatile booleans.volatile boolean TV =false;volatile boolean Music =false;volatile boolean Sleep =false;volatile boolean Activated =false;// Define the control buttons.#define B_Exit A3#define B_Right A2#define B_OK A1#define B_Left A0// Define RGB LED pins.#define redPin 9#define greenPin 10#define bluePin 11// Define data holders:int Right, OK, Left, Exit;int selected =0;void setup() { // Buttons:pinMode(B_Exit, INPUT); pinMode(B_Right, INPUT); pinMode(B_OK, INPUT); pinMode(B_Left, INPUT); // RGB:pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); adjustColor(0, 0, 0); // Black // Initiate screen. myGLCD.InitLCD(); myGLCD.setFont(SmallFont); Serial.begin (9600); // Initiate serial communication for the Serial MP3 Player Module. Serial1.begin(9600); // Select the SD Card. send_command_to_MP3_player(select_SD_card, 5); // check for the WiFi module:if (WiFi.status() ==WL_NO_MODULE) { Serial.println("Communication with WiFi module failed!"); myGLCD.print("Connection Failed!", 0, 8); while (true); } // attempt to connect to Wifi network:while (status !=WL_CONNECTED) { Serial.print("Attempting to connect to SSID:"); Serial.println(ssid); myGLCD.print("Waiting...", 0, 8); myGLCD.print("Attempting to", 0, 16); myGLCD.print("connect to", 0, 24); myGLCD.print("WiFi !!!", 0, 32); // Connect to WPA/WPA2 network. Change this line if using open or WEP network:status =WiFi.begin(ssid, pass); // wait 10 seconds for connection:delay(10000); } // Verify connection on both the serial monitor and Nokia 5110 Screen. Serial.println("Connected to wifi"); myGLCD.clrScr(); myGLCD.print("Connected to", 0, 8); myGLCD.print("WiFi!!!", 0, 16); Verzögerung (2000); myGLCD.clrScr();}void loop() { read_buttons(); change_menu_options(); interface(); if(TV ==true){ do{ myGLCD.invertText(true); myGLCD.print("A.Init Tracker", 0, 16); myGLCD.invertText(false); Verzögerung (100); if(OK ==HIGH){ myGLCD.clrScr(); Activated =true; while(Activated ==true){ // Connect to the web application named TV Series / Anime Release Date Tracker. Change '80' with '443' if you are using TheAmplituhedron as the host. if (client.connect(server, 80)) { Serial.println("connected to server"); // if you get a connection, report back via serial:myGLCD.print("Connected to", 0, 8); myGLCD.print("the server!!!", 0, 16); // Make an HTTP request:client.println("GET " + application + " HTTP/1.1"); //client.println("Host:www.theamplituhedron.com"); client.println("Host:192.168.1.22"); client.println("Connection:close"); client.println(); }else{ myGLCD.print("Connection", 0, 8); myGLCD.print("Error!!!", 0, 16); } Verzögerung (2000); // Wait 2 seconds after connection... // If there are incoming bytes available, get the response from the web application. String response =""; while (client.available()) { char c =client.read(); Antwort +=c; } if(response !="" &&response.endsWith("%")){ // Split the response string by a pre-defined delimiter in a simple way. '%'(percentage) is defined as the delimiter in this project. int delimiter, delimiter_1, delimiter_2, delimiter_3, delimiter_4; delimiter =response.indexOf("%"); delimiter_1 =response.indexOf("%", delimiter + 1); delimiter_2 =response.indexOf("%", delimiter_1 +1); delimiter_3 =response.indexOf("%", delimiter_2 +1); delimiter_4 =response.indexOf("%", delimiter_3 +1); // Glean information as substrings. String Series_Name =response.substring(delimiter + 1, delimiter_1); String Season =response.substring(delimiter_1 + 1, delimiter_2); String Episode =response.substring(delimiter_2 + 1, delimiter_3); String Episode_Name =response.substring(delimiter_3 + 1, delimiter_4); // Print information. myGLCD.clrScr(); myGLCD.print(Series_Name, 0, 0); myGLCD.print(Season + " x " + Episode, 0, 16); myGLCD.print(Episode_Name, 0, 32); // Play the opening song of the released series / anime until ceased:if(Series_Name =="One Piece") { send_command_to_MP3_player(play_song_1, 6); adjustColor(255,0,0); } if(Series_Name =="My Hero Academia") { send_command_to_MP3_player(play_song_2, 6); adjustColor(0,255,0); } if(Series_Name =="Westworld") { send_command_to_MP3_player(play_song_3, 6); adjustColor(0,0,255); } if(Series_Name =="The Simpsons") { send_command_to_MP3_player(play_song_4, 6); adjustColor(255,255,0); } if(Series_Name =="The Late Late Show") { send_command_to_MP3_player(play_song_5, 6); adjustColor(80,0,80); } // Wait until the Exit button pressed... volatile boolean song =true; while(song ==true){ read_buttons(); if(Exit ==HIGH){ song =false; send_command_to_MP3_player(pause, 4); adjustColor(0,0,0); } } myGLCD.clrScr(); }else{ // Print information. myGLCD.clrScr(); myGLCD.print("No Released", 0, 0); myGLCD.print("Episode", 0, 16); myGLCD.print("Detected :(", 0, 32); delay(5000); // Wait 5 seconds to display information... myGLCD.clrScr(); } // Draw TV icon while counting to the new request... myGLCD.drawBitmap(8, 0, tv, 60, 48); delay(10 * 1000); // Wait until next request... myGLCD.clrScr(); // Exit. read_buttons(); if(Exit ==HIGH){ Activated =false; myGLCD.clrScr(); } } } }while(TV ==false); } if(Music ==true){ do{ myGLCD.invertText(true); myGLCD.print("B.MP3 Player", 0, 24); myGLCD.invertText(false); delay(100); if(OK ==HIGH){ myGLCD.clrScr(); Activated =true; while(Activated ==true){ read_buttons(); // Draw music player icon. myGLCD.drawBitmap(8, 0, music, 60, 48); // MP3 Player:if(Right ==true) send_command_to_MP3_player(next_song, 4); if(Left ==true) send_command_to_MP3_player(previous_song, 4); if(OK ==true) send_command_to_MP3_player(pause, 4); // Exit. if(Exit ==HIGH){ Activated =false; myGLCD.clrScr(); send_command_to_MP3_player(pause, 4); } } } }while(Music ==false); } if(Sleep ==true){ do{ myGLCD.invertText(true); myGLCD.print("C.Sleep", 0, 32); myGLCD.invertText(false); Verzögerung (100); if(OK ==HIGH){ // Activate the sleep mode in 10 seconds. myGLCD.clrScr(); myGLCD.print("Entering", CENTER, 0); myGLCD.print("Sleep Mode", CENTER, 8); myGLCD.print("in", CENTER, 16); myGLCD.print("Seconds", CENTER, 40); // Print remaining seconds. myGLCD.setFont(MediumNumbers); for (int s=10; s>=0; s--){ myGLCD.printNumI(s, CENTER, 24, 2, '0'); Verzögerung (1000); } myGLCD.enableSleep(); Activated =true; while(Activated ==true){ // Color Pattern:adjustColor(255,0,0); Verzögerung (500); adjustColor(0,255,0); Verzögerung (500); adjustColor(0,0,255); Verzögerung (500); adjustColor(255,255,0); Verzögerung (500); adjustColor(80,0,80); Verzögerung (500); // Exit. read_buttons(); if(Exit ==HIGH){ Activated =false; myGLCD.clrScr(); myGLCD.disableSleep(); myGLCD.setFont(SmallFont); adjustColor(0,0,0); } } } }while(Sleep ==false); }}void read_buttons(){ // Read the control buttons:Right =digitalRead(B_Right); OK =digitalRead(B_OK); Left =digitalRead(B_Left); Exit =digitalRead(B_Exit);}void send_command_to_MP3_player(int8_t command[], int len){ Serial.print("\nMP3 Command => "); for(int i=0;i 3) selected =1; Verzögerung (100); // Depending on the selected option number, change boolean status. switch(selected){ case 1:TV =true; Music =false; Sleep =false; brechen; case 2:TV =false; Music =true; Sleep =false; brechen; case 3:TV =false; Music =false; Sleep =true; brechen; }}void adjustColor(int red, int green, int blue){ red =255 - red; green =255 - green; blue =255 - blue; analogWrite(redPin, red); analogWrite(greenPin, green); analogWrite(bluePin, blue);}
index.phpPHP
 0) ? true :false;}function createTable($table_name, $conn){ if(!checkDatabase($table_name, $conn)){ $sql ="CREATE TABLE `$table_name`( id int(11) AUTO_INCREMENT PRIMARY KEY NOT NULL, series_name varchar(255) NOT NULL, tv_id varchar(255) NOT NULL, status varchar(255) NOT NULL );"; if(mysqli_query($conn, $sql)){ echo "Database Table Created!"; }else{ echo "Error!"; } }else{ echo "Database Table Found!"; }}createTable("series", $conn_database);?>
query.phpPHP
conn =$conn; $this->table_name =$table_name; } private function check_ep_release_date($API_ID, $series_name, $status){ $date =date("Y-m-d"); $URL =self::ROOT.$API_ID.self::PATH.$date; if($get_content =json_decode(file_get_contents((String)$URL))){ if($status !="Released"){ echo "%".$series_name."%".$get_content[0]->season."%".$get_content[0]->number."%".$get_content[0]->name."%"; $sql ="UPDATE `$this->table_name` SET `status`='Released' WHERE series_name='$series_name'"; mysqli_query($this->conn, $sql); } }else{ if($status !="Pending"){ $sql ="UPDATE `$this->table_name` SET `status`='Pending' WHERE series_name='$series_name'"; mysqli_query($this->conn, $sql); } } } public function track_db_entries(){ $sql ="SELECT * FROM `$this->table_name` ORDER BY `id` DESC"; if($result =mysqli_query($this->conn, $sql)){ $check =mysqli_num_rows($result); if($check> 0){ while($row =mysqli_fetch_assoc($result)){ $this->check_ep_release_date($row['tv_id'], $row['series_name'], $row['status']); } }else{ echo "No Entry Found!"; } }else{ echo "No Database Found!"; } }}// Define the connection settings and the table name.$conn_database =mysqli_connect("localhost", "root", "bot", "tvseries");$table ="series";// Define the object to check release date for each registered series / anime.$q =new query();$q->define_user($conn_database, $table);$q->track_db_entries();?>

Kundenspezifische Teile und Gehäuse

gerber_ycEfXzZq6h.zip tv-series-anime-episode-tracker_gCfN0nFiA8.zip opening_songs_y2LCEw79tg.zip tv_Iz2isO8nGI.c music_SA2xR86cZw.c

Schaltpläne


Herstellungsprozess

  1. Raspberry Pi Universal-Fernbedienung
  2. Ein Stück Himbeer-Pi
  3. Cycle Chaser
  4. Himbeer-Pi-Dieb-Detektor
  5. Raspberry Pi-Temperatursensor
  6. RASPBERRY PI HOME AUTOMATION
  7. NEUES HIMBEE PI 3 MODELL B + FUNKTIONEN UND KAUF
  8. Raspberry Pi CD-Box-Roboter
  9. RaspiRobot Board V2
  10. Rover