Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
iRadioAndroid - iRadio Portierung für Android Geräte
#21
Man merkt, daß das S5 eine Generation neuer ist als das S4 - nach nur 23 Sekunden läuft das iRadio!
Vor allem dudelt es sofort los, das S4 gibt keinen Ton von sich - mal mit Kopfhörer testen was da kaputt ist.

Jetzt kann es losgehen, damit zu spielen und Gimmicks einzubauen.

Also an alle: Nachdem die ersten kleinen Schwierigkeiten überwunden sind, ist die Installation wirklich super simpel! Traut Euch!
Und am besten mit irgend einem alten Gammel-Laptop, auf den ihr Linux installiert - ist gerade für derartige Spielereien immer die bessere Lösung.

Nachtrag: Eigene Playlist überspielt - das läuft alles so viel einfacher und geschmeidiger als mit dem Raspi - großes Lob und Dank an Otto und Bernhard
!
Und ja, Jupps Wunsch schließe ich mich gerne an - iTV wäre ne feine Sache in Anbetracht der netten Displays Smile

Nachtrag2: Wie geht Fullscreen, um die Symbolleiste vom Handy loszuwerden? Und evtl ein Menü per doppeltip oder 2Fingertip?

Und als Nachtisch noch eine Frage: Warum funktionieren ganz alte Android Versionen nicht? Hätte noch ein Gingerbread Tablet Wink
Gruß,
Uli
Zitieren
#22
die ADB shell kann man auch unter Windows nutzen. Auch wenn schon vieles im Readme des Projekts beschrieben ist, so möchte ich trotzdem die Möglichkeiten der shell zusammenfassen:

Man entpackt die Platform Tools in einen Ordner und navigiert in einer cmd-Box (Eingabeaufforderung) dorthin. Mit:

adb devices

kontrollieren ob das Handy angezeigt wird. Der Befehl:

adb shell screencap /mnt/sdcard/Download/test.png

schreibt die Hardcopy als test.png in den Download-Ordner des Handy. Dort kann man sie sich mit der App "Dateien" anzeigen lassen und z.B. per google photos als email versenden.

   

eine Terminal-Verbindung öffnet man mit:

adb shell

die playlist.m3u überträgt man ins Handy mit:

adb push playlist.m3u /sdcard/Download

Wie hier zu sehen ist liegt die playlist und die Hardcopy im Download-Ordner:

Code:
adb shell
F8331:/ $ cd sdcard
F8331:/sdcard $ ls
Alarms  Android  DCIM  Download  Movies  Music  Notifications  Pictures  Podcasts  Ringtones
F8331:/sdcard $ cd Download/
F8331:/sdcard/Download $ ls
playlist.m3u  test.png

die playlist ist beim nächsten Start der iRadio-App aktiv.
Gruß,
Jupp
-----------------------------

was du baust ist immer mit dir verbunden
(Lego)

Einsamkeit ist nur ein Mangel an Technologie
(@beetlebum)
Zitieren
#23
(19.12.2023, 20:38)OttoBerger schrieb: Die Bedienung über ein USB-OTG-GPIO Feld ist der nächste Schritt.  gpiod => läuft in zwei Teilen, Teil1 auf dem Android-System  Teil2 hinter der USB-Schnittstelle in einem Controller.
Dazu die Beispiel-Firmware in den Controller laden (Arduino IDE) und alles entsprechend des Democodes anschließen.

Moin. 

Ich will eure Posts zusammenfassend kommentieren und beantworten.


(19.12.2023, 21:39)saarfranzose schrieb: ich vermelde mein erstes Android-iRadio :-)

Thumbs_up  Herzlichen Glückwunsch Jupp! Big Grin 


(19.12.2023, 21:48)Uli schrieb:
(19.12.2023, 18:15)saarfranzose schrieb: ...Mir ist klar dass ich auch selbst aktiv werden muss. In dem Fall die Grundlagen des Studio erarbeiten. Es ist nicht Sache des Applikations-Entwicklers mir alles vorzukauen :-)

Sicher ist das nicht Sache des Entwicklers.
Wenn man aber Menschen ansprechen will, die alte Android Devices haben, es cool fänden, darauf iRadio laufen zu lassen, aber keinerlei Interesse daran, sich in die Hintergründe oder gar Android Studio einzuarbeiten - dann könnte man die Doku hoffentlich verhältnismäßig einfach derart erweitern, daß "durchschnittliche User" nicht gleich frustriert hinschmeißen.
Könnten wir beide vielleicht machen, Jupp? Ich hab nämlich selbst wenig Neigung, mich da einzuarbeiten, aber evtl bessere Voraussetzungen dazu als manche anderen.

Das wäre sehr hilfreich wenn Ihr dazu Lust habt!

Zitat von der Projektseite auf github.com.

Zitat:Auch das iRadioAndroid versteht sich, wie alle anderen iRadio-Portierungen bisher auch, weniger als Fertiggericht, sondern als Richtschnur für eigene Ideen und Entwicklungen. Die Zielgruppe ist der Technik- und PC-affine Radiobastler!

Es wird nicht anders gehen als sich in die Entwicklungswerkzeuge AndroidStudio und ArduinoIDE einzuarbeiten! Klar kann man eine fertige APK erstellen und die kann jeder auf sein Telefon laden. Im seltensten Fall  aber wird die Skalensimulation zur Displaygröße und Seitenverhältnis passen! Das muss man für das passende Zielgerät bauen. Der Democode für die externe Ansteuerung des Handys ist ein Democode!  Er zeigt wie man mit Tastern umschaltet und mit Drehimpulsgeber die Lauststärke verändert. Vielleicht will man eine andere Art der Bedienung, vielleicht erfordert das zukünftige Radiogehäuse eine andere Bedienung. Aufgabe des Democodes - Zeigen was, wie geht und fertige Codeschnipsel für eigene Idee bereitstellen. Vielleicht will und muss man das Kommunikationsprotokoll erweitern um Sachen an das Androidgerät zu klemmen von denen wir noch gar nichts wissen. Geht nur mit AndroidStudio / ArduinoIDE.


