Hallo ich bin absoluter neuling und entschuldige mich schonmal für dumme
fragen.
Ich möchte während das Handy geladen wird per Mikrocontroller über die
USB Verbindung mit dem Handy abfragen wie viel Akku das Handy gerade
hat, während es lädt. Wenn das Handy mehr als 50% Akku hat soll eine Led
Lampe leuchten.
Welcher Controller ist notwendig um dies zu tun, und wie programmiere
ich das?
Ganz dumm gefragt, wie geht das?
Reihenfolge der Aufgaben:
1. Finde heraus, welches Handy du überhaupt hast
2. Lerne eine Programmiersprache für Mikrocontroller (z.B. C)
3. Suche dir einen Mikrocontroller aus, der einen USB Host hat
4. Lerne diesen zu programmieren
5. Arbeite dich in USB ein
6. Lerne eine Programmiersprache, um eine Applikation für dein Handy zu
entwickeln
7. Programmiere eine Applikation für dein Handy, die den Akkustand
abfragt, und per USB mit deinem Mikrocontroller kommuniziert
8. Ich helfe dir dann in 2 Jahren, wenn es darum geht, die LED an den
Mikrocontroller anzuschließen.
Entweder Handy-firmware reverse-engineeren oder eigene Software auf das
handy bringen, um den Ladezustand überhaupt per usb abfragbar zu machen.
(akkustand dürfte in /proc oder /sys irgendwo stehen)
Dann einen Controller mit Usb Host nehmen und abfragen (empfehle der
einfachkeit halber ein Raspberry pi oder ähnliches wo schon ein linux
drauf läuft.
Heißt das, ich brauche eine App auf dem Handy um den Akkustand
herauszufinden?
Geht das nicht, wenn ich nur den Mikrocontroller mit usb hab und dass er
das durch die usb verbindung rausbekommt? Hab irgendwo was gelesen dass
man USB Theathering oder sowas aktivieren muss beim handy
Markus schrieb:> Hab irgendwo was gelesen dass> man USB Theathering oder sowas aktivieren muss beim handy
Warum sollte ein Handy jemals über USB den Ladezustandes seines Akku
rausrücken? Und mit welchem USB Profil sollte das wohl gehen? Nur fürs
Handy selbst ist sein Ladezustand wichtig.
Nein, das Telefon erkennt nur, was für eine Sorte USB Host an der
anderen Seite ist und schlägt dann vor, nur zu laden, sich als
Massenspeicher anzubinden oder, oder...
Nein, du kannst ein Handy nicht einfach so per USB fragen, wie voll
dessen Akku ist. Dazu brauchst du mindestens eine App auf dem
betreffenden Gerät, welche den Ladezustand auf der USB-Schnittstelle
erzählt.
Oder per Bluetooth.
Markus schrieb:> Ich möchte während das Handy geladen wird per Mikrocontroller über die> USB Verbindung mit dem Handy abfragen wie viel Akku das Handy gerade> hat, während es lädt. Wenn das Handy mehr als 50% Akku hat soll eine Led> Lampe leuchten.
Wenn Du währen des Ladens (USB-) Daten übertragen willst dauert das
Laden deutlich länger, denn das Mobiltelefon darf dann nur noch 500 mA
Stom aufnehmen.
S. R. schrieb:> Oder per Bluetooth.
Das dürfte die bessere Lösung sein. Eine App auf dem Telefon wird
ohnehin benötigt.
S. R. schrieb:> Dazu brauchst du mindestens eine App auf dem> betreffenden Gerät, welche den Ladezustand auf der USB-Schnittstelle> erzählt.
Und das ist ja nur die eine Hälfte. Auf der anderen Seite muss auch noch
ein USB Host hängen, der sowas auswerten kann. Ein HID Devicetreiber
weiss davon nichts und alle anderen Treiber muss man sich selber
schreiben. Nicht mal USB Funkmäuse geben ihren Batteriezustand preis und
Bluetooth Mäuse auch nicht.
Bei Android Smartphones kann man den Batteriestatus über die USB
Schnittstelle abfragen, wenn die "Entwickleroptionen" und darin das
"Debugging über USB" aktiviert sind.
Einfach das Android SDK auf einen PC installieren, konfigurieren und
folgenden Befehl ausführen:
./adb shell cat /sys/class/power_supply/battery/batt_attr_text
Nun musst du "nur" noch die Funktionen von adb mit einem Mikrocontroller
nachbilden. Ich würde dafür aber lieber einen mini PC verwenden - ist
ganz bestimmt viel viel einfacher.
S. R. schrieb:> Dazu brauchst du mindestens eine App auf dem> betreffenden Gerät, welche den Ladezustand auf der USB-Schnittstelle> erzählt.>> Oder per Bluetooth.
Kopple ich mein Android-Handy per Bluetooth mit der Freisprechanlage
meines Autos, zeigt dieses auf dem Radio-Display neben den
Netzwerkbalken auch den Batterieladezustand des Handys an.
- Ohne spezielle App
- Ohne Kabelverbindung
Es muss also über Bluetooth ziemlich einfach gehen.
Per Bluetooth sollte bei allen Handys gehen, da es eine Grundfunktion
für die Freisprechanlage ist. Ist sicherlich ein einfacherer Ansatz, da
diese Schnittstelle standardisiert sein muss.
Christian_RX7
Stefan U. schrieb:> Bei Android Smartphones kann man den Batteriestatus über die USB> Schnittstelle abfragen, wenn die "Entwickleroptionen" und darin das> "Debugging über USB" aktiviert sind.>> Einfach das Android SDK auf einen PC installieren, konfigurieren und> folgenden Befehl ausführen:>> ./adb shell cat /sys/class/power_supply/battery/batt_attr_text>> Nun musst du "nur" noch die Funktionen von adb mit einem Mikrocontroller> nachbilden. Ich würde dafür aber lieber einen mini PC verwenden - ist> ganz bestimmt viel viel einfacher.
Das hört sich doch nach ner guten Lösung an. Aber was meinst du mit Mini
PC? Ich will ja dass der chip diesen batteriestatus verwendet um eine
Lampe an bzw aus zuschalten.
Frank M. schrieb:> Kopple ich mein Android-Handy per Bluetooth mit der Freisprechanlage> meines Autos, zeigt dieses auf dem Radio-Display neben den> Netzwerkbalken auch den Batterieladezustand des Handys an.
Ich habe mal ein wenig recherchiert. Das Geheimnis, wie man einem
Mobiltelefon über Bluetooth den Akkuladezustand entlockt, ist in der
sogenannten "Hands free profile specification", welche die Kommunikation
mit einer Freisprechanlage beschreibt, dokumentiert:
https://www.bluetooth.org/docman/handlers/downloaddoc.ashx?doc_id=238193&_ga=1.95975068.1635866346.1453465510
Mit dem Kommando AT+CMER kann man den Ladezustand auslesen. Die Antwort
sieht folgendermaßen aus:
+CIEV: <Battery level Ind>,<Value>
Siehe Kapitel 4.7 in obiger Dokumentation.
Also:
- Bluetooth-Adapter an µC
- Bluetooth Verbindung herstellen mit dem Mobiltelefon
- Ladezustand abfragen
- Wenn Schwellwert erreicht, LED an.
In das "Hands free profile" muss man sich natürlich erstmal reinfuchsen.
Die Dokumentation (siehe obigen Link) scheint aber ausführlich genug
dafür zu sein.