Hallo zusammen,
für ein Hobbyprojekt versuche ich seit einigen Tagen, eine ESP32S3-DevkitC-1 Plattine über ihre Native-USB mit einem Navspark NS-RAW GPS Empfänger zu verbinden.
NS-RAW: https://navspark.mybigcommerce.com/ns-raw-carrier-phase-raw-measurement-output-gps-receiver/
Mit dem uC der GPS-Platine kann man theoretisch über einen seriellen Port kommunizieren, leider ist nur TX und nicht RX über die Pins de Platine erreichbar. Will man dem GPS (z.B. Konfigurations-) Befehle schicken, muss man dies über den micro-USB Stecker und einen PL2303 der Platine tun.
Die GPS-Platine kann man per USB mit einem PC verbinden und mit einer SW des Herstellers steuern. Alles, was mir der Hersteller sagen konnte, ist, dass ich mit einem ESP32 die Funktion des PCs nachbilden musste, um ihre GPS-Platine mit dem ESP32 bedienen zu können.
Soweit ich zu verstehen glaube, muss man dafür mit den ESP32 über seinen nativen USB als Host arbeiten lassen, womit ich bisher noch keine Erfahrung gemacht hatte.
Für Testzwecken habe ich (unten anderen) den Setup im Bild benutzt. OTG Kabel zwischen dem USB des ESP32 und dem der GPS-Platine. Dazu 5v und GND (graues und gelbes Kabel, die Platine akzeptiert 3,6-10v) und eine serielle Verbindung mit TX des GPS (der RX, wie gesagt, ist nicht über die Pins zu erreichen.) Dieses Signal kann ich alternativ mit einem Oszilloskop überprüfen.
Die ESP32 verbinde ich über den UART Port mit einem PC. Ich weiß nicht, ob diese Darstellung alles besser schildert oder das Ganze noch komplizierter macht :)
[PC] <- Kabel -> [(CP2102)<->(ESP32S3 native USB)] <- Kabel -> [(PL2303) <-> (GPS-uC)]
Im ESP32 lasse ich dieses Program laufen (mit der Arduino IDE kompiliert, mit der Konfiguration die auf dem dritten Bild im Anhang zu sehen ist):
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 |
|
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 |
|
47 |
|
48 |
|
49 |
|
50 |
|
51 |
|
52 |
|
53 |
|
54 |
|
55 |
|
56 |
|
57 |
|
58 |
|
59 |
|
60 |
|
61 |
|
62 |
|
63 |
|
64 |
|
65 |
|
66 |
|
67 |
|
68 |
|
69 |
|
70 |
|
71 |
|
72 |
|
73 |
|
74 |
|
75 |
|
76 |
|
77 |
|
78 |
|
79 |
|
80 |
|
81 |
|
82 |
|
83 |
|
84 |
|
85 |
|
86 |
|
87 |
|
88 |
|
89 |
|
Dieses Program sollte seitens des ESP32, alles was über den UART kommt, auf den nativen USB weiterleiten. Damit kann ich am PC z.B. mit Realterm Konfigurationsbefehle an die ESP32 schicken, die dann die GPS Platine auch empfangen sollte - tut sie aber nicht, denn sie reagiert nicht auf sie. Die Befehle sollten nicht das Problem sein: Mit dem Protokol habe ich schon mit einem anderen GPS Empfänger desselben Herstellers ziemlich viel rumgespielt, und die NS-RAW reagiert auf diese Befehle, wenn ich die Platine direkt am PC per USB anschließe.
Als weiterer Hinweis: Von den mehreren Meldungen, die das Program zeigen kann, sehe ich nur "USB Unplugged" wenn ich die GPS-Platine trenne. Ich sehe keine, wenn ich die wieder anschließe, doch auch gar nichts zu einer CDC Verbindung.
Also die Frage, wenn das Problem halbwegs zu verstehen ist: Kann jemand sehen, warum die GPS-Platine angeblich nichts vom nativen USB des ESP32 empfängt? Habe ich einfach ein grunsätzliches Verständnisproblem über die Funktionsweise des ESP32 als USB Host? Jeder Vorschlag ist willkommen!
Vielen Dank im Voraus



