Skip to content

Commit

Permalink
Merge pull request #13 from bitconnector/new-logic
Browse files Browse the repository at this point in the history
New logic
  • Loading branch information
bitconnector authored Jul 19, 2022
2 parents 35b20b3 + 22cf2b5 commit 04bdf63
Show file tree
Hide file tree
Showing 10 changed files with 196 additions and 195 deletions.
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,3 @@
.vscode/c_cpp_properties.json
.vscode/launch.json
.vscode/ipch
src/config.hpp
40 changes: 27 additions & 13 deletions payload_formatter_v3.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,34 @@ function decodeUplink(input) {
var ptr = 0;
var data = {};

data.bat = input.bytes[ptr]
data.bat += 250
data.bat /= 100
if (input.bytes[ptr] === 255) {
data.bat = 5;
data.batState = "charging"
}
else {
data.bat = input.bytes[ptr]
data.bat += 250
data.bat /= 100
data.batState = "bat: " + data.bat + "V";
}
ptr = ptr + 1;

if (input.fPort === 1) {
data.msg = "no-gps";
}
else if (input.fPort === 2) {
data.msg = "no-movement";
data.msg = "status: ";
if (input.bytes[ptr] === 1) data.msg += "button pressed"
if (input.bytes[ptr] === 2) data.msg += "startup"
if (input.bytes[ptr] === 3) data.msg += "enter sleep"
if (input.bytes[ptr] === 4) data.msg += "running"
ptr = ptr + 1;
data.msg += "\nGPS: "
if (input.bytes[ptr] === 0) data.msg += "no fix"
if (input.bytes[ptr] === 1) data.msg += "ok"
if (input.bytes[ptr] === 2) data.msg += "no movement"
if (input.bytes[ptr] === 3) data.msg += "geofence"
ptr = ptr + 1;
}
else if (input.fPort === 3) {
data.msg = "geofence";
}
else {
data.msg = "ok";
else if (input.fPort === 21) {
data.msg = "location: ";
data.lat = ((input.bytes[ptr] << 16) >>> 0) + ((input.bytes[ptr + 1] << 8) >>> 0) + input.bytes[ptr + 2];
data.lat = (data.lat / 16777215.0 * 180) - 90;
data.lon = ((input.bytes[ptr + 3] << 16) >>> 0) + ((input.bytes[ptr + 4] << 8) >>> 0) + input.bytes[ptr + 5];
Expand All @@ -33,9 +45,11 @@ function decodeUplink(input) {
}
data.hdop = input.bytes[ptr + 8] / 10.0;
ptr = ptr + 9;

data.msg += data.lat + " " + data.lon;
}

// data.msg += "\nbat:" + data.bat;
data.msg += "\n" + data.batState;

return { data };
}
6 changes: 6 additions & 0 deletions src/config.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,12 @@
#define AXP_SCL 22
#define AXP_IRQ 35

#define LORAWAN_DEFAULT_SF 7
#define GPS_INTERVAL 30
#define GPS_MOVE_DIST 25
#define STATUS_INTERVAL 10
#define STATUS_SF 10

// TTS credentials(tts_v3)
// https://console.cloud.thethings.network/

Expand Down
32 changes: 31 additions & 1 deletion src/gps.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,40 @@ void gps_loop()
unsigned long lock = millis() + 2;
while (serialGPS.available() > 0 && millis() < lock)
{
gps.encode(serialGPS.read());
char c = serialGPS.read();
gps.encode(c);
Serial.print(c);
}
}

int getGPS()
{
setup_gps();

unsigned long time = millis() + 1200;
while (!gps_valid() && time > millis())
gps_loop();

if (!gps_valid()) // no GPS
{
Serial.println("\nGPS: no fix");
return 0;
}
if (gps_geo()) // Geofence
{
Serial.println("\nGPS: geofence");
return 3;
}
if (!gps_moved(GPS_MOVE_DIST)) // no movement
{
Serial.println("\nGPS: no movement");
return 2;
}

Serial.println("\nGPS: ok");
return 1; // GPS ok
}

