Untitled

 avatar
unknown
plain_text
3 years ago
4.3 kB
6
Indexable
#include <SPI.h>
#include <LoRa.h>
#include <Arduino.h>


#define VIRALINK_DEBUG // enable debug on SerialMon
#define SerialMon Serial // if you need DEBUG SerialMon should be defined

#define WIFI_SSID "test"
#define WIFI_PASSWORD "123456789"

#define VIRALINK_TOKEN "ytIRSDASMOaiulruxLhw"
#define VIRALINK_MQTT_URL "console.viralink.io"
#define VIRALINK_MQTT_PORT 1883

#include "viralink.h"

#if defined(ESP32)
#include "WiFi.h"
#elif defined(ESP8266)
#include "ESP8266WiFi.h"
#endif

MQTTController mqttController;
WiFiClient client;

// store last uptime Milliseconds that we sent telemetry data
uint64_t lastSentTelemetryMs;

// store last uptime Milliseconds that we request attributes values
uint64_t lastRequestedAttributesMs;

bool on_message(const String &topic, DynamicJsonDocument json) {

    Serial.println("New Message: ");
    Serial.print("Topic: ");
    Serial.println(topic);
    Serial.print("Data [json]: ");
    Serial.println(json.as<String>());

    return true;
}

void sendTimeSeriesData() {
    Serial.println("Sending TimeSeries Data");
    DynamicJsonDocument data(100);
    data["temperature"] = random(0, 100);
    mqttController.sendTelemetry(data);

}

void sendAttributesData() {
    DynamicJsonDocument data(100);
    data["OS_Version"] = random(0, 5);
    mqttController.sendAttributes(data);
}

void requestAttributesValues() {
    Serial.println("Request Shared and Client Side Attributes");
    DynamicJsonDocument data(100);
    data["sharedKeys"] = "updateInterval,OS_VERSION";
    data["clientKeys"] = "uptime";
    mqttController.requestAttributesJson(data.as<String>(), [](String topic, DynamicJsonDocument json) -> bool {
        Serial.println(json.as<String>());

        // if you return true means the callbacks handled successfully
        // if you return false the message will come through default callback again (on_message function)
        return true;
    });
}







//define the pins used by the transceiver module
#define ss 5
#define rst 14
#define dio0 2

void setup() {
  //initialize Serial Monitor
  Serial.begin(115200);
  while (!Serial);
  Serial.println("LoRa Receiver");

  //setup LoRa transceiver module
  LoRa.setPins(ss, rst, dio0);
  LoRa.setTxPower(20);
  //replace the LoRa.begin(---E-) argument with your location's frequency
  //433E6 for Asia
  //866E6 for Europe
  //915E6 for North America
  while (!LoRa.begin(433E6)) {
    Serial.println(".");
    delay(500);
  }
  // Change sync word (0xF3) to match the receiver
  // The sync word assures you don't get LoRa messages from other LoRa transceivers
  // ranges from 0-0xFF
  LoRa.setSyncWord(0xF3);
  Serial.println("LoRa Initializing OK!");



    Serial.begin(115200);
    WiFi.mode(WIFI_STA);
    WiFi.begin(WIFI_SSID, WIFI_PASSWORD);

    Serial.println();
    while (WiFi.status() != WL_CONNECTED) {
        Serial.print(".");
        delay(50);
    }

    Serial.println("Connected to WiFi!");
    Serial.println(WiFi.localIP());

    mqttController.init();
    // sendSystemAttributes send some basic info to the platform like upTime, Free Heap
    mqttController.sendSystemAttributes(true);
    mqttController.connect(client, "esp", VIRALINK_TOKEN, "", VIRALINK_MQTT_URL, VIRALINK_MQTT_PORT, on_message,
                           nullptr, []() {
                Serial.println("Connected To Platform");
            });

    // this function add message to queue. After the MQTT connection occur the message will send automatically
    sendAttributesData();



  
}

void loop() {
  // try to parse packet
  int packetSize = LoRa.parsePacket();
  if (packetSize) {

    // read packet
    while (LoRa.available()) {
      String LoRaData = LoRa.readString();
      Serial.print(LoRaData);
      Serial.print(" RSSI = ");
    Serial.println(LoRa.packetRssi());
    }

  }

  mqttController.loop();

    // send telemetry data each 5 second
    if ((Uptime.getMilliseconds() - lastSentTelemetryMs) > 5000) {
        lastSentTelemetryMs = Uptime.getMilliseconds();
        sendTimeSeriesData();
    }

    // request Attributes Value each 10 second
    if ((Uptime.getMilliseconds() - lastRequestedAttributesMs) > 10000) {
        lastRequestedAttributesMs = Uptime.getMilliseconds();
        requestAttributesValues();
    }


  
}
Editor is loading...