Zitat:Der zweite Haken die Bemerkung "direkt nach dem compilieren" - im Studio gibt es nirgends ein "compilieren". Ich vermute, "run" startet den Prozess.

Compilieren ist der Vorgang, Run die Knopfbeschriftung bzw. das Play-Symbol im Studio.
Compilieren, der Java Code wird in Bytecode, C Code in Maschinencode übersetzt, anderes Geraffel wie Bilddaten werden mit den Klebescriptsprachen und Buildsystemen in einen Kochtopf geschmissen, umgerührt und daraus die APK gemacht die zum Androidgerät geschickt wird.

Soweit muss der Einsteiger, Anwender das überblicken können, sonst ist das iRadio grundsätzlich der falsche Weg. Jedes iRadio auf jeder Plattform. Die Zielgruppe ist der Technik- und PC-affine Radiobastler! 

Das ist so! Fertig, Aus, Ende! Das ist die Natur eines Baukastens sich mit dem Inhalt zu beschäftigen um daraus was zu machen. Wenn jemand Bergsteigen als Hobby hat und sonst gar kein Interesse an Radiobastelein, was will dieser Nutzer dann mit einem Radiomann?  Wer nur ein Internetradio auf dem Handy sucht ohne Lust zu haben sich etwas eigenes zu bauen wird eine fertige App aus dem Playstore nutzen müssen. Durch Zufall nennt die sich vielleicht auch iRadio, hat aber mit diesem hier nichts gemeinsam.


(19.12.2023, 22:27)Uli schrieb: The application could not be installed: INSTALL_FAILED_OLDER_SDK
DUOS hintenan gestellt.


Zitat von der Projektseite auf github.com.

Zitat:Zur Zeit werden Android-basierte Systeme (Smartphones und Tablet PCs) ab API Level 17 (A4.2 Jelly Bean) bis Android 12 getestet und unterstützt. Eine Nutzung auf neueren Geräten scheint prinzipiell möglich zu sein, kann jedoch in Zukunft wegen API-Änderungen durch Google bestimmten Einschränkungen unterliegen. Die Geräte müssen in der Regel nicht gerootet sein!

Zutat von weiter oben aus Post #2

Zitat:Also von 4.2 an bis auf Android 12, mit Tricks und Abstrichen geht es auch noch auf 4-4.1, aber diese Versionen unterstützt das iRadioAndroid nicht offiziell.

   

Was und welche Api-Levels eine Android-Anwendung vorraussetzt wird im Projekt an dieser Stelle festgelegt

https://github.com/BM45/iRadioAndroid/bl...gradle.kts


