DIY HoTT GPS

Status
Nicht offen für weitere Antworten.

muerzi

Erfahrener Benutzer
Hier etwas Detailierter wo man auch die Reihenfolge sieht wie man die Bytes wieder zusammenstellen muss um einen Wert zu erhalten.

Wenn man im Hott Manager unten auf RX TX drückt, öffnet sich eine Debug-Konsole wo man die Kommunikation sieht.
Hier mein Teil des Reverse Engineering.

Werde später noch ergänzen welches Byte der Antwort welche Bedeutung hat.

Code:
GPS

18:35:13.07: > 00 84 7B 00 00 04 38 9F 7B 
18:35:13.08: < CMD: 04 01  - Data: 00 00 40 00 58 01 00 00 8A 13 36 01 A7 07 96 04 96 00 00 00 28 8C D3 A0 09 00 56 01 00 00 00 00 00 00 00 00 00 00 00 20 20 66 
18:35:13.20: > xx 85 7A xx xx xx xx xx xx
18:35:13.21: < ...
18:35:13.33: > xx 86 79 xx xx xx xx xx xx
18:35:13.34: < ...
18:35:13.46: > xx 87 78 xx xx xx xx xx xx
18:35:13.47: < ...
18:35:13.59: > xx 88 77 xx xx xx xx xx xx
18:35:13.60: < ...
18:35:13.72: > xx 89 76 xx xx xx xx xx xx
18:35:13.73: < ...
18:35:13.85: > xx 8A 75 xx xx xx xx xx xx
18:35:13.86: < ...
18:35:13.98: > xx 8B 74 xx xx xx xx xx xx


	  40 00 => 64         --> 0x00 0x40
	  58 01 => 344        --> 0x01 0x58
8A 13 36 01 => 50°02,0310 --> 0x13 0x8A 0x01 0x36
A7 07 96 04 => 19°59,1174 --> 0x07 0xA7 0x04 0x96
	  96 00 => 150		  --> 0x00 0x96
	  usw...
 

muerzi

Erfahrener Benutzer
Achja, GPS Koordinaten sind in folgendem Format.

Grad°Minuten,Dezimalminuten

Einfach Minuten,Dezimalminuten * 60 rechnen und schon hast du die Dezimalgrad

Damit dein Arduino damit umgehen kann ;-)
 

muerzi

Erfahrener Benutzer
Also wenns jetzt noch Unklarheiten gibt, dann am besten die Finger weg davon...

Byte 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
Antwort 00 00 40 00 58 01 00 00 8A 13 36 01 A7 07 96 04 96 00 00 00 28

Byte 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
Antwort 8C D3 A0 09 00 56 01 00 00 00 00 00 00 00 00 00 00 00 20 20 66

Byte Bedeutung
0,1 ?
2,3 Geschwindigkeit
4,5 Entfernung
6,7 Höhe
8,9,10,11 NS-Koordinaten
12,13,14,15 EW-Koordinaten
16,17 Flugrichtung des Modells
18 NS
19 EW
20,21 Vario m/1s
22 Vario m/3s
23 Fixed
24 Sat's
25 Fix
26 Richtung von Home zum Modell
27 Accel X
28 Accel Y
29 Accel Z
30,31 Gyro X
32,33 Gyro Y
34,35 Gyro Z
36 ?
37,38,39 ASCII
40 ?
41 ?
 

Butcher

Bill the Butcher
sooo es geht vorran, der arduino verbindet sich schonmal mit der funke, empfangen und parsen kann ich schon, aber noch nicht senden, wie sende ich denn mit SoftwareSerial ne kette von HEX bytes?
 

FraLa

Neuer Benutzer
Moin, moin,

ich habe diesen tollen Thread jetzt voll durchgelesen und werde dieses GPS Modul nachbauen und in meinem Flieger einsetzen. Die nötigen Bauteile habe ich mir gestern Abend bestellt. Vielen Dank schon mal für Deine Mühe, muerzi.
Eigentlich möchte ich die GPS Position am Ende auf meinem Handy haben um bei Aussenlandungen meinen untreuen Flieger wieder zu finden.

Über meine Erfahrungen werde ich auch berichten.

Gruß
Frank
 

Butcher

Bill the Butcher
Funzt bei mir im zimmer ganz gut, mal sehn wies aufm feld funktioniert, und dann mal sehn was der tracker zu melden hat^^ werde das dann auch alles hier als projekt einstelle , ist mein erstes programmierprojekt mit arduino daher alles noch etwas schwierig fuer mich, bin eher der anwendungs-mensch^^ aber ich denke es wird ganz gut laufen^^ wuerde mich freuen wenn der ein oder andere das ding dann auch mal baut/testet^^
 

