Merge pull request #2 from Scobber/master

Add LPP option for GPS data,
This commit is contained in:
Kyle Gabriel 2019-08-23 09:43:47 -04:00 committed by GitHub
commit a2b2d3411d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 192 additions and 130 deletions

View File

@ -26,7 +26,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <Arduino.h>
#include <lmic.h>
void ttn_register(void (*callback)(uint8_t message));
// -----------------------------------------------------------------------------
@ -40,10 +39,11 @@ void ttn_register(void (*callback)(uint8_t message));
// Configuration
// -----------------------------------------------------------------------------
#define USE_CAYENNE
#define DEBUG_PORT Serial // Serial debug port
#define SERIAL_BAUD 115200 // Serial debug baud rate
#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 LOGO_DELAY 5000 // Time to show logo on first boot
#define LORAWAN_PORT 10 // Port the messages will be sent to
@ -94,6 +94,7 @@ void ttn_register(void (*callback)(uint8_t message));
#define GPS_RX_PIN 12
#define GPS_TX_PIN 15
#define GPS_BAUDRATE 9600
#define USE_GPS 1
// -----------------------------------------------------------------------------
// LoRa SPI

View File

@ -62,6 +62,44 @@ static void gps_loop() {
_gps.encode(_serial_gps.read());
}
}
#ifdef USE_CAYENNE
// CAYENNE DF
void buildPacket(uint8_t txBuffer[11])
{
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);
int32_t lat = _gps.location.lat() * 10000;
int32_t lon = _gps.location.lng() * 10000;
int32_t alt = _gps.altitude.meters() * 100;
txBuffer[2] = lat >> 16;
txBuffer[3] = lat >> 8;
txBuffer[4] = lat;
txBuffer[5] = lon >> 16;
txBuffer[6] = lon >> 8;
txBuffer[7] = lon;
txBuffer[8] = alt >> 16;
txBuffer[9] = alt >> 8;
txBuffer[10] = alt;
/*
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])
{
@ -89,3 +127,5 @@ void buildPacket(uint8_t txBuffer[9])
hdopGps = _gps.hdop.value()/10;
txBuffer[8] = hdopGps & 0xFF;
}
#endif

View File

@ -6,7 +6,8 @@
// inside the project_config folder.
// Make sure only one of the following is defined (CFG_us915 or CFG_eu868)
#define CFG_us915 1
#define CFG_au915 1
//#define CFG_au923 1
//#define CFG_eu868 1
#define CFG_sx1276_radio 1

View File

@ -1,33 +1,43 @@
/*
Main module
Main module
# Modified by Kyle T. Gabriel to fix issue with incorrect GPS data for TTNMapper
# Modified by Kyle T. Gabriel to fix issue with incorrect GPS data for TTNMapper
Copyright (C) 2018 by Xose Pérez <xose dot perez at gmail dot com>
Copyright (C) 2018 by Xose Pérez <xose dot perez at gmail dot com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "configuration.h"
#include <rom/rtc.h>
#include "rom/rtc.h"
uint8_t txBuffer[9];
// Message counter, stored in RTC memory, survives deep sleep
RTC_DATA_ATTR uint32_t count = 0;
// -----------------------------------------------------------------------------
// Submodules
// -----------------------------------------------------------------------------
#include <TinyGPS++.h>
#ifdef USE_CAYENNE
// CAYENNE DF
static uint8_t txBuffer[11] = {0x03, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
#else
uint8_t txBuffer[9];
#endif
// -----------------------------------------------------------------------------
// Application
@ -44,11 +54,11 @@ void send() {
buildPacket(txBuffer);
#if LORAWAN_CONFIRMED_EVERY > 0
#if LORAWAN_CONFIRMED_EVERY > 0
bool confirmed = (count % LORAWAN_CONFIRMED_EVERY == 0);
#else
#else
bool confirmed = false;
#endif
#endif
ttn_cnt(count);
ttn_send(txBuffer, sizeof(txBuffer), LORAWAN_PORT, confirmed);
@ -57,7 +67,7 @@ void send() {
}
void sleep() {
#if SLEEP_BETWEEN_MESSAGES
#if SLEEP_BETWEEN_MESSAGES
// Show the going to sleep message on the screen
char buffer[20];
@ -78,7 +88,7 @@ void sleep() {
uint32_t sleep_for = (millis() < SEND_INTERVAL) ? SEND_INTERVAL - millis() : SEND_INTERVAL;
sleep_millis(sleep_for);
#endif
#endif
}
void callback(uint8_t message) {
@ -106,7 +116,7 @@ void callback(uint8_t message) {
ttn_response(data, len);
char buffer[6];
for (uint8_t i=0; i<len; i++) {
for (uint8_t i = 0; i < len; i++) {
snprintf(buffer, sizeof(buffer), "%02X", data[i]);
screen_print(buffer);
}
@ -120,9 +130,9 @@ uint32_t get_count() {
void setup() {
// Debug
#ifdef DEBUG_PORT
#ifdef DEBUG_PORT
DEBUG_PORT.begin(SERIAL_BAUD);
#endif
#endif
// Buttons & LED
pinMode(BUTTON_PIN, INPUT_PULLUP);
@ -171,6 +181,7 @@ void loop() {
if (0 < gps_hdop() && gps_hdop() < 50 && gps_latitude() != 0 && gps_longitude() != 0) {
last = millis();
first = false;
Serial.println("TRANSMITTING");
send();
} else {
if (first) {

View File

@ -155,6 +155,14 @@ void ttn_join() {
// https://github.com/TheThingsNetwork/gateway-conf/blob/master/US-global_conf.json
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
// 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.
// Parameters are port, data, length, confirmed
LMIC_setTxData2(port, data, data_size, confirmed ? 1 : 0);
_ttn_callback(EV_QUEUED);