Code:
android {
    namespace = "com.example.iradioandroid"
    compileSdk = 34

    defaultConfig {
        applicationId = "com.example.iradioandroid"
        minSdk = 17
        targetSdk = 29
        versionCode = 1
        versionName = "1.0"

        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    }

oder im Studio wie oben gezeigt

[Bild: attachment.php?thumbnail=130025]
[Bild: attachment.php?thumbnail=130026]

Das ist wie mit den Systemrequirements aus der PC Welt. Man wird kein Office 2023 auf Win 3.1 laufen lassen können!
Nach unten geht es nicht, weil die genutzte Bibliothek die zum Beispiel für das Anschließen eines Tasters, Drehimpulsgebers über OTG-USB-Seriell Level 17 als unterste Grenze hat! Will man noch ältere Androidversionen versorgen geht das im Prinzip. Man muss im Studio aber händisch die Libs rausnehmen, genauso Teil1 des gpiod (gpiodSerialOTG.java) und sich andere Bedienkonzepte einfallen lassen, dann die untere Grenze im Studio auf das nächst-niedrige Ziel setzen und die App neu compilieren. 

Ganz alte Androids gehen zur Zeit und nach genannten Projektanpassungen nur per Touch-Bedienung oder man muss eine andere USB-Lösung entwickeln oder man muss so etwas wie Taster und Drehimpulsgeber drahtlos über BT oder WiFi mit einem tauglichen Mikrocontroller wie ESP8266 ESP32 ins iRadioAndroid integrieren.
An der Stelle stellt sich die Frage nach dem Sinn. Einen Mikrocontroller wie den ESP32 zu nehmen, der selbst ein Internetradio laufen lassen kann, für den es selbst ja auch ein iRadio gibt (https://github.com/BM45/iRadioMini) nur um eine Programmumschaltung oder Laustärkeänderung im Uralt-Android zu machen?
Kann man machen, muss man nicht! Wenn man es machen will, muss man sich als Endnutzer jedenfalls deutlich ins AndroidStudio, Android, Java, C ... einarbeiten! Das dürfte für die meisten Anwender aber eine Nummer zu groß sein, erst Recht wenn man wie Uli sagt, gar keine Lust hat sich das Studio überhaupt näher anzusehen.
Und das ist nur ein Problem. Unterstützung im alten System Mediaplayer von verschiedenen aktuellen Streaming-Formaten sind andere. Mit jeder noch älteren Version wird es noch mehr potentielle Probleme geben die man entweder noch gar nicht auf dem Schirm hatte oder die sich erst im laufendem Betrieb ergeben.
Wir haben immer versucht einen brauchbaren Mittelweg zu gehen.Größt mögliche Funktionsvielfalt und Nutzen bei noch überschaubaren Einstiegshürden.

Bernhard und ich hatten damals mit der API17 uns auf eine untere Grenze verständigt, mit der wir leben konnten und mit der immer noch >99% aller Geräte versorgt werden.

Zur oberen Grenze.

Code:
Eine Nutzung auf neueren Geräten scheint prinzipiell möglich zu sein, kann jedoch in Zukunft wegen API-Änderungen durch Google bestimmten Einschränkungen unterliegen.

Google will in neueren Systemen weiter Freiheiten nehmen! Freiheiten wie zum Beispiel frei auf Dateisysteme zugreifen zu können oder nur bestimmte Dateitypen öffnen zu können. Problem für playlist.m3u  Vielleicht muss die Senderliste irgendwann ein DOCX-File sein oder darf nur eine SQLLite DB sein oder was anderes. Getestet habe ich bis Android 12. Da geht noch alles. Neuere Systeme habe ich noch nicht, deshalb kann ich darüber keine Aussagen treffen.

Zitat:wird es auch ein Android-iTV geben?

Der im iRadioAndroid benutzte Mediaplayer könnte es wenn man ihn nicht nur für Streaming Audio initialisiert. Also Playlist einlesen, schauen ob Radio oder TV Adresse. Bei Radio Skalensimulation, bei TV eine Activity mit Videoausgabe.  Ja dann wäre auch ein Android iTV oder ein iRadioAndroid mit TV Funktion im Bereich des Möglichen und

WOW ! So genau könnte eine Anwendung des iRadioAndroid aussehen!

[Bild: attachment.php?thumbnail=130075]


(19.12.2023, 22:59)Uli schrieb: Also an alle: Nachdem die ersten kleinen Schwierigkeiten überwunden sind, ist die Installation wirklich super simpel! Traut Euch!

Thumbs_up  Thumbs_up  Thumbs_up

(19.12.2023, 22:59)Uli schrieb: Und am besten mit irgend einem alten Gammel-Laptop, auf den ihr Linux installiert - ist gerade für derartige Spielereien immer die bessere Lösung.

Solange der Laptop nicht zu wenig RAM hat. 4 besser 8GB halte ich für das Minimum wenn man das AndroidStudio nutzen will. Dabei darf man aber nicht auf die Idee kommen
den Smartphone/Tablet-Emulator im AndroidStudio zu starten! Das geht gezielt in die Hose, dafür brauch man meiner Ansicht nach mindestens 16 GB und eine schnelle SSD! Es läuft dann auf dem PC ja neben dem Linux eine komplettes Android in einer VM.  Für die empfohlene Vorgehensweise - Emulator aus, direkt Smartphone oder Tablet oder TV-Box an das Studio anschließen reicht aber ein Altsystem mit 8 GB aus. Mehr ist natürlich immer Besser und die Wartezeiten werden deutlich kürzer.

(19.12.2023, 22:59)Uli schrieb: Nachtrag: Eigene Playlist überspielt - das läuft alles so viel einfacher und geschmeidiger als mit dem Raspi - großes Lob und Dank an Otto und Bernhard
!

Beides ging ja über USB. Bei iRadio für Raspi über einen USB-Stick beim Booten. Hier auch über USB aber halt mit ADB Kommandozeile. Jedenfalls kann man so
sein Androidgerät fest in einem Radiogehäuse einbauen und muss nur eine USB-Schnittstelle (OTG Y-Schnittstellenkabel, Hub) rausziehen.

(19.12.2023, 22:59)Uli schrieb: Und ja, Jupps Wunsch schließe ich mich gerne an - iTV wäre ne feine Sache in Anbetracht der netten Displays Smile
Nachtrag2: Wie geht Fullscreen, um die Symbolleiste vom Handy loszuwerden? Und evtl ein Menü per doppeltip oder 2Fingertip?

TV wird vermerkt!  Thumbs_up 
Fullscreen , Anpassung der Skale an Display,  Autostart der App wird nochmal ein Thema hier werden. 

(19.12.2023, 22:59)Uli schrieb: Und als Nachtisch noch eine Frage: Warum funktionieren ganz alte Android Versionen nicht? Hätte noch ein Gingerbread Tablet Wink

Erklärung weiter oben. Aber vielleicht gibt es noch eine andere Lösung, nicht das iRadioAndroid unter API17 zu bringen, sondern das Tablet mit einem inoffziellen Update (Lineageos) über oder auf die Grenze von API17 zu bringen.  Muss ja kein Android 12, 13 drauf, nur soviel das es für ein iRadioAndroid ohne Einschränkungen reicht.

Jupp DANK für deine tiefere Erklärung der ADB Shell! Dein Link ist eine gute Zusammenfassung der ADB, speziell auch für Windowsnutzer für die ich keinen wirklichen Rat bei Problemen mit der Entwicklungsumgebung geben kann. Windows ist nicht die Welt in der ich und meine PCs leben oder nochmals leben möchten. 


(Eine Welt ohne Windows ist möglich, aber auch anzuraten! frei nach Loriot)


Otto
Zitieren
#24
Ich möchte jetzt einen Schritt weitergehen.  Wie das iRadioAndroid mit seinen beigepackten Demo-Skalensimulationen installiert werden kann wissen wir.
Die Bedienung war bisher nur über das Display möglich. Wir wollen aber so etwas mit den alten Androidgeräten bauen.

[Bild: Cassettensimulation.jpg]

auch sowas wie es der Jupp gezeigt hat




so etwas

[Bild: 68747470733a2f2f7777772e726164696f2d6261...3535313332]

und klar auch so etwas

[Bild: attachment.php?thumbnail=130075]

Dazu müssen wir aus dem Android Handy, Tablet oder was immer mit Android läuft rauskommen. 
Die Geräte haben keine GPIOs wie ein ESP32 oder Raspberry Pi, nur eine USB-Schnittstelle.  Die USB-Schnittstelle ist das Sprachrohr zwischen dem Android und einem Baustein der irgendwie GPIOs, also nutzbare Input / Output - Pins, bereit hält. Dazu hat das iRadioAndroid eine Bibliothek eingebaut die so einen Sprachkanal zu solchen Geräten aufbauen kann, die einen Schnittstellenbaustein beinhalten wie er im Systemüberblick ansatzweise aufgezählt wird.


This library supports USB to serial converter chips:
  • FTDI FT232R, FT232H, FT2232H, FT4232H, FT230X, FT231X, FT234XD
  • Prolific PL2303
  • Silabs CP2102, CP210*
  • Qinheng CH340, CH341A, CH9102
devices implementing the CDC/ACM protocol like
  • Arduino, Teensy, Raspberry Pi Pico, and more


Das gibt uns die Möglichkeit die fehlenden GPIOs am Androidsystem mit preiswerten Microcontrollern nachzurüsten. 

Abbildung von Reichelt und Amazon beispielhaft und ohne persönlichen Bezug zu den Verkäufern!

.jpg   reichelt2.jpg (Größe: 23,79 KB / Downloads: 379)
.jpg   reichelt.jpg (Größe: 30,32 KB / Downloads: 377)    
.jpg   amazon2.jpg (Größe: 70,75 KB / Downloads: 378)

Im iRadioAndroid gibt es Beispielcode für Arduino und RP2040 Mikrocontroller und um für eine breite Auswahl an Controllern übersichtlich zu bleiben, haben wir uns damals mal auf die Sprache C/C++ im Arduino-Style und auf die Arduino IDE geeinigt.  Diese Arduino IDE muss also installiert werden. https://www.arduino.cc/en/software   Ich benutze die aktuelle Version.

Der Beispielcode im <firmware> Ordner des iRadioAndroid zeigt wie man zwei Taster benutzt um in der Programmliste vor und zurück zu schalten und wie man einen Drehimpulsgeber benutzt um die Lautstärke zu verändern.

Der Code gibt den Schaltplan vor

Zitat:// switches for next & prev channel
#define PIN_TASTER_PROGRAM_NEXT  2    // this is GPIO# not Pin#, see Pinout of your uC Board first !
#define PIN_TASTER_PROGRAM_PREV  3    // this is GPIO# not Pin#, see Pinout of your uC Board first !

// rotary encoder for volume setting
#define PIN_ENCODER_VOL_CLK    5    // this is GPIO# not Pin#, see Pinout of your uC Board first !
#define PIN_ENCODER_VOL_DT    4    // this is GPIO# not Pin#, see Pinout of your uC Board first !

deshalb haben wir da kein grafisches Anschlussschema reingepackt. Kann zudem alles beliebig nach eigenen Wünschen verändert werden   Wichtig ist nur, dass die Befehle

Serial.println("VUP"); // send iRadioAndroid command for volume up
Serial.println("VDW"); // send iRadioAndroid command for volume down
Serial.println("PNX"); // send iRadioAndroid command for next program
Serial.println("PPR"); // send iRadioAndroid command for prev program

über die serielle Schnittstelle rausgeschickt werden. Das sind einfach Println-Anweisungen mit dem passenden Inhalten!

Auf der anderen Seite der Leitung, da wo unserer Android dranhängt, lauscht der gpiod (Quellcodedatei gpiodSerialOTG.java) auf diese Befehle


Zitat:          if (iRadioPlayerService != null) {
                if (dataUTF8.contains("VUP")) {
                    ((AudioManager) getSystemService(Context.AUDIO_SERVICE)).adjustStreamVolume(
                            AudioManager.STREAM_MUSIC,
                            AudioManager.ADJUST_RAISE,
                            AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_SHOW_UI);
                }
            }
         
          if (iRadioPlayerService != null) {
                if (dataUTF8.contains("VDW")) {
                    ((AudioManager) getSystemService(Context.AUDIO_SERVICE)).adjustStreamVolume(
                            AudioManager.STREAM_MUSIC,
                            AudioManager.ADJUST_LOWER,
                            AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_SHOW_UI);
                }
            }

und führt diese im Android-System beziehungsweise im iRadioAndroid selbst aus.  Das ist keine Einbahnstraße wie wir bald sehen werden!

Kurzform: Passenden Mikrocontroller nehmen -> Verkabeln -> Arduino IDE installieren -> die Demofirmware damit compilieren und auf den uC flashen -> uC per OTG-USB-Kabel an das Androidsystem anschließen -> Android Systemmeldung bestätigen, damit dauerhaft die Zugriffsrechte am iRadioAndroid zugewiesen werden -> iRadioAndroid Neustart -> spielen

Es steht alles noch einmal in leicht anderer Form im letzten Teil auf der Projektseite.  Ist das alles nachvollziehbar?

Otto
Zitieren
#25
Mit Hilfe der App MacroDroid habe ich ein Startmakro erstellt um iRadioAndroid automatisch zu starten. MacroDroid scheint aber eine begrenzte Laufzeit zu haben. Mal sehen wie lange das gut geht.

Android: Autostart bearbeiten

OTG-Adapter sind bestellt. Es wird bald weitergehen.
Gruß,
Jupp
-----------------------------

was du baust ist immer mit dir verbunden
(Lego)

Einsamkeit ist nur ein Mangel an Technologie
(@beetlebum)
Zitieren
#26
(21.12.2023, 01:32)saarfranzose schrieb: OTG-Adapter sind bestellt. Es wird bald weitergehen.

Wäre evtl schlau uns abzusprechen? Ich hab jetzt nämlich auch welche bestellt...
Gruß,
Uli
Zitieren
#27
Habt ihr dran gedacht gleich die Y- oder Mehrportvarianten zu nehmen?
Zitieren
#28
Ich hab eine Auswahl bestellt. Mikro-USB , USB-C, einfach, Y, Gerade, abgewinkelt. Uli, bei allen ist das Porto eingerechnet, spielt also keine Rolle ob einzeln oder zusammen bestellt wird. Das Arduino Teil kann ich für dich mit bauen.
Gruß,
Jupp
-----------------------------

was du baust ist immer mit dir verbunden
(Lego)

Einsamkeit ist nur ein Mangel an Technologie
(@beetlebum)
Zitieren
#29
Moin.

Ich habe den Code ins iRadioAndroid transferiert, der zu einem Thema passt, welches immer wieder auf die Agenda der Radiobastler gesetzt wird.
Wir haben das damals schon im iRadio für Raspberry umgesetzt, warum also nicht auch im iRadioAndroid.

Es passt sehr gut als Demonstrator für die OTG-USB-Serial Sache um zu zeigen das diese Schnittstelle keine Einbahnstraße ist.


.jpg   me1.jpg (Größe: 28,73 KB / Downloads: 297)


.jpg   me2.jpg (Größe: 39,15 KB / Downloads: 297)

Das sind genau die beiden Röhren, die wir damals auch benutzt haben. Sogar das gleiche Bildmaterial der Leuchtschirme welches wir von Fotos von richtigen Röhren genommen haben.

Um die Sache mit USB-Eingabe  und USB-Ein- und Ausgabe räumlich zu trennen, habe ich den Code dafür in eine eigene Datei gestellt.

https://github.com/BM45/iRadioAndroid/bl...pport.java

Der Unterschied ist nur neben

PHP-Code:
   @Override
    
// this is the callback when receiving new data over OTG-USB-Serial
    public void onNewData(byte[] data) { 

für Eingabe, gibt es zusätzlich


Code:
        // Zyklische Übertragung eines Wertes (WiFi-Stärke, Bitrate o.ä. ...) für ein angeschlossenes magisches Auge
        Timer timerInstance = new Timer();
        TimerTask timerTaskInstance = new TimerTask() {
            public void run() {
                if (port != null) {
                    if (port.isOpen()) {
                        // get WiFi Rssi and map to [0..99]
                        WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
                        WifiInfo wifiInfo = wifiManager.getConnectionInfo();
                        int level= WifiManager.calculateSignalLevel(wifiInfo.getRssi(), 100);
                        Log.i(TAG, "Wifi-Rssi =" + wifiInfo.getRssi() + " level [0-100] = " + level);

                        // send cmd to magic eye simulation via USB-Serial
                        String cmd = "EYE=" + level + '\n';
                        try {
                            port.write(cmd.getBytes("UTF-8"),100);
                            Log.i(TAG,"sending data ... " + cmd);
                        } catch (IOException e) {
                            Log.w(TAG,"error while sending data ...");
                            //throw new RuntimeException(e);
                        }
                    }
                }

            }
        };
        timerInstance.schedule(timerTaskInstance, 1000, 1000);

eine Codeteil der in einem Timer-gesteuerten Task alle 1000ms die Empfangsfeldstärke des WiFis misst, den gemessenen Wert in einen Bereich 0..99 wandelt und dann über die OTG-USB-Serial Schnittstelle mit dem Kommando EYE=...\n abschickt.

Dieser Wert wird auf der anderen Seite des Kabels im gpiod empfangen, geparsed und als Zielwert für den Öffnungswinkel des Auges genommen.
Die Firmware für beide magische Augen liegt im Firmwareordner für den RP2040, der mit der Arduino_GFX Grafikbibliothek verschiedene Displays ansteuern kann. https://github.com/moononournation/Ardui...rc/display

Weil die GC9A01-Typen gerade der große Schrei sind, habe ich die Demo fix und fertig für dieses Display übernommen.

Das Anschlussschema ergibt sich aus dem Quellcode der Firmware.

Code:
Arduino_DataBus *bus = new Arduino_RPiPicoSPI(27 /* DC */, 17 /* CS */, 18 /* SCK */, 19 /* MOSI */, 16 /* MISO */, spi0 /* spi */);
Arduino_GC9A01 *gfx = new Arduino_GC9A01(bus, 7 /* RST */, 0 /* rotation */, true /* IPS */);
Arduino_GFX *canvas = new Arduino_Canvas(240 /* width */, 240 /* height */, gfx);  // sizeof GC9A01 is 240x240 px

Mit Arduino_DataBus wird der Kommunikationsbus festgelegt mit den entsprechenden GPIO-Nummern am Controller. Danach der Displaytyp, der durch jedes beliebige Display aus https://github.com/moononournation/Ardui...rc/display ersetzt werden kann.

Im Firmwarequellcode ist zu beachten, daß Pins für weitere Eingabegeräte sich nicht mit dem vom Display oder anderen Komponenten überlagern. GPIO-Konflikt!

Ich baue testweise ein weiteres iRadioAndroid mit. Angel   Das Telefon passt so gut zum Skalenausschnitt des späteren Gehäuses das es unmöglich ist hier nicht auf so eine Lösung zu kommen. Big Grin

   

Otto.
Zitieren
#30
Hallo Otto, das ist eine sehr schöne Erweiterung!

also, der RP2040 schickt die WiFi-Feldstärke an das Handy, und dieses schickt es wieder zurück zum RP2040, der dann das Display ansteuert? Hab ich das richtig verstanden?

kann der Arduino/RP2040 - Teil das magische Auge bedienen und gleichzeitig Encoder und Taster abfragen? Oder sollten das 2 getrennte Prozessoren sein?

dann hab ich noch einen Gedanken. Das MA könnte doch auf auf der Skalen-Simulation angezeigt werden, also ohne extra Display?
Gruß,
Jupp
-----------------------------

was du baust ist immer mit dir verbunden
(Lego)

Einsamkeit ist nur ein Mangel an Technologie
(@beetlebum)
Zitieren
#31
Hallo Jupp.

Die WiFi-Feldstärke wird auf dem Android-Gerät (Handy, Tablet, TV-Box) ermittelt. Das ist das einzige Gerät was im WLAN ist und Internetradio oder TV empfangen kann. Der ermittelte Wert wird über das USB Kabel zum GPIO-Hilfsprozessor gesendet. Dort hängt das Display dran was die Anzeige macht. Es muss ja kein Maggie Auge  und keine WiFi-Feldstärke sein, sondern was anderes ausgedachtes. Die Gedanken sind frei! Rolleyes

Gleichzeitig können am GPIO-Hilfsprozessor neben dem 2.-Display auch Eingabegeräte wie Taster oder Encoder hängen. Dann sendet der Hilfsprozessor die Daten über USB hoch zum Android was darauf reagieren kann.  Es ist also eine Zweiwegekommunikation!


ANDROID <=> USB <=> Hilfsprozessor (Arduino/RP2040) mit Display, Taster, ... an seinen IOs.  Es reicht für Display/Taster/Encoder EIN Prozessor, solange seine Rechenleistung ausreicht und es genügend GPIO Pins gibt um alles anzuschließen. 
https://github.com/BM45/iRadioAndroid/ra...erview.jpg


Der Democode für die beiden Mag. Augen entspricht von der Funktion dem Standardcode für Taster, Drehregler, nur um die Möglichkeit der Displayausgabe erweitert !

Das Einblenden eines mag. Auge direkt auf der Skalensimulation geht logischerweise auch. Es gibt ja auch Radios mit passendem Feld im Skalenglas, ich habe nur gerade kein brauchbares Foto für eine Simulation von so einem Skalenglas. Hast du so was? Dann könnte man das noch als weitere Demosimulation aufnehmen. Falls jemand im Forum so ein gutes Farbfoto oder Scan beisteuern kann, bitte das als Hilfegesuch auffassen. Danke bereits jetzt.

Otto
Zitieren
#32
Hallo Otto :-)

Ich finde das Projekt voll klasse und  auch Dank an die anderen.

Kannst Du mit dieser Blende etwas anfangen? 
Wenn ja mache ich ein besseres Bild (jetzt nur Handy)

   

Mit freundlichem Gruß, Heiko.
Zitieren
#33
Hallo Heiko,

das wird schwierig ein so breites Skalenglas noch lesbar auf ein Handydisplay zu bekommen. Das wäre was für ein externes extrabreites HDMI Display so wie das hier

https://www.amazon.de/Waveshare-11-9inch...B092LSDMP8

Das könnte man aber nur an Androidgeräten nutzen, die einen HDMI Ausgang haben und diese Auflösung unterstützen. Wahrscheinlich also TV-Sticks oder Set Top Boxen mit Android.

Für ein durchschnittliches Handydisplay oder Tablet muss der Abstand Skale zum Mag. Auge geringer sein. Für ein Tablet wäre eine fast quadratische Auflösung sehr gut geeignet.

Schaut bitte mal auf das erste Posting https://www.audiosciencereview.com/forum...eyes.1384/

Vom Format her gut für Tablet PC geeignet, das abgebildete Fotomaterial ist allerdings nicht brauchbar, da zu unscharf und zu geringe Auflösung.
Zitieren
#34
(22.12.2023, 14:08)OttoBerger schrieb: ..Das ist das einzige Gerät was im WLAN ist und Internetradio oder TV empfangen kann..

Danke für deine Erklärung!
ja, natürlich, in meinem Kopf schwirrt noch der ESP32 :-)

Wichtig wäre dass das MA während der Skalenbewegung nicht ausschlägt.

ich könnte noch etwas Hilfe gebrauchen bei der Justierung der Grafiken. Das Xperia XZ hat ein 5,5 Zoll Display mit einer Auflösung von 3840 x 2160 (801 ppi).

   
Gruß,
Jupp
-----------------------------

was du baust ist immer mit dir verbunden
(Lego)

Einsamkeit ist nur ein Mangel an Technologie
(@beetlebum)
Zitieren
#35
ich habe heute abend in meinem Skalenscheibenvorrat gekramt.

Hier könnte man das Seitenverhältnis durch seitliches Beschneiden anpassen:

   

   

französische Skalen mit Leidensspuren und die letzten beiden mit Spiegelskala:

   

   

   

ein Fund bei radioguy mit Wasserzeichen:


.jpg   Lafayette radio dial 75-431-L.jpg (Größe: 240,3 KB / Downloads: 188)
Gruß,
Jupp
-----------------------------

was du baust ist immer mit dir verbunden
(Lego)

Einsamkeit ist nur ein Mangel an Technologie
(@beetlebum)
Zitieren
#36
(22.12.2023, 19:13)saarfranzose schrieb: Wichtig wäre dass das MA während der Skalenbewegung nicht ausschlägt.

Das MA zeigt in der Demo immer die sekundenaktuelle Feldstärke des WLAN an, da ein Senderwechsel nichts am WLAN ändert.

Möchte man das Verhalten haben wie du es beschreibst, also so tun als wäre es nicht die WLAN Feldstärke sondern die eines imaginären Senders irgendwo, dann muss man dem MA in der Zeit der Skalenbewegung ein EYE-Kommand mit der Nullwert senden. Allerdings dauert die Skalenbewegung bei wenigen Sendern in der Senderliste, also größeren Strecken der Zeigerbewegung, länger an, als der Mediaplayer fürs umschalten benötigt. Damit spielt der neue Sender schon an, bevor der Zeiger zum Stillstand kommt.  In iRadio haben wir dazu damals die PAUSE_BEIM_SENDERWECHSEL Option gehabt, falls du dich erinnerst. Soetwas wäre hier auch denkbar. Dann könnte man, wenn man soweit geht, sogar noch soetwas wie einen noised hinzunehmen. Alles ist möglich und bis ins unendlich feine Detail umsetzbar.


(22.12.2023, 19:13)saarfranzose schrieb: ich könnte noch etwas Hilfe gebrauchen bei der Justierung der Grafiken. Das Xperia XZ hat ein 5,5 Zoll Display mit einer Auflösung von 3840 x 2160 (801 ppi). 

Das ist eine ziemlich hohe Auflösung. Hierfür wäre ein neues Cassettenbild in passender höherer Auflösung besser geeignet als das bestehende aufzupumpen bzw. hoch zu skalieren.  Wahrscheinlich sieht das so auf deinem Display ziemlich verwaschen und unscharf aus?

Die Spulenposition kannst du im Quellcode programmatisch an dieser Stelle festlegen

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.displaydcassette);

        // erzwinge Querformat
        this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

        // Spulen + manuelle Positionierung [Settings im UI-Builder werden überschrieben] je nach Displaygröße/Auflösung
        ImageView imageSpule_links = (ImageView) findViewById(R.id.imageSpule);
        ImageView imageSpule_rechts = (ImageView) findViewById(R.id.imageSpule2);
       imageSpule_links.setX(345); imageSpule_links.setY(235);
        imageSpule_rechts.setX(790); imageSpule_rechts.setY(235);