Butcher

Bill the Butcher
japs genau das ist es, kommt nur noch ein BT modul dazu was in die funke muss! ansonsten ists nur ein arduino 2 servos nen kompass und gut, erweiterbar durch leds, display, summer,...
 
Na siehste - was alles aus deinem Projekt geboren wird muerzi. ;)

Wozu das BT Modul Butcher? Zum Handy? Weil der Arduino klemmt doch direkt an der Funke, oder nicht?
 
Klar, also eher 2 BT Module? Eins Funke, das zweite am Tracker?
 

muerzi

Erfahrener Benutzer
Hier mal ein schnell zusammengestrickter Parser.
Hab ihn aber nicht getestet.

Code:
#include <SoftwareSerial.h>

struct {
    uint8_t flightDirection;         
    uint16_t Speed;
    float LatitudeNS;
    float LongitudeEW;
    uint16_t distance;                
    uint16_t altitude;                
    uint16_t vm1s;           
    uint16_t vm3s;                
    uint8_t GPSNumSat;               
    uint8_t GPSFixChar;              
    uint8_t HomeDirection;           
    uint8_t GPS_fix;                 
} HottGps;

byte rb1, rb2;
byte HottAnswer[42];
int i;

SoftwareSerial hottSerial(10, 11); // RX, TX

void setup()
{
	Serial.begin(115200);
	hottSerial.begin(115200);
	rb1 = 0x00;
	rb2 = 0xFF;
}

void loop()
{
	requestData();
        
	i = 0;
	while (hottSerial.available())
	{
	  HottAnswer[i] = hottSerial.read();
	  i++;
	}
	
	parseData();
	outputToPc();
}

void requestData()
{
	hottV4SerialWrite(int(0x00));
	hottV4SerialWrite(int(rb1)); //1
	hottV4SerialWrite(int(rb2)); //2
	hottV4SerialWrite(int(0x00));
	hottV4SerialWrite(int(0x00));
	hottV4SerialWrite(int(0x04));
	hottV4SerialWrite(int(0x38));
	hottV4SerialWrite(int(0x9F));
	hottV4SerialWrite(int(0x7B));
	rb1 = rb1 + 1;
	rb2 = rb2 - 1;
}

void parseData()
{
  HottGps.Speed = word(HottAnswer[3],HottAnswer[2]);
  HottGps.distance = word(HottAnswer[5],HottAnswer[4]);
  HottGps.altitude = word(HottAnswer[7],HottAnswer[6]);
  HottGps.LatitudeNS = word(HottAnswer[3],HottAnswer[2]);
  HottGps.LongitudeEW = word(HottAnswer[3],HottAnswer[2]);
  HottGps.flightDirection = word(HottAnswer[17],HottAnswer[16]);
  HottGps.HomeDirection = HottAnswer[26];
  HottGps.vm1s = word(HottAnswer[21],HottAnswer[20]);
  HottGps.vm3s = HottAnswer[22];
  HottGps.GPSNumSat = HottAnswer[24];
}

static void hottV4SerialWrite(uint8_t c) {
  hottSerial.write(c);
}

void outputToPc()
{
Serial.print("Geschwindigkeit = ");
Serial.println(HottGps.Speed);
Serial.print("Entfernung = ");
Serial.println(HottGps.distance);
Serial.print("Hoehe = ");
Serial.println(HottGps.altitude);
Serial.print("Latitude = ");
Serial.println(HottGps.LatitudeNS);
Serial.print("Longitude = ");
Serial.println(HottGps.LongitudeEW);
Serial.print("Flugrichtung = ");
Serial.println(HottGps.flightDirection);
Serial.print("Richtung von Home = ");
Serial.println(HottGps.HomeDirection);
Serial.print("Vario m/1s = ");
Serial.println(HottGps.vm1s);
Serial.print("Vario m/3s = ");
Serial.println(HottGps.vm3s);
Serial.print("Satelliten = ");
Serial.println(HottGps.GPSNumSat);
Serial.println();
Serial.println();
Serial.println();
Serial.println();

}
 

Butcher

Bill the Butcher
So angsam werd ich wahnsinnig!, dieses WLS123A1M BT modul ist der letzte dreck! das lässt sich absolut nicht konfigurieren, egal was ich einstelle, bekomme ich nur MÜLL ausgegeben,... hat noch jemand eines rumfliegen was AT befehle verkraftet ?
 

Butcher

Bill the Butcher
kannst du maln link von einem posten wo du weißt das es funktioniert? muss MASTER können!
 
Status
Nicht offen für weitere Antworten.
FPV1

Banggood

Oben Unten