Goedemiddag tweakers,
Sinds een tijdje ben ik bezig met een corona projectje namelijk een GPS logger. Het idee is om voor de mountainbike wedstrijden dit zomer een logger te maken die via een webpagina bekeken kan worden.
Op deze webpagina zouden de volgende gegevens zichtbaar moeten zijn: positie, hoogte, snelheid en temperatuur. Dit wil ik graag op een map zichtbaar maken zodat men kan zien hoever je gevorderd bent (is het een optie om een overlay van de route ook in te laden? in de vorm van GPX oid?)
Eerst ben ik begonnen met het verzamelen van de hardware namelijk:
Nu heb ik doormiddel van veel YouTube filmpjes en tutorials het zover dat positie en snelheid worden weggeschreven naar een database doormiddel van een php script, helaas lukt het mij nog niet om hier waardes uit de DHT22 in mee te sturen. Zie onderstaande code van de Arduino:
Wat heb ik al geprobeerd om de DHT22 waarde's toe te voegen? heb op dezelfde manier als de snelheid deze waarde's geprobeerd mee te sturen namelijk:
Helaas blijf ik de melding houden dat de DHT sensor eerst ergens declared moet worden. Dit heb ik geprobeerd om dit stukje code uit een ander project te plakken:
Helaas krijg ik het niet voor elkaar dat deze waardes in de url komen waardoor ik ze dus ook niet in de database kan opnemen.
De eerste uitdaging, hoe krijg ik de temperatuur en de luchtvochtigheid ook in mijn database.
Dan het tweede, dat is het presenteren van de gegevens. via google heb ik gevonden dat ze markers maken in google maps, hierdoor kun je zien waar je geweest bent. Helaas geeft dit geen live informatie weer en zien we markers, niet de route die is afgelegd. iemand enig idee met wat voor een tooling ik deze informatie live kan laten weergeven?
Huidige maps: gps.medialan.nl screenshot:
Gegevens database:
ik hoor graag of tweakers hier ervaring mee hebben en tips en tricks hebben om het gewenste resultaat te bereiken. Mocht het allemaal naar behoren werken zal ik er een PCB van laten maken, heb al contact gehad met verschillende zzp's op het platform Fivver.
Alvast bedankt.
Met vriendelijke groet,
Hendri
Sinds een tijdje ben ik bezig met een corona projectje namelijk een GPS logger. Het idee is om voor de mountainbike wedstrijden dit zomer een logger te maken die via een webpagina bekeken kan worden.
Op deze webpagina zouden de volgende gegevens zichtbaar moeten zijn: positie, hoogte, snelheid en temperatuur. Dit wil ik graag op een map zichtbaar maken zodat men kan zien hoever je gevorderd bent (is het een optie om een overlay van de route ook in te laden? in de vorm van GPX oid?)
Eerst ben ik begonnen met het verzamelen van de hardware namelijk:
- Arduino UNO
- Sim800L voor de data overdracht
- Neo 8m Gps module
- DHT22 voor de temperatuur
Nu heb ik doormiddel van veel YouTube filmpjes en tutorials het zover dat positie en snelheid worden weggeschreven naar een database doormiddel van een php script, helaas lukt het mij nog niet om hier waardes uit de DHT22 in mee te sturen. Zie onderstaande code van de Arduino:
code:
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
| #include <TinyGPS++.h> #include <SoftwareSerial.h> #include <AltSoftSerial.h> #include "cactus_io_DHT22.h" #define rxPin 2 // what pin on the arduino is the Sim800 data line connected to #define txPin 3 // what pin on the arduino is the Sim800 data line connected to #define DHT22_PIN 7 // what pin on the arduino is the DHT22 data line connected to SoftwareSerial sim800L(rxPin,txPin); //GPS Module RX pin to Arduino 9 //GPS Module TX pin to Arduino 8 AltSoftSerial neogps; TinyGPSPlus gps; unsigned long previousMillis = 0; long interval = 1000; void setup() { //Begin serial communication with Arduino and Arduino IDE (Serial Monitor) Serial.begin(115200); //Begin serial communication with Arduino and SIM800L sim800L.begin(9600); //Begin serial communication with Arduino and SIM800L neogps.begin(9600); Serial.println("Initializing..."); //delay(10000); //Once the handshake test is successful, it will back to OK sendATcommand("AT", "OK", 2000); sendATcommand("AT+CMGF=1", "OK", 2000); //sim800L.print("AT+CMGR=40\r"); } void loop() { while(sim800L.available()){ Serial.println(sim800L.readString()); } while(Serial.available()) { sim800L.println(Serial.readString()); } unsigned long currentMillis = millis(); if(currentMillis - previousMillis > interval) { previousMillis = currentMillis; sendGpsToServer(); } } int sendGpsToServer() { //Can take up to 60 seconds boolean newData = false; for (unsigned long start = millis(); millis() - start < 2000;){ while (neogps.available()){ if (gps.encode(neogps.read())){ newData = true; break; } } } //If newData is true if(true){ newData = false; String latitude, longitude; float altitude; unsigned long date, time, speed, satellites; latitude = String(gps.location.lat(), 6); // Latitude in degrees (double) longitude = String(gps.location.lng(), 6); // Longitude in degrees (double) altitude = gps.altitude.meters(); // Altitude in meters (double) date = gps.date.value(); // Raw date in DDMMYY format (u32) time = gps.time.value(); // Raw time in HHMMSSCC format (u32) speed = gps.speed.kmph(); Serial.print("Latitude= "); Serial.print(latitude); Serial.print(" Longitude= "); Serial.println(longitude); Serial.println (" speed kmph="); Serial.println (speed); //if (latitude == 0) {return 0;} String url, temp; url = "http://gps.medialan.nl/gpsdata.php?lat="; url += latitude; url += "&lng="; url += longitude; url += "&speed="; url += speed; Serial.println(url); delay(300); sendATcommand("AT+CFUN=1", "OK", 2000); //AT+CGATT = 1 Connect modem is attached to GPRS to a network. AT+CGATT = 0, modem is not attached to GPRS to a network sendATcommand("AT+CGATT=1", "OK", 2000); //Connection type: GPRS - bearer profile 1 sendATcommand("AT+SAPBR=3,1,\"Contype\",\"GPRS\"", "OK", 2000); //sets the APN settings for your network provider. sendATcommand("AT+SAPBR=3,1,\"APN\",\"internet\"", "OK", 2000); //enable the GPRS - enable bearer 1 sendATcommand("AT+SAPBR=1,1", "OK", 2000); //Init HTTP service sendATcommand("AT+HTTPINIT", "OK", 2000); sendATcommand("AT+HTTPPARA=\"CID\",1", "OK", 1000); sim800L.print("AT+HTTPPARA=\"URL\",\""); sim800L.print(url); sendATcommand("\"", "OK", 1000); //Set up the HTTP action sendATcommand("AT+HTTPACTION=0", "0,200", 1000); //Terminate the HTTP service sendATcommand("AT+HTTPTERM", "OK", 1000); //shuts down the GPRS connection. This returns "SHUT OK". sendATcommand("AT+CIPSHUT", "SHUT OK", 1000); } return 1; } int8_t sendATcommand(char* ATcommand, char* expected_answer, unsigned int timeout){ uint8_t x=0, answer=0; char response[100]; unsigned long previous; //Initialice the string memset(response, '\0', 100); delay(100); //Clean the input buffer while( sim800L.available() > 0) sim800L.read(); if (ATcommand[0] != '\0'){ //Send the AT command sim800L.println(ATcommand); } x = 0; previous = millis(); //this loop waits for the answer with time out do{ //if there are data in the UART input buffer, reads it and checks for the asnwer if(sim800L.available() != 0){ response[x] = sim800L.read(); //Serial.print(response[x]); x++; // check if the desired answer (OK) is in the response of the module if(strstr(response, expected_answer) != NULL){ answer = 1; } } }while((answer == 0) && ((millis() - previous) < timeout)); Serial.println(response); return answer; } //AT+CFUN=1 //AT+CGATT=1 //AT+SAPBR=3,1,"Contype","GPRS" //AT+SAPBR=3,1,"APN","internet" //AT+SAPBR=1,1 |
Wat heb ik al geprobeerd om de DHT22 waarde's toe te voegen? heb op dezelfde manier als de snelheid deze waarde's geprobeerd mee te sturen namelijk:
code:
1
| (Serial.println dht.temperature_C); & (Serial.println dht.humidity); |
Helaas blijf ik de melding houden dat de DHT sensor eerst ergens declared moet worden. Dit heb ik geprobeerd om dit stukje code uit een ander project te plakken:
code:
1
| DHT22 dht(DHT22_PIN); |
Helaas krijg ik het niet voor elkaar dat deze waardes in de url komen waardoor ik ze dus ook niet in de database kan opnemen.
De eerste uitdaging, hoe krijg ik de temperatuur en de luchtvochtigheid ook in mijn database.
Dan het tweede, dat is het presenteren van de gegevens. via google heb ik gevonden dat ze markers maken in google maps, hierdoor kun je zien waar je geweest bent. Helaas geeft dit geen live informatie weer en zien we markers, niet de route die is afgelegd. iemand enig idee met wat voor een tooling ik deze informatie live kan laten weergeven?
Huidige maps: gps.medialan.nl screenshot:
Gegevens database:
ik hoor graag of tweakers hier ervaring mee hebben en tips en tricks hebben om het gewenste resultaat te bereiken. Mocht het allemaal naar behoren werken zal ik er een PCB van laten maken, heb al contact gehad met verschillende zzp's op het platform Fivver.
Alvast bedankt.
Met vriendelijke groet,
Hendri