Zur Vermessung deines Bildschirms und deiner Simulation kannst du von Andoid Hilfe bekommen. Dazu in den Entwickleroptionen folgende Menüpunkte aktivieren.

       

Wenn aber in einer Richtung skaliert wird, so muss der Skalierungsfaktor berücksichtigt werden um die richtigen Punkte zu bekommen.

Wenn alle Bildresourcen in nativer Auflösung des Displays vorliegen und du deine Bildschirmdaten als Custom-Device in AndroidStudio einrichten kannst, dann kannst du die Positionen auch direkt mit dem UI-Builder und Maus ermitteln!
Zitieren
#37
OttoBerger schrieb:Das ist eine ziemlich hohe Auflösung. Hierfür wäre ein neues Cassettenbild in passender höherer Auflösung besser geeignet als das bestehende aufzupumpen bzw. hoch zu skalieren. Wahrscheinlich sieht das so auf deinem Display ziemlich verwaschen und unscharf aus?

Mit der angegeben Auflösung wurde die Datei zu groß. Das Bild hatte als transparentes png fast 7MB und konnte nicht mehr dargestellt werden. Dann habe ich die Auflösung Stück für Stück reduziert. Als das Bild wieder angezeigt wurde ging es genau wie auf meiner vorherigen Hardcopy stets gleich über den rechten und linken Rand hinaus. Ich hab dann weiter reduziert bis auf eine Breite von 500 pixel.

