Samstag, 22. Mai 2021

E-Bike wird Smart

Die Android App

Als letzten Teil dieser Reihe will ich auf die Android App eingehen.
Sie besteht aus 4 Fragments, 
Home (links), History (Mitte), Map (rechts) und Settings (hier nicht dargestellt)


Eigentlich selbsterklärend. Im Home Fragment werden alle Daten angezeigt die in der Summary.txt abgespeichert sind.  {"tick":"1","tour":"19.65 km","since":"1:05","max":"23.00", "year":"1249.19 km","total":"7319 km","lastkm":"31.37","duration":"1:37", "datelast":"20.05.2021"}

Im letzten Teil hatte ich erklärt, wie sich die Dateien mit den GPS Daten zusammensetzten
Diese sind im Verzeichnis "Tours" auf dem Handy gespeichert. Die Dateinamen setzten sich dann so zusammen, dass sie alle Informationen für den Aufbau der History Liste enthalten.
für den ersten Eintrag ist der Dateiname "2021-05-20_1112_3137_097.txt". Spontan kann ich nicht mehr erklären warum ich definiert habe, dass hier dann 097 also 97 Minuten anstatt 137 also 1Std 37Minuten stehen. Ich werde mir was bei gedacht haben. 

In der MAP Darstellung kann ich mir dann anschauen, wo ich mit dem Rad lang gefahren bin.
Je nachdem wie lange das Rad ausgeschaltet war, dauert es etwas bis die GPS Satelliten korrekt ausgewertet werden. daher ist hier eine Lücke in der Darstellung erkennbar. Vielleicht ist es auch ein Schwäche des GPS Moduls. Mir reicht die Genauigkeit aus.

In der Ansicht der Settings ist nicht viel zu sehen daher auch kein Screenshot. Hier kann man die Anzahl der Kilometer eintragen die man ab Jahresanfang gefahren ist. i.d.R. mache ich dass so, dass ich die Anzahl der Jahreskilometer am 01. Januar auf 0 stelle. Damit diese zum E-Bike übertragen wird, ist eine Bluetooth Verbindung zum E-Bike notwendig. Hinter dem Admin Button verbirgt sich die Funktion die den ESP Controller im E-Bike in den OTA Modus versetzt. Hierzu ist das E-Bike in den SSID Bereich des im OTA Script hinterlegten Netzwerkes zu positionieren. Auch diese Funktion ist nur  mit Bluetooth Verbindung zum E-Bike verfügbar

Nun bin ich nicht der Android Programmier Spezialist und habe mir viel Techniken erst selber aneignen müssen. Das Arbeiten mit Fragments, die Darstellung der Listen funktioniert komplett anders als z.B. mit jQuery Mobile. Das Herstellen einer Bluetooth Verbindung zum Android mit entsprechender Datenübertragung war eine größerern Herausforderungen. Aber dennoch, ich habe das Projekt mit viel Geduld umsetzen können und habe noch vor einiges zu verändern.

Ich habe die App mit Android Studio 4.12 auf einem Linux System erstellt. Sollte sich jemand den Code herunterladen und die App installieren wollen, so muss man die Pfade auf dem Handy manuell anlegen, und die Summary.txt in den Pfad kopieren. Darüber hinaus braucht die App die Berechtigung für Bluetooth und SD Schreibberechtigung. Ich habe bewusst nicht eine kompilierte Version hochgeladen.
Es gibt sicherlich genügende Spezis die es besser / anders machen würden, aber diese APP funktioniert auf meinem Handy sehr zuverlässig. Für jeden Ratschlag bin ich dankbar, Kritik gerne, aber dann sollte auch gleich ein konstruktiver Teil dabei sein.

Was ist als nächstes geplant? Da ich nicht immer mein Handy dabei habe, will ich umsetzen, dass sich die Mein Home Webserver die Dateien vom E-Bike holt. Also wenn es zu Hause angekommen ist, wird über ein Raspberry eine BT Verbindung zum E-Bike hergestellt, der dann alle neu GPS Dateien und die Summary.txt dann auf den Server kopiert. Rufe ich zu Hause dann die E-Bike App auf, holt sich die APP die Dateien vom Server.

Wenn Du Fragen zum Quellcode der App hast, dann kannst Du mir gerne eine Mail schreiben.

Viel Spaß beim Nachbauen / Programmieren.

Dienstag, 4. Mai 2021

E-Bike wird Smart

Das ESP Programm

