mirror of
https://github.com/0015/ThatProject.git
synced 2026-01-12 09:17:42 +03:00
LoRa, GPS Data showing on the Map
This commit is contained in:
136
ESP32-LoRa/LoRa_GPS_Data_Viewer/Demo_SX1262_Receiver/Demo_SX1262_Receiver.ino
Executable file
136
ESP32-LoRa/LoRa_GPS_Data_Viewer/Demo_SX1262_Receiver/Demo_SX1262_Receiver.ino
Executable file
@@ -0,0 +1,136 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////
|
||||||
|
/*
|
||||||
|
[Viewer] LoRa, GPS Data showing on the Map
|
||||||
|
For More Information: https://youtu.be/zJvDw4UVDLc
|
||||||
|
Created by Eric N. (ThatProject)
|
||||||
|
*/
|
||||||
|
/////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <TinyGPS++.h>
|
||||||
|
#include <ArduinoJson.h>
|
||||||
|
#include <RadioLib.h>
|
||||||
|
#include "boards.h"
|
||||||
|
#define ERR_NONE 0
|
||||||
|
|
||||||
|
SX1262 radio = new Module(RADIO_CS_PIN, RADIO_DIO1_PIN, RADIO_RST_PIN, RADIO_BUSY_PIN);
|
||||||
|
TinyGPSPlus gps;
|
||||||
|
volatile bool operationFlag = false;
|
||||||
|
volatile bool enableInterrupt = true;
|
||||||
|
const long GPS_FETCHING_TIME_INTERVAL = 2000;
|
||||||
|
unsigned long gpsLastMillis;
|
||||||
|
StaticJsonDocument<512> doc;
|
||||||
|
int statusCode = ERR_NONE;
|
||||||
|
|
||||||
|
void setFlag(void)
|
||||||
|
{
|
||||||
|
if (!enableInterrupt) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
operationFlag = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setup()
|
||||||
|
{
|
||||||
|
initBoard();
|
||||||
|
// When the power is turned on, a delay is required.
|
||||||
|
delay(1500);
|
||||||
|
|
||||||
|
// initialize SX1262 with default settings
|
||||||
|
Serial.print(F("[SX1262] Initializing ... "));
|
||||||
|
statusCode = radio.begin(LoRa_frequency);
|
||||||
|
Serial.print(F("LoRa_frequency:" ));
|
||||||
|
Serial.println(LoRa_frequency);
|
||||||
|
|
||||||
|
if (statusCode == ERR_NONE) {
|
||||||
|
Serial.println(F("success!"));
|
||||||
|
} else {
|
||||||
|
Serial.print(F("failed, code "));
|
||||||
|
Serial.println(statusCode);
|
||||||
|
while (true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// set the function that will be called
|
||||||
|
// when new packet is received
|
||||||
|
radio.setDio1Action(setFlag);
|
||||||
|
|
||||||
|
// start listening for LoRa packets
|
||||||
|
Serial.print(F("[SX1262] Starting to listen ... "));
|
||||||
|
statusCode = radio.startReceive();
|
||||||
|
if (statusCode == ERR_NONE) {
|
||||||
|
Serial.println(F("success!"));
|
||||||
|
} else {
|
||||||
|
Serial.print(F("failed, code "));
|
||||||
|
Serial.println(statusCode);
|
||||||
|
while (true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void loop()
|
||||||
|
{
|
||||||
|
// check if the flag is set
|
||||||
|
if (operationFlag) {
|
||||||
|
// disable the interrupt service routine while
|
||||||
|
// processing the data
|
||||||
|
enableInterrupt = false;
|
||||||
|
// reset flag
|
||||||
|
operationFlag = false;
|
||||||
|
|
||||||
|
|
||||||
|
String str;
|
||||||
|
statusCode = radio.readData(str);
|
||||||
|
|
||||||
|
if (statusCode == ERR_NONE) {
|
||||||
|
Serial.println(str);
|
||||||
|
}
|
||||||
|
radio.startReceive();
|
||||||
|
|
||||||
|
enableInterrupt = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (millis() - gpsLastMillis >= GPS_FETCHING_TIME_INTERVAL)
|
||||||
|
{
|
||||||
|
gpsLastMillis = millis();
|
||||||
|
fetchingGPS();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void fetchingGPS(){
|
||||||
|
doc.clear();
|
||||||
|
doc["appid"] = "LoRa_GPS";
|
||||||
|
doc["system"]["Name"] = "Transmitter";
|
||||||
|
doc["system"]["RSSI"] = radio.getRSSI();
|
||||||
|
doc["system"]["SNR"] = radio.getSNR();
|
||||||
|
doc["system"]["Status"] = statusCode;
|
||||||
|
doc["system"]["Battery"]["Connection"] = PMU.isBatteryConnect();
|
||||||
|
doc["system"]["Battery"]["Voltage"] = String((PMU.getBattVoltage() / 1000),2);
|
||||||
|
doc["location"]["lat"] = gps.location.lat();
|
||||||
|
doc["location"]["lng"] = gps.location.lng();
|
||||||
|
doc["satellites"] = gps.satellites.value();
|
||||||
|
doc["altitude"] = String((gps.altitude.feet() / 3.2808),2);
|
||||||
|
char gpsDateTime[20];
|
||||||
|
sprintf(gpsDateTime, "%04d-%02d-%02d %02d:%02d:%02d",
|
||||||
|
gps.date.year(),
|
||||||
|
gps.date.month(),
|
||||||
|
gps.date.day(),
|
||||||
|
gps.time.hour(),
|
||||||
|
gps.time.minute(),
|
||||||
|
gps.time.second());
|
||||||
|
doc["gpsDateTime"]= gpsDateTime;
|
||||||
|
|
||||||
|
String output;
|
||||||
|
serializeJson(doc, output);
|
||||||
|
Serial.println(output);
|
||||||
|
smartDelay(1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void smartDelay(unsigned long ms)
|
||||||
|
{
|
||||||
|
unsigned long start = millis();
|
||||||
|
do
|
||||||
|
{
|
||||||
|
while (Serial1.available())
|
||||||
|
gps.encode(Serial1.read());
|
||||||
|
} while (millis() - start < ms);
|
||||||
|
}
|
||||||
140
ESP32-LoRa/LoRa_GPS_Data_Viewer/Demo_SX1262_Receiver/boards.h
Executable file
140
ESP32-LoRa/LoRa_GPS_Data_Viewer/Demo_SX1262_Receiver/boards.h
Executable file
@@ -0,0 +1,140 @@
|
|||||||
|
#include <Arduino.h>
|
||||||
|
#include <SPI.h>
|
||||||
|
#include <Wire.h>
|
||||||
|
#include "utilities.h"
|
||||||
|
|
||||||
|
#ifdef HAS_SDCARD
|
||||||
|
#include <SD.h>
|
||||||
|
#include <FS.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(LILYGO_TBeam_V1_0) || defined(LILYGO_TBeam_V1_1)
|
||||||
|
#include <axp20x.h>
|
||||||
|
AXP20X_Class PMU;
|
||||||
|
|
||||||
|
bool initPMU()
|
||||||
|
{
|
||||||
|
if (PMU.begin(Wire, AXP192_SLAVE_ADDRESS) == AXP_FAIL) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* The charging indicator can be turned on or off
|
||||||
|
* * * */
|
||||||
|
// PMU.setChgLEDMode(LED_BLINK_4HZ);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The default ESP32 power supply has been turned on,
|
||||||
|
* no need to set, please do not set it, if it is turned off,
|
||||||
|
* it will not be able to program
|
||||||
|
*
|
||||||
|
* PMU.setDCDC3Voltage(3300);
|
||||||
|
* PMU.setPowerOutPut(AXP192_DCDC3, AXP202_ON);
|
||||||
|
*
|
||||||
|
* * * */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Turn off unused power sources to save power
|
||||||
|
* **/
|
||||||
|
|
||||||
|
PMU.setPowerOutPut(AXP192_DCDC1, AXP202_OFF);
|
||||||
|
PMU.setPowerOutPut(AXP192_DCDC2, AXP202_OFF);
|
||||||
|
PMU.setPowerOutPut(AXP192_LDO2, AXP202_OFF);
|
||||||
|
PMU.setPowerOutPut(AXP192_LDO3, AXP202_OFF);
|
||||||
|
PMU.setPowerOutPut(AXP192_EXTEN, AXP202_OFF);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set the power of LoRa and GPS module to 3.3V
|
||||||
|
**/
|
||||||
|
PMU.setLDO2Voltage(3300); //LoRa VDD
|
||||||
|
PMU.setLDO3Voltage(3300); //GPS VDD
|
||||||
|
PMU.setDCDC1Voltage(3300); //3.3V Pin next to 21 and 22 is controlled by DCDC1
|
||||||
|
|
||||||
|
PMU.setPowerOutPut(AXP192_DCDC1, AXP202_ON);
|
||||||
|
PMU.setPowerOutPut(AXP192_LDO2, AXP202_ON);
|
||||||
|
PMU.setPowerOutPut(AXP192_LDO3, AXP202_ON);
|
||||||
|
|
||||||
|
pinMode(PMU_IRQ, INPUT_PULLUP);
|
||||||
|
attachInterrupt(PMU_IRQ, [] {
|
||||||
|
// pmu_irq = true;
|
||||||
|
}, FALLING);
|
||||||
|
|
||||||
|
PMU.adc1Enable(AXP202_VBUS_VOL_ADC1 |
|
||||||
|
AXP202_VBUS_CUR_ADC1 |
|
||||||
|
AXP202_BATT_CUR_ADC1 |
|
||||||
|
AXP202_BATT_VOL_ADC1,
|
||||||
|
AXP202_ON);
|
||||||
|
|
||||||
|
PMU.enableIRQ(AXP202_VBUS_REMOVED_IRQ |
|
||||||
|
AXP202_VBUS_CONNECT_IRQ |
|
||||||
|
AXP202_BATT_REMOVED_IRQ |
|
||||||
|
AXP202_BATT_CONNECT_IRQ,
|
||||||
|
AXP202_ON);
|
||||||
|
PMU.clearIRQ();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void disablePeripherals()
|
||||||
|
{
|
||||||
|
PMU.setPowerOutPut(AXP192_DCDC1, AXP202_OFF);
|
||||||
|
PMU.setPowerOutPut(AXP192_LDO2, AXP202_OFF);
|
||||||
|
PMU.setPowerOutPut(AXP192_LDO3, AXP202_OFF);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define initPMU()
|
||||||
|
#define disablePeripherals()
|
||||||
|
#endif
|
||||||
|
|
||||||
|
SPIClass SDSPI(HSPI);
|
||||||
|
|
||||||
|
|
||||||
|
void initBoard()
|
||||||
|
{
|
||||||
|
Serial.begin(115200);
|
||||||
|
Serial.println("initBoard");
|
||||||
|
SPI.begin(RADIO_SCLK_PIN, RADIO_MISO_PIN, RADIO_MOSI_PIN);
|
||||||
|
Wire.begin(I2C_SDA, I2C_SCL);
|
||||||
|
|
||||||
|
#ifdef HAS_GPS
|
||||||
|
Serial1.begin(GPS_BAUD_RATE, SERIAL_8N1, GPS_RX_PIN, GPS_TX_PIN);
|
||||||
|
Serial.println("init GPS");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if OLED_RST
|
||||||
|
pinMode(OLED_RST, OUTPUT);
|
||||||
|
digitalWrite(OLED_RST, HIGH); delay(20);
|
||||||
|
digitalWrite(OLED_RST, LOW); delay(20);
|
||||||
|
digitalWrite(OLED_RST, HIGH); delay(20);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
initPMU();
|
||||||
|
|
||||||
|
#ifdef HAS_SDCARD
|
||||||
|
SDSPI.begin(SDCARD_SCLK, SDCARD_MISO, SDCARD_MOSI, SDCARD_CS);
|
||||||
|
if (!SD.begin(SDCARD_CS, SDSPI)) {
|
||||||
|
Serial.println("setupSDCard FAIL");
|
||||||
|
} else {
|
||||||
|
uint32_t cardSize = SD.cardSize() / (1024 * 1024);
|
||||||
|
Serial.print("setupSDCard PASS . SIZE = ");
|
||||||
|
Serial.print(cardSize);
|
||||||
|
Serial.println(" MB");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef BOARD_LED
|
||||||
|
/*
|
||||||
|
* T-BeamV1.0, V1.1 LED defaults to low level as trun on,
|
||||||
|
* so it needs to be forced to pull up
|
||||||
|
* * * * */
|
||||||
|
#if LED_ON == LOW
|
||||||
|
gpio_hold_dis(GPIO_NUM_4);
|
||||||
|
#endif
|
||||||
|
pinMode(BOARD_LED, OUTPUT);
|
||||||
|
digitalWrite(BOARD_LED, LED_ON);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
151
ESP32-LoRa/LoRa_GPS_Data_Viewer/Demo_SX1262_Receiver/utilities.h
Executable file
151
ESP32-LoRa/LoRa_GPS_Data_Viewer/Demo_SX1262_Receiver/utilities.h
Executable file
@@ -0,0 +1,151 @@
|
|||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
// #define LILYGO_TBeam_V0_7
|
||||||
|
// #define LILYGO_TBeam_V1_0
|
||||||
|
#define LILYGO_TBeam_V1_1
|
||||||
|
// #define LILYGO_T3_V1_0
|
||||||
|
// #define LILYGO_T3_V1_6
|
||||||
|
// #define LILYGO_T3_V2_0
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The default program uses 868MHz,
|
||||||
|
* if you need to change it,
|
||||||
|
* please open this note and change to the frequency you need to test
|
||||||
|
* */
|
||||||
|
|
||||||
|
#define LoRa_frequency 915.0
|
||||||
|
|
||||||
|
|
||||||
|
#define UNUSE_PIN (0)
|
||||||
|
|
||||||
|
#if defined(LILYGO_TBeam_V0_7)
|
||||||
|
#define GPS_RX_PIN 12
|
||||||
|
#define GPS_TX_PIN 15
|
||||||
|
#define BUTTON_PIN 39
|
||||||
|
#define BUTTON_PIN_MASK GPIO_SEL_39
|
||||||
|
#define I2C_SDA 21
|
||||||
|
#define I2C_SCL 22
|
||||||
|
|
||||||
|
#define RADIO_SCLK_PIN 5
|
||||||
|
#define RADIO_MISO_PIN 19
|
||||||
|
#define RADIO_MOSI_PIN 27
|
||||||
|
#define RADIO_CS_PIN 18
|
||||||
|
#define RADIO_DI0_PIN 26
|
||||||
|
#define RADIO_RST_PIN 23
|
||||||
|
#define RADIO_DIO1_PIN 33
|
||||||
|
#define RADIO_BUSY_PIN 32
|
||||||
|
|
||||||
|
#define BOARD_LED 14
|
||||||
|
#define LED_ON HIGH
|
||||||
|
#define LED_OFF LOW
|
||||||
|
|
||||||
|
#define GPS_BAUD_RATE 9600
|
||||||
|
#define HAS_GPS
|
||||||
|
|
||||||
|
#elif defined(LILYGO_TBeam_V1_0) || defined(LILYGO_TBeam_V1_1)
|
||||||
|
|
||||||
|
#define GPS_RX_PIN 34
|
||||||
|
#define GPS_TX_PIN 12
|
||||||
|
#define BUTTON_PIN 38
|
||||||
|
#define BUTTON_PIN_MASK GPIO_SEL_38
|
||||||
|
#define I2C_SDA 21
|
||||||
|
#define I2C_SCL 22
|
||||||
|
#define PMU_IRQ 35
|
||||||
|
|
||||||
|
#define RADIO_SCLK_PIN 5
|
||||||
|
#define RADIO_MISO_PIN 19
|
||||||
|
#define RADIO_MOSI_PIN 27
|
||||||
|
#define RADIO_CS_PIN 18
|
||||||
|
#define RADIO_DI0_PIN 26
|
||||||
|
#define RADIO_RST_PIN 23
|
||||||
|
#define RADIO_DIO1_PIN 33
|
||||||
|
#define RADIO_BUSY_PIN 32
|
||||||
|
|
||||||
|
#define BOARD_LED 4
|
||||||
|
#define LED_ON LOW
|
||||||
|
#define LED_OFF HIGH
|
||||||
|
|
||||||
|
#define GPS_BAUD_RATE 9600
|
||||||
|
#define HAS_GPS
|
||||||
|
|
||||||
|
|
||||||
|
#elif defined(LILYGO_T3_V1_0)
|
||||||
|
#define I2C_SDA 4
|
||||||
|
#define I2C_SCL 15
|
||||||
|
#define OLED_RST 16
|
||||||
|
|
||||||
|
#define RADIO_SCLK_PIN 5
|
||||||
|
#define RADIO_MISO_PIN 19
|
||||||
|
#define RADIO_MOSI_PIN 27
|
||||||
|
#define RADIO_CS_PIN 18
|
||||||
|
#define RADIO_DI0_PIN 26
|
||||||
|
#define RADIO_RST_PIN 14
|
||||||
|
#define RADIO_DIO1_PIN 33
|
||||||
|
#define RADIO_BUSY_PIN 32
|
||||||
|
|
||||||
|
#define HAS_DISPLAY
|
||||||
|
|
||||||
|
#elif defined(LILYGO_T3_V1_6)
|
||||||
|
#define I2C_SDA 21
|
||||||
|
#define I2C_SCL 22
|
||||||
|
#define OLED_RST UNUSE_PIN
|
||||||
|
|
||||||
|
#define RADIO_SCLK_PIN 5
|
||||||
|
#define RADIO_MISO_PIN 19
|
||||||
|
#define RADIO_MOSI_PIN 27
|
||||||
|
#define RADIO_CS_PIN 18
|
||||||
|
#define RADIO_DI0_PIN 26
|
||||||
|
#define RADIO_RST_PIN 23
|
||||||
|
#define RADIO_DIO1_PIN 33
|
||||||
|
#define RADIO_BUSY_PIN 32
|
||||||
|
|
||||||
|
#define SDCARD_MOSI 15
|
||||||
|
#define SDCARD_MISO 2
|
||||||
|
#define SDCARD_SCLK 14
|
||||||
|
#define SDCARD_CS 13
|
||||||
|
|
||||||
|
#define BOARD_LED 25
|
||||||
|
#define LED_ON HIGH
|
||||||
|
|
||||||
|
#define ADC_PIN 35
|
||||||
|
|
||||||
|
#define HAS_SDCARD
|
||||||
|
#define HAS_DISPLAY
|
||||||
|
|
||||||
|
#elif defined(LILYGO_T3_V2_0)
|
||||||
|
#define I2C_SDA 21
|
||||||
|
#define I2C_SCL 22
|
||||||
|
#define OLED_RST UNUSE_PIN
|
||||||
|
|
||||||
|
#define RADIO_SCLK_PIN 5
|
||||||
|
#define RADIO_MISO_PIN 19
|
||||||
|
#define RADIO_MOSI_PIN 27
|
||||||
|
#define RADIO_CS_PIN 18
|
||||||
|
#define RADIO_DI0_PIN 26
|
||||||
|
#define RADIO_RST_PIN 14
|
||||||
|
#define RADIO_DIO1_PIN UNUSE_PIN
|
||||||
|
#define RADIO_BUSY_PIN UNUSE_PIN
|
||||||
|
|
||||||
|
#define SDCARD_MOSI 15
|
||||||
|
#define SDCARD_MISO 2
|
||||||
|
#define SDCARD_SCLK 14
|
||||||
|
#define SDCARD_CS 13
|
||||||
|
|
||||||
|
#define BOARD_LED 0
|
||||||
|
#define LED_ON LOW
|
||||||
|
|
||||||
|
#define HAS_SDCARD
|
||||||
|
|
||||||
|
#else
|
||||||
|
#error "Please select the version you purchased in utilities.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
132
ESP32-LoRa/LoRa_GPS_Data_Viewer/Demo_SX1262_Transmit/Demo_SX1262_Transmit.ino
Executable file
132
ESP32-LoRa/LoRa_GPS_Data_Viewer/Demo_SX1262_Transmit/Demo_SX1262_Transmit.ino
Executable file
@@ -0,0 +1,132 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////
|
||||||
|
/*
|
||||||
|
[Viewer] LoRa, GPS Data showing on the Map
|
||||||
|
For More Information: https://youtu.be/zJvDw4UVDLc
|
||||||
|
Created by Eric N. (ThatProject)
|
||||||
|
*/
|
||||||
|
/////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <TinyGPS++.h>
|
||||||
|
#include <ArduinoJson.h>
|
||||||
|
#include <RadioLib.h>
|
||||||
|
#include "boards.h"
|
||||||
|
#define ERR_NONE 0
|
||||||
|
|
||||||
|
SX1262 radio = new Module(RADIO_CS_PIN, RADIO_DIO1_PIN, RADIO_RST_PIN, RADIO_BUSY_PIN);
|
||||||
|
TinyGPSPlus gps;
|
||||||
|
|
||||||
|
int transmissionState = ERR_NONE;
|
||||||
|
volatile bool transmittedFlag = false;
|
||||||
|
volatile bool enableInterrupt = true;
|
||||||
|
unsigned long gpsLastMillis;
|
||||||
|
StaticJsonDocument<512> doc;
|
||||||
|
|
||||||
|
void setFlag(void)
|
||||||
|
{
|
||||||
|
if (!enableInterrupt) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
transmittedFlag = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setup()
|
||||||
|
{
|
||||||
|
initBoard();
|
||||||
|
// When the power is turned on, a delay is required.
|
||||||
|
delay(1500);
|
||||||
|
|
||||||
|
// initialize SX1262 with default settings
|
||||||
|
Serial.print(F("[SX1262] Initializing ... "));
|
||||||
|
int state = radio.begin(LoRa_frequency);
|
||||||
|
Serial.print(F("LoRa_frequency:" ));
|
||||||
|
Serial.println(LoRa_frequency);
|
||||||
|
|
||||||
|
if (state == ERR_NONE) {
|
||||||
|
Serial.println(F("success!"));
|
||||||
|
} else {
|
||||||
|
Serial.print(F("failed, code "));
|
||||||
|
Serial.println(state);
|
||||||
|
while (true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// set the function that will be called
|
||||||
|
// when packet transmission is finished
|
||||||
|
radio.setDio1Action(setFlag);
|
||||||
|
|
||||||
|
// start transmitting the first packet
|
||||||
|
Serial.print(F("[SX1262] Sending first packet ... "));
|
||||||
|
|
||||||
|
// you can transmit C-string or Arduino string up to
|
||||||
|
// 256 characters long
|
||||||
|
transmissionState = radio.startTransmit("***Sending First Packet!***");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void loop()
|
||||||
|
{
|
||||||
|
// check if the previous transmission finished
|
||||||
|
if (transmittedFlag) {
|
||||||
|
// disable the interrupt service routine while
|
||||||
|
// processing the data
|
||||||
|
enableInterrupt = false;
|
||||||
|
|
||||||
|
// reset flag
|
||||||
|
transmittedFlag = false;
|
||||||
|
|
||||||
|
if (transmissionState == ERR_NONE) {
|
||||||
|
// packet was successfully sent
|
||||||
|
Serial.println(F("transmission finished!"));
|
||||||
|
} else {
|
||||||
|
Serial.print(F("failed, code "));
|
||||||
|
Serial.println(transmissionState);
|
||||||
|
}
|
||||||
|
|
||||||
|
delay(1000);
|
||||||
|
fetchingGPS();
|
||||||
|
|
||||||
|
|
||||||
|
enableInterrupt = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void fetchingGPS(){
|
||||||
|
doc.clear();
|
||||||
|
doc["appid"] = "LoRa_GPS";
|
||||||
|
doc["system"]["Name"] = "Transmitter";
|
||||||
|
doc["system"]["RSSI"] = radio.getRSSI();
|
||||||
|
doc["system"]["SNR"] = radio.getSNR();
|
||||||
|
doc["system"]["Status"] = transmissionState;
|
||||||
|
doc["system"]["Battery"]["Connection"] = PMU.isBatteryConnect();
|
||||||
|
doc["system"]["Battery"]["Voltage"] = String((PMU.getBattVoltage() / 1000),2);
|
||||||
|
doc["location"]["lat"] = gps.location.lat();
|
||||||
|
doc["location"]["lng"] = gps.location.lng();
|
||||||
|
doc["satellites"] = gps.satellites.value();
|
||||||
|
doc["altitude"] = String((gps.altitude.feet() / 3.2808),2);
|
||||||
|
char gpsDateTime[20];
|
||||||
|
sprintf(gpsDateTime, "%04d-%02d-%02d %02d:%02d:%02d",
|
||||||
|
gps.date.year(),
|
||||||
|
gps.date.month(),
|
||||||
|
gps.date.day(),
|
||||||
|
gps.time.hour(),
|
||||||
|
gps.time.minute(),
|
||||||
|
gps.time.second());
|
||||||
|
doc["gpsDateTime"]= gpsDateTime;
|
||||||
|
|
||||||
|
String output;
|
||||||
|
serializeJson(doc, output);
|
||||||
|
Serial.println(output);
|
||||||
|
transmissionState = radio.startTransmit(output);
|
||||||
|
smartDelay(1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void smartDelay(unsigned long ms)
|
||||||
|
{
|
||||||
|
unsigned long start = millis();
|
||||||
|
do
|
||||||
|
{
|
||||||
|
while (Serial1.available())
|
||||||
|
gps.encode(Serial1.read());
|
||||||
|
} while (millis() - start < ms);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
138
ESP32-LoRa/LoRa_GPS_Data_Viewer/Demo_SX1262_Transmit/boards.h
Executable file
138
ESP32-LoRa/LoRa_GPS_Data_Viewer/Demo_SX1262_Transmit/boards.h
Executable file
@@ -0,0 +1,138 @@
|
|||||||
|
#include <Arduino.h>
|
||||||
|
#include <SPI.h>
|
||||||
|
#include <Wire.h>
|
||||||
|
#include "utilities.h"
|
||||||
|
|
||||||
|
#ifdef HAS_SDCARD
|
||||||
|
#include <SD.h>
|
||||||
|
#include <FS.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(LILYGO_TBeam_V1_0) || defined(LILYGO_TBeam_V1_1)
|
||||||
|
#include <axp20x.h>
|
||||||
|
AXP20X_Class PMU;
|
||||||
|
|
||||||
|
bool initPMU()
|
||||||
|
{
|
||||||
|
if (PMU.begin(Wire, AXP192_SLAVE_ADDRESS) == AXP_FAIL) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* The charging indicator can be turned on or off
|
||||||
|
* * * */
|
||||||
|
// PMU.setChgLEDMode(LED_BLINK_4HZ);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The default ESP32 power supply has been turned on,
|
||||||
|
* no need to set, please do not set it, if it is turned off,
|
||||||
|
* it will not be able to program
|
||||||
|
*
|
||||||
|
* PMU.setDCDC3Voltage(3300);
|
||||||
|
* PMU.setPowerOutPut(AXP192_DCDC3, AXP202_ON);
|
||||||
|
*
|
||||||
|
* * * */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Turn off unused power sources to save power
|
||||||
|
* **/
|
||||||
|
|
||||||
|
PMU.setPowerOutPut(AXP192_DCDC1, AXP202_OFF);
|
||||||
|
PMU.setPowerOutPut(AXP192_DCDC2, AXP202_OFF);
|
||||||
|
PMU.setPowerOutPut(AXP192_LDO2, AXP202_OFF);
|
||||||
|
PMU.setPowerOutPut(AXP192_LDO3, AXP202_OFF);
|
||||||
|
PMU.setPowerOutPut(AXP192_EXTEN, AXP202_OFF);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set the power of LoRa and GPS module to 3.3V
|
||||||
|
**/
|
||||||
|
PMU.setLDO2Voltage(3300); //LoRa VDD
|
||||||
|
PMU.setLDO3Voltage(3300); //GPS VDD
|
||||||
|
PMU.setDCDC1Voltage(3300); //3.3V Pin next to 21 and 22 is controlled by DCDC1
|
||||||
|
|
||||||
|
PMU.setPowerOutPut(AXP192_DCDC1, AXP202_ON);
|
||||||
|
PMU.setPowerOutPut(AXP192_LDO2, AXP202_ON);
|
||||||
|
PMU.setPowerOutPut(AXP192_LDO3, AXP202_ON);
|
||||||
|
|
||||||
|
pinMode(PMU_IRQ, INPUT_PULLUP);
|
||||||
|
attachInterrupt(PMU_IRQ, [] {
|
||||||
|
// pmu_irq = true;
|
||||||
|
}, FALLING);
|
||||||
|
|
||||||
|
PMU.adc1Enable(AXP202_VBUS_VOL_ADC1 |
|
||||||
|
AXP202_VBUS_CUR_ADC1 |
|
||||||
|
AXP202_BATT_CUR_ADC1 |
|
||||||
|
AXP202_BATT_VOL_ADC1,
|
||||||
|
AXP202_ON);
|
||||||
|
|
||||||
|
PMU.enableIRQ(AXP202_VBUS_REMOVED_IRQ |
|
||||||
|
AXP202_VBUS_CONNECT_IRQ |
|
||||||
|
AXP202_BATT_REMOVED_IRQ |
|
||||||
|
AXP202_BATT_CONNECT_IRQ,
|
||||||
|
AXP202_ON);
|
||||||
|
PMU.clearIRQ();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void disablePeripherals()
|
||||||
|
{
|
||||||
|
PMU.setPowerOutPut(AXP192_DCDC1, AXP202_OFF);
|
||||||
|
PMU.setPowerOutPut(AXP192_LDO2, AXP202_OFF);
|
||||||
|
PMU.setPowerOutPut(AXP192_LDO3, AXP202_OFF);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define initPMU()
|
||||||
|
#define disablePeripherals()
|
||||||
|
#endif
|
||||||
|
|
||||||
|
SPIClass SDSPI(HSPI);
|
||||||
|
|
||||||
|
|
||||||
|
void initBoard()
|
||||||
|
{
|
||||||
|
Serial.begin(115200);
|
||||||
|
Serial.println("initBoard");
|
||||||
|
SPI.begin(RADIO_SCLK_PIN, RADIO_MISO_PIN, RADIO_MOSI_PIN);
|
||||||
|
Wire.begin(I2C_SDA, I2C_SCL);
|
||||||
|
|
||||||
|
#ifdef HAS_GPS
|
||||||
|
Serial1.begin(GPS_BAUD_RATE, SERIAL_8N1, GPS_RX_PIN, GPS_TX_PIN);
|
||||||
|
Serial.println("init GPS");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if OLED_RST
|
||||||
|
pinMode(OLED_RST, OUTPUT);
|
||||||
|
digitalWrite(OLED_RST, HIGH); delay(20);
|
||||||
|
digitalWrite(OLED_RST, LOW); delay(20);
|
||||||
|
digitalWrite(OLED_RST, HIGH); delay(20);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
initPMU();
|
||||||
|
|
||||||
|
#ifdef HAS_SDCARD
|
||||||
|
SDSPI.begin(SDCARD_SCLK, SDCARD_MISO, SDCARD_MOSI, SDCARD_CS);
|
||||||
|
if (!SD.begin(SDCARD_CS, SDSPI)) {
|
||||||
|
Serial.println("setupSDCard FAIL");
|
||||||
|
} else {
|
||||||
|
uint32_t cardSize = SD.cardSize() / (1024 * 1024);
|
||||||
|
Serial.print("setupSDCard PASS . SIZE = ");
|
||||||
|
Serial.print(cardSize);
|
||||||
|
Serial.println(" MB");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef BOARD_LED
|
||||||
|
/*
|
||||||
|
* T-BeamV1.0, V1.1 LED defaults to low level as trun on,
|
||||||
|
* so it needs to be forced to pull up
|
||||||
|
* * * * */
|
||||||
|
#if LED_ON == LOW
|
||||||
|
gpio_hold_dis(GPIO_NUM_4);
|
||||||
|
#endif
|
||||||
|
pinMode(BOARD_LED, OUTPUT);
|
||||||
|
digitalWrite(BOARD_LED, LED_ON);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
151
ESP32-LoRa/LoRa_GPS_Data_Viewer/Demo_SX1262_Transmit/utilities.h
Executable file
151
ESP32-LoRa/LoRa_GPS_Data_Viewer/Demo_SX1262_Transmit/utilities.h
Executable file
@@ -0,0 +1,151 @@
|
|||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
// #define LILYGO_TBeam_V0_7
|
||||||
|
// #define LILYGO_TBeam_V1_0
|
||||||
|
#define LILYGO_TBeam_V1_1
|
||||||
|
// #define LILYGO_T3_V1_0
|
||||||
|
// #define LILYGO_T3_V1_6
|
||||||
|
// #define LILYGO_T3_V2_0
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The default program uses 868MHz,
|
||||||
|
* if you need to change it,
|
||||||
|
* please open this note and change to the frequency you need to test
|
||||||
|
* */
|
||||||
|
|
||||||
|
#define LoRa_frequency 915.0
|
||||||
|
|
||||||
|
|
||||||
|
#define UNUSE_PIN (0)
|
||||||
|
|
||||||
|
#if defined(LILYGO_TBeam_V0_7)
|
||||||
|
#define GPS_RX_PIN 12
|
||||||
|
#define GPS_TX_PIN 15
|
||||||
|
#define BUTTON_PIN 39
|
||||||
|
#define BUTTON_PIN_MASK GPIO_SEL_39
|
||||||
|
#define I2C_SDA 21
|
||||||
|
#define I2C_SCL 22
|
||||||
|
|
||||||
|
#define RADIO_SCLK_PIN 5
|
||||||
|
#define RADIO_MISO_PIN 19
|
||||||
|
#define RADIO_MOSI_PIN 27
|
||||||
|
#define RADIO_CS_PIN 18
|
||||||
|
#define RADIO_DI0_PIN 26
|
||||||
|
#define RADIO_RST_PIN 23
|
||||||
|
#define RADIO_DIO1_PIN 33
|
||||||
|
#define RADIO_BUSY_PIN 32
|
||||||
|
|
||||||
|
#define BOARD_LED 14
|
||||||
|
#define LED_ON HIGH
|
||||||
|
#define LED_OFF LOW
|
||||||
|
|
||||||
|
#define GPS_BAUD_RATE 9600
|
||||||
|
#define HAS_GPS
|
||||||
|
#define HAS_DISPLAY //Optional, bring your own board, no OLED !!
|
||||||
|
|
||||||
|
#elif defined(LILYGO_TBeam_V1_0) || defined(LILYGO_TBeam_V1_1)
|
||||||
|
|
||||||
|
#define GPS_RX_PIN 34
|
||||||
|
#define GPS_TX_PIN 12
|
||||||
|
#define BUTTON_PIN 38
|
||||||
|
#define BUTTON_PIN_MASK GPIO_SEL_38
|
||||||
|
#define I2C_SDA 21
|
||||||
|
#define I2C_SCL 22
|
||||||
|
#define PMU_IRQ 35
|
||||||
|
|
||||||
|
#define RADIO_SCLK_PIN 5
|
||||||
|
#define RADIO_MISO_PIN 19
|
||||||
|
#define RADIO_MOSI_PIN 27
|
||||||
|
#define RADIO_CS_PIN 18
|
||||||
|
#define RADIO_DI0_PIN 26
|
||||||
|
#define RADIO_RST_PIN 23
|
||||||
|
#define RADIO_DIO1_PIN 33
|
||||||
|
#define RADIO_BUSY_PIN 32
|
||||||
|
|
||||||
|
#define BOARD_LED 4
|
||||||
|
#define LED_ON LOW
|
||||||
|
#define LED_OFF HIGH
|
||||||
|
|
||||||
|
#define GPS_BAUD_RATE 9600
|
||||||
|
#define HAS_GPS
|
||||||
|
|
||||||
|
#elif defined(LILYGO_T3_V1_0)
|
||||||
|
#define I2C_SDA 4
|
||||||
|
#define I2C_SCL 15
|
||||||
|
#define OLED_RST 16
|
||||||
|
|
||||||
|
#define RADIO_SCLK_PIN 5
|
||||||
|
#define RADIO_MISO_PIN 19
|
||||||
|
#define RADIO_MOSI_PIN 27
|
||||||
|
#define RADIO_CS_PIN 18
|
||||||
|
#define RADIO_DI0_PIN 26
|
||||||
|
#define RADIO_RST_PIN 14
|
||||||
|
#define RADIO_DIO1_PIN 33
|
||||||
|
#define RADIO_BUSY_PIN 32
|
||||||
|
|
||||||
|
#define HAS_DISPLAY
|
||||||
|
|
||||||
|
#elif defined(LILYGO_T3_V1_6)
|
||||||
|
#define I2C_SDA 21
|
||||||
|
#define I2C_SCL 22
|
||||||
|
#define OLED_RST UNUSE_PIN
|
||||||
|
|
||||||
|
#define RADIO_SCLK_PIN 5
|
||||||
|
#define RADIO_MISO_PIN 19
|
||||||
|
#define RADIO_MOSI_PIN 27
|
||||||
|
#define RADIO_CS_PIN 18
|
||||||
|
#define RADIO_DI0_PIN 26
|
||||||
|
#define RADIO_RST_PIN 23
|
||||||
|
#define RADIO_DIO1_PIN 33
|
||||||
|
#define RADIO_BUSY_PIN 32
|
||||||
|
|
||||||
|
#define SDCARD_MOSI 15
|
||||||
|
#define SDCARD_MISO 2
|
||||||
|
#define SDCARD_SCLK 14
|
||||||
|
#define SDCARD_CS 13
|
||||||
|
|
||||||
|
#define BOARD_LED 25
|
||||||
|
#define LED_ON HIGH
|
||||||
|
|
||||||
|
#define ADC_PIN 35
|
||||||
|
|
||||||
|
#define HAS_SDCARD
|
||||||
|
#define HAS_DISPLAY
|
||||||
|
|
||||||
|
#elif defined(LILYGO_T3_V2_0)
|
||||||
|
#define I2C_SDA 21
|
||||||
|
#define I2C_SCL 22
|
||||||
|
#define OLED_RST UNUSE_PIN
|
||||||
|
|
||||||
|
#define RADIO_SCLK_PIN 5
|
||||||
|
#define RADIO_MISO_PIN 19
|
||||||
|
#define RADIO_MOSI_PIN 27
|
||||||
|
#define RADIO_CS_PIN 18
|
||||||
|
#define RADIO_DI0_PIN 26
|
||||||
|
#define RADIO_RST_PIN 14
|
||||||
|
#define RADIO_DIO1_PIN UNUSE_PIN
|
||||||
|
#define RADIO_BUSY_PIN UNUSE_PIN
|
||||||
|
|
||||||
|
#define SDCARD_MOSI 15
|
||||||
|
#define SDCARD_MISO 2
|
||||||
|
#define SDCARD_SCLK 14
|
||||||
|
#define SDCARD_CS 13
|
||||||
|
|
||||||
|
#define BOARD_LED 0
|
||||||
|
#define LED_ON LOW
|
||||||
|
|
||||||
|
#define HAS_SDCARD
|
||||||
|
|
||||||
|
#else
|
||||||
|
#error "Please select the version you purchased in utilities.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user