Erst jetzt beginnt es zu schrumpfen, verschiebt sich dabei aber nach rechts.

   

Das von mir gewählte Motiv hat den Vorteil dass man sieht wo die Bandteller sich positionieren. Das erleichtert später deren Justierung, wenn ich die Auflösung im Griff habe. Deinen Hinweis mit den Entwickleroptionen konnte ich noch nicht umsetzen. Die bin ich noch am suchen:-)
Gruß,
Jupp
-----------------------------

was du baust ist immer mit dir verbunden
(Lego)

Einsamkeit ist nur ein Mangel an Technologie
(@beetlebum)
Zitieren
#38
(23.12.2023, 02:16)saarfranzose schrieb: Mit der angegeben Auflösung wurde die Datei zu groß. Das Bild hatte als transparentes png fast 7MB und konnte nicht mehr dargestellt werden.

3840 x 2160 (801 ppi) ist ganz schön viel Holz. 4k UHD was man auf 65 - 75" TVs hat wird auf ein Handydisplay gequetscht ! Aber das Gerät muss es ja verarbeiten können, sonst hätte man nicht solche Komponenten verbaut! Das AndroidStudio kann damit umgehen, ich habe es gerade probiert. Bauen kann ich die APK damit auch. Allerdings muss mein Smartphone wieder nur HD draus machen, weil es nicht so ein UHD Display verbaut hat. Die Dateivorlage war also ein Overkill.