Dieser Abschnitt beschäftigt sich mit dem Programm, welches auf dem ESP läuft.
Grundsätzlich bin ich bei der Architektur so vorgegangen, dass alle Informationen zu der gerade gefahrenen Strecke in mehreren Dateien abgelegt werden. Warum in mehreren Dateien? Nun ich wollte keine Datenbank einsetzen, das wäre mit Kanonen auf Spatzen, aber ich wollte es für den Sketch so einfach wie möglich halten.
Und so werden alle Daten vom GPS Empfänger in eine Datei geschrieben, und alle Daten die beim Start notwendig sind, also aktuelle Zeit, aktueller Kilometerstand aus einer Datei gelesen.
Die Daten, die für die Übertragung auf das Handy notwendig sind, werden in der dritten Datei gespeichert und mittels Bluetooth als Datenstream ans Handy gesendet, wenn eine Verbindung zum Handy besteht.
Darüber hinaus erzeuge ich noch an jedem Tag an dem gefahren wird eine Log Datei, die ist aber nur für die Fehleranalyse notwendig. Nach jetzt gut 4 Wochen Betrieb kam es bisher noch zu keinem Fehler.
Einige Informationen sind im Laufe der Entwicklung auch obsolete geworden, da ich im letzten Jahr noch mit den Radumdrehungen gearbeitet habe, da war ich noch nicht in der Lage den CAN Bus auszulesen.  
Fangen wir mit der init.txt  Datei an.
der Inhalt:
{"tick":"1","tour":"0.00 km","since":"0:00","max":"0.00","year":"666.01 km","total":"6736.05 km","lastkm":"4.28","duration":"0:16","datelast":"03.04.2021"}

tick; wird nicht mehr zur Berechnung benötigt, wird nur noch im Android Programm zur Identifizierung des Datenstreams genutzt, wird irgendwann mal weg fallen
tour: enthält die Anzahl der Kilometer seit dem Start der aktuellen Tour.
since: seit wann wird die Tour gefahren, und später dann als Info über die TourZeit
max: die Maximale Geschwindigkeit während dieser Tour
year: die Anzahl der Kilometer die in diesem Jahr zurückgelegt wurde
total: die Anzahl der Kilometer die das Rad zurückgelegt hat CANBus ID 0x202
lastkm: die Anzahl der Kilometer der letzten Tour
duration: die Dauer der letzten Tour
datelast: das Datum an dem die Tour gefahren wurde.

Diese Daten werden mit der Funktion Send_BT_Summary ans Handy gesendet wenn das Rad steht und eine Verbindung besteht. Aber auch alle 100m in die Datei auf der SD Karte im Rad geschrieben.

der Inhalt der setup.txt:
{"raumf":"2250","l_date":"20210405","l_start":"1630","l_startkm":"6736.05"}

raumf: ist obsolete, da nicht mehr mit dem Radumfang und der Radumdrehung gearbeitet wird. kann genauso wie tick irgendwann mal rausfliegen.
l_date: ist das Datum an dem die aktuelle tour gestartet wurde. ist das aktuelle Datum größer als dieses, dann beginnt er eine neue Tour und schließt diese ab.
l_start: ist die Uhrzeit an dem die aktuelle tour gestartet wurde
l_startkm: ist der Kilometerstand an dem die aktuelle Tour gestartet wurde.

Bleibt als letztes von das Abspeichern der GPS Daten. Dazu wird bei beginn einer neuen Tour aus dem l_date eine neue Datei erstellt, in diesem Beispiel 20210405.txt. Hier werden die GPS Daten im JSON Format gespeichert.{"GPS":[{"lat":"51.273742640","lng":"6.793988365"},{"lat":"51.273086760","lng":"6.812092105"},
Wird eine Tour abgeschlossen, also wenn das aktuelle Datum ungleich der dem
 l-date ist, dann wird an diese Datei noch ein die folgenden Informationen der aktuellen Tour angehängt, beginnend mit der geschlossenen eckigen Klammer. ],"durt":"0:59","dist":"15.00","avsp":"15.00","maxsp":"28.05"}

Diese Datei wird dann wie folgt benannt 2021-04-05_1630_1500_059.txt und im Data Verzeichnis der SD Karte im ESP abgespeichert. Ist das Handy dann in Reichweite und besteht eine BT Verbindung wird es ans Handy übertragen und steht dann der APP unter History zur Verfügung.

Das Programm habe ich las Zip Datei zum Download bereitgestellt. Es sind natürlich noch die diversen Bibliotheken notwendig, die von die diversen ESP Development Quellen heruntergeladen werden können. Ein wenig tricky ist es mit der CAN Bus Library, hier gibt es unterschiedliche mit gleichem Namen. Ich habe diese von sandeepmistry genutzt. Der Vorteile bei dem verwendeten Modul ist, dass
a:) der ESP32 einen eingebauten CAN Controller hat,
b:) damit kann das CAN Interface sehr viel kleiner ausfallen.

Im nächsten Teil gehe ich dann noch auf die Android App ein.
Viel Spaß beim lesen, wenn jemand Fragen hat, einfach melden.

Gruß
Ulli





