ESP_IOT v2.5
IOT ESP Coding
GPSSensorClass.cpp
Go to the documentation of this file.
1
2#include "../../Defines.h"
3
4#ifdef USE_GPS_SENSOR_CLASS
5#include "GPSSensorClass.h"
6
7//#include <iostream>
8#include <string.h>
9#include <stdio.h>
10/**
11Connect UNIT GPS to port C, Use GPS Unit to get the coordinate data and time
12of the current location. 将UNIT GPS
13连接到C端口,使用GPS单元获取当前位置的坐标数据和时间。
14*/
15
16#include <TinyGPSPlus.h>
17
18static const uint32_t GPSBaud = 9600;
19
20// Creat The TinyGPS++ object. 创建GPS实例
22
23// The serial connection to the GPS device. 与GPS设备的串行连接
24HardwareSerial ss(2);
25
26GPSSensorClass::GPSSensorClass(char *config) : SensorClassType(config)
27{
28
29 printf("GPSSensorClass init %s\n", config);
30}
31
32
33// This custom version of delay() ensures that GPS objects work properly.
34// 这个自定义版本的delay()确保gps对象正常工作。
35static void smartDelay(unsigned long ms) {
36 unsigned long start = millis();
37 do {
38 while (ss.available()) gps.encode(ss.read());
39 } while (millis() - start < ms);
40}
41
42//!@see https://www.w3schools.com/cpp/cpp_class_methods.asp
44{
45 if (gps.location.isValid())
46 {
47 SerialDebug.printf("%f,%f,%f\n", gps.location.lat(), gps.location.lng(), gps.altitude.isValid()?gps.altitude.meters():0.0);
48 }
49#ifdef LATER
50 SerialDebug.printf("GPSSensorClass::loop()\n", gps.location.lat(), gps.location.lon());
51 static const double LONDON_LAT = 51.508131, LONDON_LON = -0.128002;
52
53 SerialDebug.printInt(gps.satellites.value(), gps.satellites.isValid(), 5);
54 SerialDebug.printInt(gps.hdop.value(), gps.hdop.isValid(), 5);
55 SerialDebug.printFloat(gps.location.lat(), gps.location.isValid(), 11, 6);
56 SerialDebug.printFloat(gps.location.lng(), gps.location.isValid(), 12, 6);
57 SerialDebug.printInt(gps.location.age(), gps.location.isValid(), 5);
58 SerialDebug.printDateTime(gps.date, gps.time);
59 SerialDebug.printFloat(gps.altitude.meters(), gps.altitude.isValid(), 7, 2);
60 SerialDebug.printFloat(gps.course.deg(), gps.course.isValid(), 7, 2);
61 SerialDebug.printFloat(gps.speed.kmph(), gps.speed.isValid(), 6, 2);
62 SerialDebug.printStr(
64 6);
65
66 unsigned long distanceKmToLondon =
67 (unsigned long)TinyGPSPlus::distanceBetween(
68 gps.location.lat(), gps.location.lng(), LONDON_LAT, LONDON_LON) /
69 1000;
70 SerialDebug.printInt(distanceKmToLondon, gps.location.isValid(), 9);
71
72 double courseToLondon = TinyGPSPlus::courseTo(
73 gps.location.lat(), gps.location.lng(), LONDON_LAT, LONDON_LON);
74
75 SerialDebug.printFloat(courseToLondon, gps.location.isValid(), 7, 2);
76
77 const char *cardinalToLondon = TinyGPSPlus::cardinal(courseToLondon);
78
79 SerialDebug.printStr(gps.location.isValid() ? cardinalToLondon : "*** ", 6);
80
81 SerialDebug.printInt(gps.charsProcessed(), true, 6);
82 SerialDebug.printInt(gps.sentencesWithFix(), true, 10);
83 SerialDebug.printInt(gps.failedChecksum(), true, 9);
84#endif
85 smartDelay(1000);
86
87 if (millis() > 5000 && gps.charsProcessed() < 10)
88 SerialDebug.println(F("No GPS data received: check wiring"));
89
90}
91
93{
94 printf("GPSSensorClass::setup()\n");
95
96 ss.begin(
97 GPSBaud); // It requires the use of SoftwareSerial, and assumes that
98 // you have a 4800-baud serial GPS device hooked up on pins
99 // 4(rx) and 3(tx).
100 // 它需要使用SoftwareSerial,并假设您有一个4800波特的串行GPS设备连接在引脚4(rx)和3(tx)。
101
102 M5.Lcd.println(F(
103 "Sats HDOP Latitude Longitude Fix Date Time Date Alt "
104 "Course Speed Card Distance Course Card Chars Sentences Checksum"));
105 M5.Lcd.println(
106 F(" (deg) (deg) Age Age (m) "
107 " --- from GPS ---- ---- to London ---- RX RX Fail"));
108 M5.Lcd.println(
109 F("--------------------------------------------------------------------"
110 "-------------------------------------"));
111}
112
113
114
115#ifdef NOT_USED
116//! 5.15.25 try a special command local to this class
117void GPSSensorClass::messageLocal_SensorClassType(char *message)
118{
119
120}
121
122//! adding the messages as well
123//! 5.14.25 (Laura/Paul flying). 5.14.74 great Dead
124//! 8.28.23 Adding a way for others to get informed on messages that arrive
125//! for the set,val
126//! 12.27.23 support setName == "socket"
127//! 1.10.24 if deviceNameSpecified then this matches this device, otherwise for all.
128//! It's up to the receiver to decide if it has to be specified
129void GPSSensorClass::messageSetVal_SensorClassType(char *setName, char* valValue, boolean deviceNameSpecified)
130{
131
132}
133
134//! 12.28.23, 8.28.23 Adding a way for others to get informed on messages that arrive
135//! for the send -
136void GPSSensorClass::messageSend_SensorClassType(char *sendValue)
137{
138
139}
140
141//! 12.28.23, 8.28.23 Adding a way for others to get informed on messages that arrive
142//! for the cmd
143void GPSSensorClass::messageCmd_SensorClassType(char *cmdValue)
144{
145
146}
147#endif
148
149#else
150#ifdef NOT_NOW
151//!@see https://www.w3schools.com/cpp/cpp_class_methods.asp
153{
154 printf("GPSSensorClass::loop()\n");
155}
156
158{
159 printf("GPSSensorClass::setup()\n");
160}
161#endif //NOT_NOW
162
163#endif //gps defined
void setup()
Definition: ESP_IOT.ino:39
void loop()
main loop() of the Arduino runtime
Definition: ESP_IOT.ino:284
MultipleSatellite gps(Serial1, GPSBaud, SERIAL_8N1, TinyGPS_RXPin, TinyGPS_TXPin)
unsigned long millis()
Definition: TinyGPS.cpp:35
TinyGPSAltitude altitude
Definition: TinyGPS.h:238
TinyGPSHDOP hdop
Definition: TinyGPS.h:240
TinyGPSTime time
Definition: TinyGPS.h:235
TinyGPSInteger satellites
Definition: TinyGPS.h:239
uint32_t sentencesWithFix() const
Definition: TinyGPS.h:252
TinyGPSDate date
Definition: TinyGPS.h:234
TinyGPSLocation location
Definition: TinyGPS.h:233
static const char * cardinal(double course)
Definition: TinyGPS.cpp:345
TinyGPSSpeed speed
Definition: TinyGPS.h:236
static double distanceBetween(double lat1, double long1, double lat2, double long2)
Definition: TinyGPS.cpp:300
TinyGPSCourse course
Definition: TinyGPS.h:237
bool encode(char c)
Definition: TinyGPS.cpp:67
uint32_t charsProcessed() const
Definition: TinyGPS.h:251
static double courseTo(double lat1, double long1, double lat2, double long2)
Definition: TinyGPS.cpp:325
uint32_t failedChecksum() const
Definition: TinyGPS.h:253
double meters()
Definition: TinyGPS.h:188
double deg()
Definition: TinyGPS.h:183
bool isValid() const
Definition: TinyGPS.h:137
int32_t value()
Definition: TinyGPS.h:140
bool isValid() const
Definition: TinyGPS.h:157
uint32_t value()
Definition: TinyGPS.h:160
double lng()
Definition: TinyGPS.cpp:379
double lat()
Definition: TinyGPS.cpp:372
bool isValid() const
Definition: TinyGPS.h:60
uint32_t age() const
Definition: TinyGPS.h:62
double kmph()
Definition: TinyGPS.h:178