.jpg   4k.jpg (Größe: 27,31 KB / Downloads: 159)


(23.12.2023, 02:16)saarfranzose schrieb: Dann habe ich die Auflösung Stück für Stück reduziert. Als das Bild wieder angezeigt wurde ging es genau wie auf meiner vorherigen Hardcopy stets gleich über den rechten und linken Rand hinaus. Ich hab dann weiter reduziert bis auf eine Breite von 500 pixel.

Erst jetzt beginnt es zu schrumpfen, verschiebt sich dabei aber nach rechts.

Eventuell hast du beim Austausch ein paar Attribute des imageViews verändert. Du kannst das Bild aber jederzeit passend ziehen und wichtiger an den Rändern wieder anheften.

   

Dann zieht das Telefon das Bild wieder automatisch auf maximale Fenstergröße.


(23.12.2023, 02:16)saarfranzose schrieb: Das von mir gewählte Motiv hat den Vorteil dass man sieht wo die Bandteller sich positionieren. Das erleichtert später deren Justierung, wenn ich die Auflösung im Griff habe.

Man kann es leicht durchsehen ja.  Big Grin Machst du dann die Transparenz wieder über einen Alphakanal rückgänig (in der Datei direkt, oder direkt im imageView-Attribut) oder tauscht du einfach das Foto gegen ein anderes aus für die finale Version?