Freitag, 16. April 2021

 E-Bike wird Smart
 Die Schaltung

In den letzten Tagen habe ich mich mit der Dokumentation der Schaltung befasst. Alles aus meiner Kladde zu einem fritzing Plan zusammengefasst.




Eine Platine habe ich dafür nicht geätzt, letztendlich habe ich alle Boards in Sandwich Architektur zusammen gelötet: Alles zusammen ist dann in ein Gehäuse gewandert und im E-Bike eingebaut worden. 

Die Schaltung wird mit der Akku Spannung des Rades betrieben. Das Rad schaltet die Spannung nach einigen Minuten Stillstand ab. Somit wird auch der ESP Controller ausgeschaltet. Da die Schaltung verdeckt angebracht ist habe ich einen kleinen Beeper eingebaut. Er gibt je nach Betriebszustand Signale ab. Somit ist ein kurzer Check über die Funktionsbereitschaft sichergestellt. Wird das Rad eingeschaltet und ist alles okay, dann gibt er 2 kurze Signale aus. Liegt ein Fehler mit der SD Karte vor, so piept es 3 mal lang. Wird das Rad geladen dann dann piept er 2 mal kurz und einmal lang. Würde die Schaltung den CAN Bus nicht auslesen können, piept es 2mal lang und 2 mal kurz. 


















In dem nächsten Post werde ich den Arduino Sketch veröffentlichen.

Viel Spaß beim lesen.







Mittwoch, 14. April 2021

E-Bike wird Smart
Die Idee


Seit 2 Jahren bin ich E-Biker. Lange war ein E-Bike bei mir mit dem Spitznamen "Kukident Rad" behaftet, denn ich fühlte mich jung und sportlich und kam gut ohne Unterstützung aus. Das ist heute sicherlich auch noch so, aber als das E-Bike dann da war, kam schon der Gedanke auf, dass eine Anschaffung vorher auch Sinn gemacht hätte. Es erhöht den Fahrspaß immens. Es ist wie es ist, Es wird nun viel mit dem Rad gefahren und das Auto dient eigentlich nur noch als Transportmittel um an die Ausgangspunkte weiter weg gelegenen Startpunkte für schöne Touren zu kommen.
Mein Rad ist mit einem Bosch System ausgelegt. Eines der Kaufentscheidungen, neben einem Riemenantrieb und einer stufenlosen Nabenschaltung.
Schnell kam mir der Gedanke das Rad mit dem Handy zu koppeln und Informationen über Kilometerstand, Akkustand, Reichweite auch auf das Handy zu übertragen. Ein neues Projekt war geboren.
Auf der Suche nach Informationen über den CAN BUS im Rad, bin ich dann auf das Pedelec Forum gestoßen. Hier gab es schon jede Menge Reengineering Know How. Aber es gelang mir selber nicht die Daten mittels Raspberry oder ESP auszulesen. Der Fehler saß da sicher vor dem Gerät. So habe ich erst einmal eine Lösung verfolgt mit einem Zusätzlichem Impulsgeber am Rad, der zu Mindestens die gefahrenen Kilometer registriert.
Anforderungen an meine Lösung waren:

  • GPS Aufzeichnung der zurückgelegten Strecken mit dem Rad
  • Erfassung der zurückgelegten Kilometer unabhängig von den GPS Daten
  • Erfassung der Fahrtzeiten
  • Erfassung der Daten ohne Mitführung eines Handys
  • Überspielung der Daten auf das Handy wenn es verfügbar ist.

Eine ähnliche Lösung hatte ich vor Jahren schon mal mit einem Pi-Zero für mein Firmenfahrzeug erstellt, damit konnte ich im nach hinein dokumentieren an welchem Tag ich wan wo für wie lange war. Das alles wurde in einer sql Datenbank gespeichert und ich konnte das über html abfragen. Nun hier sollte es eine Android App sein und Platz im E-Bike für die Elektronik war auch weniger als in einem Mittelklasse Wagen. 

Elektronik und Programmierung alles kein Hexenwerk, aber mit Android Programmierung hatte ich noch keine Erfahrung. Aber auch das erwies sich nicht als Buch mit sieben Siegeln.
Die größte Herausforderung war hier die Programmierung der App mit Fragments und der Realisierung einer Datei Übertragung vom ESP 32 über Bluetooth zum Handy

Den Quellcode für das Android Handy werde ich hier in den nächsten Tagen einstellen.
Die Daten dazu speichert die App derzeit auf der SD Karte.

 

In der Datei Summary.txt stehen die Daten die über den Home Screen der App angezeigt werden, die aufgezeichneten GPS Daten sind in dem Unterordner Tours abgelegt und werden per Filetransfer über Bluetooth von ESP zum Handy übertragen. Mehr dann in den nächsten Tagen.