bool gps_valid()
{
if (gps.location.isValid() && gps.hdop.isValid() && gps.altitude.isValid())
Expand Down
1 change: 1 addition & 0 deletions src/gps.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ extern RTC_DATA_ATTR double last_lng;

void setup_gps();
void gps_loop();
int getGPS();
bool gps_valid();
bool gps_moved(int meter);
uint8_t gps_geo();
Expand Down
90 changes: 37 additions & 53 deletions src/lorawan.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,9 @@ unsigned char Buffer[235];
RTC_DATA_ATTR LoraWANmessage message;
RTC_DATA_ATTR bool joined = 0;

bool has_send = false;

void startup_lorawan()
{
LoRa.setPins(LoRa_CS, LoRa_RST, LoRa_DIO0);
delay(100);
LoRa.begin(868100000);
LoRa.setPreambleLength(8);
LoRa.setSyncWord(0x34);
LoRa.setCodingRate4(5);
LoRa.setSpreadingFactor(7);
LoRa.setSignalBandwidth(125E3);

has_send = 0;

#ifdef USE_OTAA
if (joined == 0)
Expand All @@ -32,14 +21,8 @@ void startup_lorawan()
Serial.print("Joining");
while (!joined)
{
LoRa.begin(868100000);
LoRa.setPreambleLength(8);
LoRa.setSyncWord(0x34);
LoRa.enableCrc();
LoRa.disableInvertIQ();
LoRa.setCodingRate4(5);
LoRa.setSpreadingFactor(7);
LoRa.setSignalBandwidth(125E3);
long frequency = getFrequency();
lora_tx(frequency, 7);

esp_random();
otaa.setDevNonce((uint16_t)random(256 * 256));
Expand All @@ -50,14 +33,7 @@ void startup_lorawan()
unsigned long txTime = millis();

// RX1
LoRa.begin(868100000);
LoRa.setPreambleLength(8);
LoRa.setSyncWord(0x34);
LoRa.disableCrc();
LoRa.enableInvertIQ();
LoRa.setCodingRate4(5);
LoRa.setSpreadingFactor(7);
LoRa.setSignalBandwidth(125E3);
lora_rx(frequency, 7);
while (txTime + 20000 > millis() && !joined)
{
if (LoRa.parsePacket())
Expand Down Expand Up @@ -85,33 +61,23 @@ void startup_lorawan()
#endif
}

void lorawan_loop()
bool lorawan_send(uint8_t _port, uint8_t *_data, uint8_t _size, bool _confirm, int _sf)
{
delay(0);
}

void lorawan_send(uint8_t _port, uint8_t *_data, uint8_t _size, bool _confirm)
{
LoRa.begin(getFrequency());
LoRa.setPreambleLength(8);
LoRa.setSyncWord(0x34);
LoRa.enableCrc();
LoRa.disableInvertIQ();
LoRa.setCodingRate4(5);
LoRa.setSpreadingFactor(7);
LoRa.setSignalBandwidth(125E3);

// char payload[100];
// sprintf(payload, "r=%02x", (int)random(256));
// Serial.printf("Sending: %s\n", payload);
long frequency = getFrequency();
lora_tx(frequency, _sf);

message.uplink((char *)_data, _size, _port, _confirm);
printPackage((char *)message.data, message.dataLen, 1);

LoRa.beginPacket(); // start packet
LoRa.write(message.data, message.dataLen);
LoRa.endPacket(); // finish packet and send it
has_send = 1;

if (_confirm)
{
return 1;
}
return 0;
}

void printHex2(unsigned v)
Expand All @@ -122,14 +88,8 @@ void printHex2(unsigned v)
Serial.print(v, HEX);
}

bool lorawan_has_send()
void lorawan_sleep()
{
return has_send;
}

void lorawan_sleep(unsigned long sleep_time)
{
Serial.println(F("No DutyCycle recalculation function!"));
LoRa.sleep();
}

Expand All @@ -141,6 +101,30 @@ long getFrequency()
return frequency;
}

void lora_tx(long frequency, int sf)
{
LoRa.begin(frequency);
LoRa.setPreambleLength(8);
LoRa.setSyncWord(0x34);
LoRa.enableCrc();
LoRa.disableInvertIQ();
LoRa.setCodingRate4(5);
LoRa.setSpreadingFactor(sf);
LoRa.setSignalBandwidth(125E3);
}

void lora_rx(long frequency, int sf)
{
LoRa.begin(frequency);
LoRa.setPreambleLength(8);
LoRa.setSyncWord(0x34);
LoRa.disableCrc();
LoRa.enableInvertIQ();
LoRa.setCodingRate4(5);
LoRa.setSpreadingFactor(sf);
LoRa.setSignalBandwidth(125E3);
}

void printPackage(char *data, uint16_t size, bool structure)
{
Serial.print("+ Package:");
Expand Down
10 changes: 4 additions & 6 deletions src/lorawan.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,10 @@ extern unsigned char Buffer[235];
extern RTC_DATA_ATTR LoraWANmessage message;
extern RTC_DATA_ATTR bool joined;

extern bool has_send;

void startup_lorawan();
void lorawan_loop();
void lorawan_send(uint8_t _port, uint8_t *_data, uint8_t _size, bool _confirm);
bool lorawan_has_send();
void lorawan_sleep(unsigned long sleep_time);
bool lorawan_send(uint8_t _port, uint8_t *_data, uint8_t _size, bool _confirm, int _sf);
void lorawan_sleep();
void printPackage(char *data, uint16_t size, bool structure = 0);
long getFrequency();
void lora_tx(long frequency, int sf);
void lora_rx(long frequency, int sf);
Loading

0 comments on commit 04bdf63

Please sign in to comment.