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





Keine Kommentare:

Kommentar veröffentlichen