Fixed Cayenne LPP gps pos implementation
This commit is contained in:
parent
30a4166ed6
commit
d9cc01a8af
6
main/.vscode/arduino.json
vendored
6
main/.vscode/arduino.json
vendored
@ -1,4 +1,6 @@
|
|||||||
{
|
{
|
||||||
"board": "arduino:avr:yun",
|
"board": "esp32:esp32:ttgo-lora32-v1",
|
||||||
"sketch": "main.ino"
|
"sketch": "main.ino",
|
||||||
|
"configuration": "FlashFreq=80,UploadSpeed=921600,DebugLevel=none",
|
||||||
|
"port": "COM8"
|
||||||
}
|
}
|
8
main/.vscode/c_cpp_properties.json
vendored
8
main/.vscode/c_cpp_properties.json
vendored
@ -3,12 +3,14 @@
|
|||||||
{
|
{
|
||||||
"name": "Win32",
|
"name": "Win32",
|
||||||
"includePath": [
|
"includePath": [
|
||||||
|
"C:\\Users\\Scott\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\**",
|
||||||
|
"C:\\Users\\Scott\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\1.0.2\\**",
|
||||||
|
"C:\\Users\\Scott\\AppData\\Local\\Arduino15\\packages\\esp8266\\tools\\**",
|
||||||
|
"C:\\Users\\Scott\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\2.5.2\\**",
|
||||||
"C:\\Program Files (x86)\\Arduino\\tools\\**",
|
"C:\\Program Files (x86)\\Arduino\\tools\\**",
|
||||||
"C:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\**"
|
"C:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\**"
|
||||||
],
|
],
|
||||||
"forcedInclude": [
|
"forcedInclude": [],
|
||||||
"C:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino\\Arduino.h"
|
|
||||||
],
|
|
||||||
"intelliSenseMode": "msvc-x64",
|
"intelliSenseMode": "msvc-x64",
|
||||||
"compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.14.26428/bin/Hostx64/x64/cl.exe",
|
"compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.14.26428/bin/Hostx64/x64/cl.exe",
|
||||||
"cStandard": "c11",
|
"cStandard": "c11",
|
||||||
|
@ -43,7 +43,7 @@ void ttn_register(void (*callback)(uint8_t message));
|
|||||||
#define DEBUG_PORT Serial // Serial debug port
|
#define DEBUG_PORT Serial // Serial debug port
|
||||||
#define SERIAL_BAUD 115200 // Serial debug baud rate
|
#define SERIAL_BAUD 115200 // Serial debug baud rate
|
||||||
#define SLEEP_BETWEEN_MESSAGES 0 // Do sleep between messages
|
#define SLEEP_BETWEEN_MESSAGES 0 // Do sleep between messages
|
||||||
#define SEND_INTERVAL 30000 // Sleep for these many millis
|
#define SEND_INTERVAL 10000 // Sleep for these many millis
|
||||||
#define MESSAGE_TO_SLEEP_DELAY 5000 // Time after message before going to sleep
|
#define MESSAGE_TO_SLEEP_DELAY 5000 // Time after message before going to sleep
|
||||||
#define LOGO_DELAY 5000 // Time to show logo on first boot
|
#define LOGO_DELAY 5000 // Time to show logo on first boot
|
||||||
#define LORAWAN_PORT 10 // Port the messages will be sent to
|
#define LORAWAN_PORT 10 // Port the messages will be sent to
|
||||||
|
@ -13,12 +13,12 @@ Credentials file
|
|||||||
#ifdef USE_ABP
|
#ifdef USE_ABP
|
||||||
|
|
||||||
// LoRaWAN NwkSKey, network session key
|
// LoRaWAN NwkSKey, network session key
|
||||||
static const u1_t PROGMEM NWKSKEY[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
static const u1_t PROGMEM NWKSKEY[16] = { 0xD1, 0x8A, 0x1F, 0x4D, 0x74, 0x69, 0x46, 0xE9, 0x20, 0x8F, 0x05, 0xE8, 0xFC, 0xB4, 0x5F, 0xC5 };
|
||||||
// LoRaWAN AppSKey, application session key
|
// LoRaWAN AppSKey, application session key
|
||||||
static const u1_t PROGMEM APPSKEY[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
static const u1_t PROGMEM APPSKEY[16] = { 0x42, 0x42, 0xD0, 0xA2, 0xAB, 0xA8, 0x23, 0x93, 0x19, 0x80, 0x9F, 0x90, 0xB3, 0xB4, 0x82, 0x34 };
|
||||||
// LoRaWAN end-device address (DevAddr)
|
// LoRaWAN end-device address (DevAddr)
|
||||||
// This has to be unique for every node
|
// This has to be unique for every node
|
||||||
static const u4_t DEVADDR = 0x00000000;
|
static const u4_t DEVADDR = 0x26041F5B;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -28,15 +28,15 @@ Credentials file
|
|||||||
// first. When copying an EUI from ttnctl output, this means to reverse
|
// first. When copying an EUI from ttnctl output, this means to reverse
|
||||||
// the bytes. For TTN issued EUIs the last bytes should be 0x00, 0x00,
|
// the bytes. For TTN issued EUIs the last bytes should be 0x00, 0x00,
|
||||||
// 0x00.
|
// 0x00.
|
||||||
static const u1_t PROGMEM APPEUI[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
static const u1_t PROGMEM APPEUI[8] = { 0x70, 0xB3, 0xD5, 0x7E, 0xD0, 0x01, 0xE9, 0x44 };
|
||||||
|
|
||||||
// This should also be in little endian format, see above.
|
// This should also be in little endian format, see above.
|
||||||
static const u1_t PROGMEM DEVEUI[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
static const u1_t PROGMEM DEVEUI[8] = { 0xCB, 0xBE, 0xEB, 0x0A, 0xDD, 0xEA, 0xDB, 0xEE };
|
||||||
|
|
||||||
// This key should be in big endian format (or, since it is not really a
|
// This key should be in big endian format (or, since it is not really a
|
||||||
// number but a block of memory, endianness does not really apply). In
|
// number but a block of memory, endianness does not really apply). In
|
||||||
// practice, a key taken from ttnctl can be copied as-is.
|
// practice, a key taken from ttnctl can be copied as-is.
|
||||||
// The key shown here is the semtech default key.
|
// The key shown here is the semtech default key.
|
||||||
static const u1_t PROGMEM APPKEY[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
static const u1_t PROGMEM APPKEY[16] = { 0x0B, 0xF2, 0xAC, 0xB0, 0x6A, 0xFF, 0x27, 0x1E, 0x89, 0x65, 0x7C, 0xBD, 0x99, 0x9F, 0x7F, 0xE9 };
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,68 +0,0 @@
|
|||||||
/*
|
|
||||||
|
|
||||||
Packet Processor
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef USE_CAYENNE
|
|
||||||
// CAYENNE DF
|
|
||||||
static uint8_t txBuffer[11] = {0x03, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
|
||||||
void buildPacket(uint8_t txBuffer[11])
|
|
||||||
{
|
|
||||||
LatitudeBinary = ((_gps.location.lat() + 90) / 180.0) * 16777215;
|
|
||||||
LongitudeBinary = ((_gps.location.lng() + 180) / 360.0) * 16777215;
|
|
||||||
int32_t Height = gps.altitude.meters() * 100;
|
|
||||||
|
|
||||||
sprintf(t, "Lat: %f", _gps.location.lat());
|
|
||||||
Serial.println(t);
|
|
||||||
sprintf(t, "Lng: %f", _gps.location.lng());
|
|
||||||
Serial.println(t);
|
|
||||||
sprintf(t, "Alt: %f", _gps.altitude.meters());
|
|
||||||
Serial.println(t);
|
|
||||||
|
|
||||||
txBuffer[2] = ( LatitudeBinary >> 16 ) & 0xFF;
|
|
||||||
txBuffer[3] = ( LatitudeBinary >> 8 ) & 0xFF;
|
|
||||||
txBuffer[4] = LatitudeBinary & 0xFF;
|
|
||||||
|
|
||||||
txBuffer[5] = ( LongitudeBinary >> 16 ) & 0xFF;
|
|
||||||
txBuffer[6] = ( LongitudeBinary >> 8 ) & 0xFF;
|
|
||||||
txBuffer[7] = LongitudeBinary & 0xFF;
|
|
||||||
|
|
||||||
txBuffer[8] = Height >> 16;
|
|
||||||
txBuffer[9] = Height >> 8;
|
|
||||||
txBuffer[10] = Height;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
uint8_t txBuffer[9];
|
|
||||||
|
|
||||||
void buildPacket(uint8_t txBuffer[9])
|
|
||||||
{
|
|
||||||
LatitudeBinary = ((_gps.location.lat() + 90) / 180.0) * 16777215;
|
|
||||||
LongitudeBinary = ((_gps.location.lng() + 180) / 360.0) * 16777215;
|
|
||||||
|
|
||||||
sprintf(t, "Lat: %f", _gps.location.lat());
|
|
||||||
Serial.println(t);
|
|
||||||
|
|
||||||
sprintf(t, "Lng: %f", _gps.location.lng());
|
|
||||||
Serial.println(t);
|
|
||||||
|
|
||||||
txBuffer[0] = ( LatitudeBinary >> 16 ) & 0xFF;
|
|
||||||
txBuffer[1] = ( LatitudeBinary >> 8 ) & 0xFF;
|
|
||||||
txBuffer[2] = LatitudeBinary & 0xFF;
|
|
||||||
|
|
||||||
txBuffer[3] = ( LongitudeBinary >> 16 ) & 0xFF;
|
|
||||||
txBuffer[4] = ( LongitudeBinary >> 8 ) & 0xFF;
|
|
||||||
txBuffer[5] = LongitudeBinary & 0xFF;
|
|
||||||
|
|
||||||
altitudeGps = _gps.altitude.meters();
|
|
||||||
txBuffer[6] = ( altitudeGps >> 8 ) & 0xFF;
|
|
||||||
txBuffer[7] = altitudeGps & 0xFF;
|
|
||||||
|
|
||||||
hdopGps = _gps.hdop.value()/10;
|
|
||||||
txBuffer[8] = hdopGps & 0xFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
56
main/gps.ino
56
main/gps.ino
@ -62,5 +62,61 @@ static void gps_loop() {
|
|||||||
_gps.encode(_serial_gps.read());
|
_gps.encode(_serial_gps.read());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifdef USE_CAYENNE
|
||||||
|
// CAYENNE DF
|
||||||
|
void buildPacket(uint8_t txBuffer[11])
|
||||||
|
{
|
||||||
|
LatitudeBinary = ((_gps.location.lat() + 90) / 180.0) * 16777215;
|
||||||
|
LongitudeBinary = ((_gps.location.lng() + 180) / 360.0) * 16777215;
|
||||||
|
int32_t Height = _gps.altitude.meters() * 100;
|
||||||
|
|
||||||
|
sprintf(t, "Lat: %f", _gps.location.lat());
|
||||||
|
Serial.println(t);
|
||||||
|
sprintf(t, "Lng: %f", _gps.location.lng());
|
||||||
|
Serial.println(t);
|
||||||
|
sprintf(t, "Alt: %f", _gps.altitude.meters());
|
||||||
|
Serial.println(t);
|
||||||
|
|
||||||
|
txBuffer[2] = ( LatitudeBinary >> 16 ) & 0xFF;
|
||||||
|
txBuffer[3] = ( LatitudeBinary >> 8 ) & 0xFF;
|
||||||
|
txBuffer[4] = LatitudeBinary & 0xFF;
|
||||||
|
|
||||||
|
txBuffer[5] = ( LongitudeBinary >> 16 ) & 0xFF;
|
||||||
|
txBuffer[6] = ( LongitudeBinary >> 8 ) & 0xFF;
|
||||||
|
txBuffer[7] = LongitudeBinary & 0xFF;
|
||||||
|
|
||||||
|
txBuffer[8] = Height >> 16;
|
||||||
|
txBuffer[9] = Height >> 8;
|
||||||
|
txBuffer[10] = Height;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
uint8_t txBuffer[9];
|
||||||
|
|
||||||
|
void buildPacket(uint8_t txBuffer[9])
|
||||||
|
{
|
||||||
|
LatitudeBinary = ((_gps.location.lat() + 90) / 180.0) * 16777215;
|
||||||
|
LongitudeBinary = ((_gps.location.lng() + 180) / 360.0) * 16777215;
|
||||||
|
|
||||||
|
sprintf(t, "Lat: %f", _gps.location.lat());
|
||||||
|
Serial.println(t);
|
||||||
|
|
||||||
|
sprintf(t, "Lng: %f", _gps.location.lng());
|
||||||
|
Serial.println(t);
|
||||||
|
|
||||||
|
txBuffer[0] = ( LatitudeBinary >> 16 ) & 0xFF;
|
||||||
|
txBuffer[1] = ( LatitudeBinary >> 8 ) & 0xFF;
|
||||||
|
txBuffer[2] = LatitudeBinary & 0xFF;
|
||||||
|
|
||||||
|
txBuffer[3] = ( LongitudeBinary >> 16 ) & 0xFF;
|
||||||
|
txBuffer[4] = ( LongitudeBinary >> 8 ) & 0xFF;
|
||||||
|
txBuffer[5] = LongitudeBinary & 0xFF;
|
||||||
|
|
||||||
|
altitudeGps = _gps.altitude.meters();
|
||||||
|
txBuffer[6] = ( altitudeGps >> 8 ) & 0xFF;
|
||||||
|
txBuffer[7] = altitudeGps & 0xFF;
|
||||||
|
|
||||||
|
hdopGps = _gps.hdop.value()/10;
|
||||||
|
txBuffer[8] = hdopGps & 0xFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
// inside the project_config folder.
|
// inside the project_config folder.
|
||||||
|
|
||||||
// Make sure only one of the following is defined (CFG_us915 or CFG_eu868)
|
// Make sure only one of the following is defined (CFG_us915 or CFG_eu868)
|
||||||
#define CFG_us915 1
|
#define CFG_aus915 1
|
||||||
//#define CFG_eu868 1
|
//#define CFG_eu868 1
|
||||||
|
|
||||||
#define CFG_sx1276_radio 1
|
#define CFG_sx1276_radio 1
|
||||||
|
@ -22,8 +22,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "configuration.h"
|
#include "configuration.h"
|
||||||
#include <rom/rtc.h>
|
#include "rom/rtc.h"
|
||||||
#include "dataformats.h"
|
|
||||||
|
|
||||||
|
|
||||||
// Message counter, stored in RTC memory, survives deep sleep
|
// Message counter, stored in RTC memory, survives deep sleep
|
||||||
@ -31,51 +30,15 @@ RTC_DATA_ATTR uint32_t count = 0;
|
|||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Submodules
|
// Submodules
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
#ifdef USE_GPS 1
|
|
||||||
#include <TinyGPS++.h>
|
#include <TinyGPS++.h>
|
||||||
|
|
||||||
uint32_t LatitudeBinary, LongitudeBinary;
|
#ifdef USE_CAYENNE
|
||||||
uint16_t altitudeGps;
|
// CAYENNE DF
|
||||||
uint8_t hdopGps;
|
static uint8_t txBuffer[11] = {0x03, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||||
char t[32]; // used to sprintf for Serial output
|
#else
|
||||||
|
uint8_t txBuffer[9];
|
||||||
TinyGPSPlus _gps;
|
|
||||||
HardwareSerial _serial_gps(GPS_SERIAL_NUM);
|
|
||||||
|
|
||||||
void gps_time(char * buffer, uint8_t size) {
|
|
||||||
snprintf(buffer, size, "%02d:%02d:%02d", _gps.time.hour(), _gps.time.minute(), _gps.time.second());
|
|
||||||
}
|
|
||||||
|
|
||||||
float gps_latitude() {
|
|
||||||
return _gps.location.lat();
|
|
||||||
}
|
|
||||||
|
|
||||||
float gps_longitude() {
|
|
||||||
return _gps.location.lng();
|
|
||||||
}
|
|
||||||
|
|
||||||
float gps_altitude() {
|
|
||||||
return _gps.altitude.meters();
|
|
||||||
}
|
|
||||||
|
|
||||||
float gps_hdop() {
|
|
||||||
return _gps.hdop.hdop();
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t gps_sats() {
|
|
||||||
return _gps.satellites.value();
|
|
||||||
}
|
|
||||||
|
|
||||||
void gps_setup() {
|
|
||||||
_serial_gps.begin(GPS_BAUDRATE, SERIAL_8N1, GPS_RX_PIN, GPS_TX_PIN);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void gps_loop() {
|
|
||||||
while (_serial_gps.available()) {
|
|
||||||
_gps.encode(_serial_gps.read());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Application
|
// Application
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
@ -218,6 +181,7 @@ void loop() {
|
|||||||
if (0 < gps_hdop() && gps_hdop() < 50 && gps_latitude() != 0 && gps_longitude() != 0) {
|
if (0 < gps_hdop() && gps_hdop() < 50 && gps_latitude() != 0 && gps_longitude() != 0) {
|
||||||
last = millis();
|
last = millis();
|
||||||
first = false;
|
first = false;
|
||||||
|
Serial.println("TRANSMITTING");
|
||||||
send();
|
send();
|
||||||
} else {
|
} else {
|
||||||
if (first) {
|
if (first) {
|
||||||
|
@ -155,6 +155,14 @@ void ttn_join() {
|
|||||||
// https://github.com/TheThingsNetwork/gateway-conf/blob/master/US-global_conf.json
|
// https://github.com/TheThingsNetwork/gateway-conf/blob/master/US-global_conf.json
|
||||||
LMIC_selectSubBand(1);
|
LMIC_selectSubBand(1);
|
||||||
|
|
||||||
|
#elif defined(CFG_au915)
|
||||||
|
Serial.println("AU_915");
|
||||||
|
// NA-US channels 0-71 are configured automatically
|
||||||
|
// but only one group of 8 should (a subband) should be active
|
||||||
|
// TTN recommends the second sub band, 1 in a zero based count.
|
||||||
|
// https://github.com/TheThingsNetwork/gateway-conf/blob/master/US-global_conf.json
|
||||||
|
LMIC_selectSubBand(1);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// If using a mono-channel gateway disable all channels
|
// If using a mono-channel gateway disable all channels
|
||||||
@ -210,6 +218,7 @@ void ttn_send(uint8_t * data, uint8_t data_size, uint8_t port, bool confirmed){
|
|||||||
|
|
||||||
// Prepare upstream data transmission at the next possible time.
|
// Prepare upstream data transmission at the next possible time.
|
||||||
// Parameters are port, data, length, confirmed
|
// Parameters are port, data, length, confirmed
|
||||||
|
|
||||||
LMIC_setTxData2(port, data, data_size, confirmed ? 1 : 0);
|
LMIC_setTxData2(port, data, data_size, confirmed ? 1 : 0);
|
||||||
|
|
||||||
_ttn_callback(EV_QUEUED);
|
_ttn_callback(EV_QUEUED);
|
||||||
|
Loading…
Reference in New Issue
Block a user