Die Spulen würde ich direkt über den Quellcode  gezeigt hinmanövrieren.

      imageSpule_links.setX(345); imageSpule_links.setY(235);
        imageSpule_rechts.setX(790); imageSpule_rechts.setY(235);


Du kannst die Daten zwar auch mit dem UI-Builder erreichen, aber aussagekräftig wird es nur wenn du ein Gerät mit dem Display anlegst, was die UHD Auflösung hat. Vorgefertigte Geräteprofile gibt es keines mit UHD Display.



.jpg   devauswahl.jpg (Größe: 17,51 KB / Downloads: 159)    

(23.12.2023, 02:16)saarfranzose schrieb: Deinen Hinweis mit den Entwickleroptionen konnte ich noch nicht umsetzen. Die bin ich noch am suchen:-)

Direkt in dem Menü, wo man auch das USB-Debugging am Handy einschaltet.
Zitieren
#39
sieh mal an, die Entwickleroptionen zeigen mir in der rechten unteren Ecke die Koordinaten 597 x 1077.

   

Dann dürfte es sich hierbei um die native Auflösung handeln. Entgegen den gefundenen Tabellen:


.jpg   Sony_Xperia_XZPremium_Test_Vergleich_800.jpg (Größe: 30,27 KB / Downloads: 136)

mit ImageView bin ich allerdings im Moment komplett überfordert. Da sucht ich mir erst mal Tutorials.

   
Gruß,
Jupp
-----------------------------

was du baust ist immer mit dir verbunden
(Lego)

Einsamkeit ist nur ein Mangel an Technologie
(@beetlebum)
Zitieren
#40
(23.12.2023, 14:14)saarfranzose schrieb: mit ImageView bin ich allerdings im Moment komplett überfordert. Da sucht ich mir erst mal Tutorials.

Kommt Zeit kommt Durchblick. Du kannst wenn alles verknuddelt und verstellt ist, jederzeit den Urzustand wiederherstellen, wenn du über die Zwischenablage den Inhalt der zur Skalensimulation passenden XML-Layoutdatei von hier https://github.com/BM45/iRadioAndroid/tr...res/layout in die gleichnamige geöffnete Datei im Studio kopierst.

Dann baut sich auch wieder die Vorschau (also die grafische Interpretation der XML) im UI-Builder auf! Du solltest bei deinem Studio auch die Querbildansicht (Landscape) auswählen! In der Leiste das kleine Piktogramm mit dem Telefon und den Pfeilen die die Drehrichtung darstellen sollen.

Das ganze ist wie ein Grafikbearbeitungsprogramm aufgebaut. Links im Component-Tree siehst du alle Objekte aus der XML Datei. Die Stellung im Baum ist mit Ebenen in GIMP vergleichbar. Für den Einstieg alles egal. Ändere nichts daran!

Öffne die Java-Datei für die Kasettensimulation und suche in der Methode protected void onCreate( ... den Programmcode für die manuelle Ausrichtung der Spulen.

imageSpule_links.setX(345); imageSpule_links.setY(235);
imageSpule_rechts.setX(790); imageSpule_rechts.setY(235);

Taste dich an die für dein Display richtigen Werte ran. Prüfe den Fortschritt auf dem richtigen Handydisplay, nicht auf der Vorschau im Studio die noch ein Display mit falscher Auflösung hat und deinem Telefon so noch nicht entspricht. Als Hilfe kannst du die Debuganzeigen direkt auf dem Handy nehmen (aus den Entwickleroptionen). Noch der Hinweis, bei Android gibt es unterschiedliche Koordinateneinheiten: dp, px, und weitere. Die Wichtigsten px=Pixel ist selbsterklärend, dp ist abhändig von der Pixeldichte und entspricht nicht Pixel, also 1dp ist kein 1px. Bitte darüber mal nachlesen. Ist vielleicht verwirrend weil man alles durcheinandernehmen kann und der eine besser mit dieser Einheít klar kommt, der andere mit einer anderen. Muss man hinnehmen und sich durchwursteln.
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  iRadioPico - iRadio Portierung für Raspberry Pico/Pico W und RP2040 Boards OttoBerger 33 990 Gestern, 11:19
Letzter Beitrag: saarfranzose
  iRadioAndroid - playlistScale JoeXXL 5 350 15.02.2024, 07:59
Letzter Beitrag: OttoBerger
  iRadioAndroid - mehrere playlisten JoeXXL 6 482 08.02.2024, 14:46
Letzter Beitrag: OttoBerger
  iRadioAndroid - Station Info JoeXXL 0 147 08.02.2024, 14:05
Letzter Beitrag: JoeXXL
  TV-Box mit iRadioAndroid saarfranzose 6 485 06.01.2024, 21:39
Letzter Beitrag: saarfranzose

Gehe zu: