xreef / LoRa_E32_Series_Library

Arduino LoRa EBYTE E32 device library complete and tested with Arduino, esp8266, esp32, STM32 and Raspberry Pi Pico (rp2040 boards). sx1278/sx1276
https://www.mischianti.org
Other
352 stars 72 forks source link

How to Send Message use JSON Format ? #1

Closed taurushappy closed 4 years ago

taurushappy commented 4 years ago

How to Send Message use JSON Format ? Hello , Can you help me ? How to solve this Question ?

xreef commented 4 years ago

Hi taurushappy, you can use ArduinoJSON library, (I'm going to publish a post on how to use It).

You can

  DynamicJsonDocument doc(512);

  // Set the values in the document
  doc["energyLifetime"] = 21698620;
  doc["energyYearly"] = 1363005;

String buf;
serializeJson(doc, buf);

ResponseStatus rs = e32ttl.sendMessage(buf);

Remember you have a size limit on message size of the lora E32.

The code is untested, but I think It can be usefully to understand.

Tell me if It's ok.

Bye Renzo

taurushappy commented 4 years ago

HI !    first, thanks  for your help !    I try this ,the code can work ,but I don't know it have some problem in my test ,it only work one time,send  Message one time ,then stoped!     this  is  my test code : 

 #include "Arduino.h"

include "LoRa_E32.h"

include <DHT.h>

include <ArduinoJson.h>

define DHTPIN 4

define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

DynamicJsonDocument doc(512);

// ---------- esp8266 pins -------------- //LoRa_E32 e32ttl(D2, D3, D5, D7, D6); //LoRa_E32 e32ttl(D2, D3); // Config without connect AUX and M0 M1

//#include <SoftwareSerial.h> //SoftwareSerial mySerial(D2, D3); // RX, TX //LoRa_E32 e32ttl(&mySerial, D5, D7, D6); // -------------------------------------

// ---------- Arduino pins -------------- //LoRa_E32 e32ttl(2, 3, 5, 7, 6); LoRa_E32 e32ttl100(2, 3); // Config without connect AUX and M0 M1

//#include <SoftwareSerial.h> //SoftwareSerial mySerial(2, 3); // RX, TX //LoRa_E32 e32ttl(&mySerial, 5, 7, 6); // -------------------------------------

void setup() {      Serial.begin(9600);   delay(500);

  // Startup all pins and UART   e32ttl100.begin();   dht.begin();

  Serial.println("Hi, I'm going to send message!");

  // Send message   ResponseStatus rs = e32ttl100.sendMessage("Hello, Taurus!");   // Check If there is some problem of succesfully send   Serial.println(rs.getResponseDescription()); }

int i = 0;

void loop() {

  float h = dht.readHumidity();   // Read temperature as Celsius (the default)   float t = dht.readTemperature();   // Read temperature as Fahrenheit (isFahrenheit = true)   float f = dht.readTemperature(true);

  // Check if any reads failed and exit early (to try again).   if (isnan(h) || isnan(t) || isnan(f)) {     Serial.println(F("Failed to read from DHT sensor!"));     return;   }

  // Compute heat index in Fahrenheit (the default)   float hif = dht.computeHeatIndex(f, h);   // Compute heat index in Celsius (isFahreheit = false)   float hic = dht.computeHeatIndex(t, h, false);

  Serial.print(F("Humidity: "));   Serial.print(h);   Serial.print(F("%  Temperature: "));   Serial.print(t);   Serial.print(F("°C "));   Serial.print(f);   Serial.print(F("°F  Heat index: "));   Serial.print(hic);   Serial.print(F("°C "));   Serial.print(hif);   Serial.println(F("°F"));

       delay(1000);     

   doc["temperature"]=t;    doc["humidity"]=h;    String buf;    serializeJson(doc,buf);    ResponseStatus rs = e32ttl100.sendMessage(buf);

     Serial.println(rs.getResponseDescription());

  delay(1000);

}

                        

------------------ 原始邮件 ------------------ 发件人: "Renzo Mischianti"<notifications@github.com>; 发送时间: 2019年12月16日(星期一) 下午5:26 收件人: "xreef/LoRa_E32_Series_Library"<LoRa_E32_Series_Library@noreply.github.com>; 抄送: "AJ-AJ"<564509167@qq.com>;"Author"<author@noreply.github.com>; 主题: Re: [xreef/LoRa_E32_Series_Library] How to Send Message use JSON Format ? (#1)

Hi taurushappy, you can use ArduinoJSON library, (I'm going to publish a post on how to use It).

You can DynamicJsonDocument doc(512); // Set the values in the document doc["energyLifetime"] = 21698620; doc["energyYearly"] = 1363005; String buf; serializeJson(doc, buf); ResponseStatus rs = e32ttl.sendMessage(buf);
Remember you have a size limit on message size of the lora E32.

The code is untested, but I think It can be usefully to understand.

Tell me if It's ok.

Bye Renzo

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

xreef commented 4 years ago

Hi I check your sketch and seems quite ok.

But I think you must add AUX pin or put a pull up resistor on It, with no AUX not work for me, but with aux I have a correct send.

And Arduino Json have some problem on serialize on String

#include "Arduino.h"
#include "LoRa_E32.h"

#include <DHT.h>
#include <ArduinoJson.h>

#define DHTPIN 4
#define DHTTYPE DHT11
int freeRame () {
#ifdef ESP8266
    return Esp.getFreeHeap();
#else
    extern int __heap_start, *__brkval;
    int v;
    return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
#endif // ESP8266
}

DHT dht(DHTPIN, DHTTYPE);

DynamicJsonDocument doc(512);

// ---------- esp8266 pins --------------
//LoRa_E32 e32ttl(D2, D3, D5, D7, D6);
//LoRa_E32 e32ttl(D2, D3); // Config without connect AUX and M0 M1

//#include <SoftwareSerial.h>
//SoftwareSerial mySerial(D2, D3); // RX, TX
//LoRa_E32 e32ttl(&mySerial, D5, D7, D6);
// -------------------------------------

// ---------- Arduino pins --------------
//LoRa_E32 e32ttl(2, 3, 5, 7, 6);
LoRa_E32 e32ttl100(4, 5, 3); // Config without connect AUX and M0 M1

//#include <SoftwareSerial.h>
//SoftwareSerial mySerial(2, 3); // RX, TX
//LoRa_E32 e32ttl(&mySerial, 5, 7, 6);
// -------------------------------------
void printParameters(struct Configuration configuration) {
    Serial.println("----------------------------------------");

    Serial.print(F("HEAD BIN: "));  Serial.print(configuration.HEAD, BIN);Serial.print(" ");Serial.print(configuration.HEAD, DEC);Serial.print(" ");Serial.println(configuration.HEAD, HEX);
    Serial.println(F(" "));
    Serial.print(F("AddH BIN: "));  Serial.println(configuration.ADDH, BIN);
    Serial.print(F("AddL BIN: "));  Serial.println(configuration.ADDL, BIN);
    Serial.print(F("Chan BIN: "));  Serial.print(configuration.CHAN, DEC); Serial.print(" -> "); Serial.println(configuration.getChannelDescription());
    Serial.println(F(" "));
    Serial.print(F("SpeedParityBit BIN    : "));  Serial.print(configuration.SPED.uartParity, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getUARTParityDescription());
    Serial.print(F("SpeedUARTDataRate BIN : "));  Serial.print(configuration.SPED.uartBaudRate, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getUARTBaudRate());
    Serial.print(F("SpeedAirDataRate BIN  : "));  Serial.print(configuration.SPED.airDataRate, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getAirDataRate());

    Serial.print(F("OptionTrans BIN       : "));  Serial.print(configuration.OPTION.fixedTransmission, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getFixedTransmissionDescription());
    Serial.print(F("OptionPullup BIN      : "));  Serial.print(configuration.OPTION.ioDriveMode, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getIODroveModeDescription());
    Serial.print(F("OptionWakeup BIN      : "));  Serial.print(configuration.OPTION.wirelessWakeupTime, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getWirelessWakeUPTimeDescription());
    Serial.print(F("OptionFEC BIN         : "));  Serial.print(configuration.OPTION.fec, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getFECDescription());
    Serial.print(F("OptionPower BIN       : "));  Serial.print(configuration.OPTION.transmissionPower, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getTransmissionPowerDescription());

    Serial.println("----------------------------------------");

}

void setup() {
    Serial.begin(9600);
    delay(500);

    // Startup all pins and UART
    e32ttl100.begin();
    dht.begin();

//      ResponseStructContainer c;
//      c = e32ttl100.getConfiguration();
//      struct Configuration configuration = *(Configuration*) c.data;
//      printParameters(configuration);
//
//      configuration.ADDL = 0x01;
//      configuration.ADDH = 0x00;
//      configuration.CHAN = 0x04;
//
//      configuration.OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION;
//      configuration.OPTION.wirelessWakeupTime = WAKE_UP_750;
//
//          configuration.OPTION.fec = FEC_1_ON;
//          configuration.OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS;
//          configuration.OPTION.transmissionPower = POWER_20;
//
//          configuration.SPED.airDataRate = AIR_DATA_RATE_010_24;
//          configuration.SPED.uartBaudRate = UART_BPS_9600;
//          configuration.SPED.uartParity = MODE_00_8N1;
//
//
//          e32ttl100.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE);
//          printParameters(configuration);

    Serial.println("Hi, I'm going to send message!");

    Serial.println(freeRame());
    // Send message
    ResponseStatus rs = e32ttl100.sendMessage("Hello, Taurus!");
    Serial.println(freeRame());
    // Check If there is some problem of succesfully send
    Serial.println(rs.getResponseDescription());
}

int i = 0;

void loop() {
    Serial.println(freeRame());
    float h = dht.readHumidity();
    // Read temperature as Celsius (the default)
    float t = dht.readTemperature();
    // Read temperature as Fahrenheit (isFahrenheit = true)
    float f = dht.readTemperature(true);

    // Check if any reads failed and exit early (to try again).
    if (isnan(h) || isnan(t) || isnan(f)) {
        Serial.println(F("Failed to read from DHT sensor!"));
//      return;
    }

    // Compute heat index in Fahrenheit (the default)
    float hif = dht.computeHeatIndex(f, h);
    // Compute heat index in Celsius (isFahreheit = false)
    float hic = dht.computeHeatIndex(t, h, false);
    Serial.println(freeRame());
    h = random(90);
    t = random(40);
    f = 1.0;
    hif = 2.0;
    hic = 2.0;

    Serial.print(F("Humidity: "));
    Serial.print(h);
    Serial.print(F("% Temperature: "));
    Serial.print(t);
    Serial.print(F("°C "));
    Serial.print(f);
    Serial.print(F("°F Heat index: "));
    Serial.print(hic);
    Serial.print(F("°C "));
    Serial.print(hif);
    Serial.println(F("°F"));
    Serial.println(freeRame());
    delay(1000);

    doc["temperature"] = t;
    doc["humidity"] = h;
    Serial.println(freeRame());

    int size = measureJson(doc)+1;

    char buf[size];
    serializeJson(doc, buf, size);
    Serial.println(buf);
    Serial.println(measureJson(doc));
    ResponseStatus rs = e32ttl100.sendMessage(buf, size);

//  String buf;
//  serializeJson(doc, buf);
//  Serial.println(buf);
//  Serial.println(buf.length());
//  ResponseStatus rs = e32ttl100.sendMessage(buf);

    Serial.println(freeRame());
    Serial.println(rs.getResponseDescription());
    Serial.println(freeRame());

    delay(2000);

}
#include "Arduino.h"
#include "LoRa_E32.h"
#include <ArduinoJson.h>

#define E32_TTL_100
LoRa_E32 e32ttl(4, 5, 3); // Config without connect AUX and M0 M1

//#include <SoftwareSerial.h>
//SoftwareSerial mySerial(D2, D3); // RX, TX
//E32_TTL e32ttl(&mySerial, D5, D7, D6);

void printParameters(struct Configuration configuration);
void printModuleInformation(struct ModuleInformation moduleInformation);
//The setup function is called once at startup of the sketch
void setup()
{
    Serial.begin(9600);
    while (!Serial) {
        ; // wait for serial port to connect. Needed for native USB
    }
    delay(400);

    e32ttl.begin();

//          ResponseStructContainer c;
//          c = e32ttl.getConfiguration();
//          struct Configuration configuration = *(Configuration*) c.data;
//          printParameters(configuration);
//
//          configuration.ADDL = 0x01;
//          configuration.ADDH = 0x00;
//          configuration.CHAN = 0x04;
//
//          configuration.OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION;
//          configuration.OPTION.wirelessWakeupTime = WAKE_UP_750;
//
//          configuration.OPTION.fec = FEC_1_ON;
//          configuration.OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS;
//          configuration.OPTION.transmissionPower = POWER_20;
//
//          configuration.SPED.airDataRate = AIR_DATA_RATE_010_24;
//          configuration.SPED.uartBaudRate = UART_BPS_9600;
//          configuration.SPED.uartParity = MODE_00_8N1;
//
//
//          e32ttl.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE);
//          printParameters(configuration);

//  ResponseContainer c;
//  c = e32ttl.getConfiguration();
//  Configuration configuration = *(Configuration*) c.data;
//  Serial.println(configuration.SPED.getUARTBaudRate());
//  Serial.println(c.status.getResponseDescription());
//
//  printParameters(configuration);
//
//  ResponseContainer cMi;
//  cMi = e32ttl.getModuleInformation();
//  ModuleInformation mi = *(ModuleInformation*)cMi.data;
//
//  Serial.println(cMi.status.getResponseDescription());
//  Serial.println(cMi.status.code);
//
//  printModuleInformation(mi );
//
//  configuration.CHAN = configuration.CHAN-1;
//  e32ttl.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE);
//
//  ResponseContainer cNext;
//  cNext = e32ttl.getConfiguration();
//  Configuration configurationNext = *(Configuration*) cNext.data;
//  Serial.println(configurationNext.SPED.getUARTBaudRate());
//  Serial.println(cNext.status.getResponseDescription());
//  printParameters(configurationNext);

}
DynamicJsonDocument doc(512);

// The loop function is called in an endless loop
void loop()
{
    if (e32ttl.available()  > 1){
//      struct Messaggione {
//          char message[8];
//          bool mitico;
//      };
//
//      char type[5];
//      ResponseContainer rs = e32ttl.receiveInitialMessage(sizeof(type));
//      memcpy ( type, rs.data.c_str(), sizeof(type) );
////        ResponseContainer rs = e32ttl.receiveInitialMessage(5);
////        char type[5] = {rs.data.c_str()};
//
//      Serial.println("READ TYPE: ");
//      Serial.println(rs.status.getResponseDescription());
//      Serial.println(type);
//
//      ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(Messaggione));
//      struct Messaggione messaggione = *(Messaggione*) rsc.data;

        ResponseContainer rs = e32ttl.receiveMessage();
        String message = rs.data;

        Serial.println(rs.status.getResponseDescription());

        Serial.println(message);
        deserializeJson(doc, message);

        Serial.print("humidity --> ");
        Serial.println((float)doc["humidity"]);

//      Serial.println(messaggione.message);
//      Serial.println(messaggione.mitico);

    }
}

//void printParameters(struct Configuration configuration) {
//  Serial.println("----------------------------------------");
//
//  Serial.print(F("HEAD BIN: "));  Serial.print(configuration.HEAD, BIN);Serial.print(" ");Serial.print(configuration.HEAD, DEC);Serial.print(" ");Serial.println(configuration.HEAD, HEX);
//  Serial.println(F(" "));
//  Serial.print(F("AddH BIN: "));  Serial.println(configuration.ADDH, BIN);
//  Serial.print(F("AddL BIN: "));  Serial.println(configuration.ADDL, BIN);
//  Serial.print(F("Chan BIN: "));  Serial.print(configuration.CHAN, HEX); Serial.print(" -> "); Serial.println();
//  Serial.println(F(" "));
//  Serial.print(F("SpeedParityBit BIN    : "));  Serial.print(configuration.SPED.uartParity, BIN);Serial.print(" -> "); Serial.println();
//  Serial.print(F("SpeedUARTDataRate BIN : "));  Serial.print(configuration.SPED.uartBaudRate, BIN);Serial.print(" -> "); Serial.println();
//  Serial.print(F("SpeedAirDataRate BIN  : "));  Serial.print(configuration.SPED.airDataRate, BIN);Serial.print(" -> "); Serial.println();
//
//  Serial.print(F("OptionTrans BIN       : "));  Serial.print(configuration.OPTION.fixedTransmission, BIN);Serial.print(" -> "); Serial.println();
//  Serial.print(F("OptionPullup BIN      : "));  Serial.print(configuration.OPTION.ioDriveMode, BIN);Serial.print(" -> "); Serial.println();
//  Serial.print(F("OptionWakeup BIN      : "));  Serial.print(configuration.OPTION.wirelessWakeupTime, BIN);Serial.print(" -> "); Serial.println();
//  Serial.print(F("OptionFEC BIN         : "));  Serial.print(configuration.OPTION.fec, BIN);Serial.print(" -> "); Serial.println();
//  Serial.print(F("OptionPower BIN       : "));  Serial.print(configuration.OPTION.transmissionPower, BIN);Serial.print(" -> "); Serial.println();
//
//  Serial.println("----------------------------------------");
//
//}
void printParameters(struct Configuration configuration) {
    Serial.println("----------------------------------------");

    Serial.print(F("HEAD BIN: "));  Serial.print(configuration.HEAD, BIN);Serial.print(" ");Serial.print(configuration.HEAD, DEC);Serial.print(" ");Serial.println(configuration.HEAD, HEX);
    Serial.println(F(" "));
    Serial.print(F("AddH BIN: "));  Serial.println(configuration.ADDH, BIN);
    Serial.print(F("AddL BIN: "));  Serial.println(configuration.ADDL, BIN);
    Serial.print(F("Chan BIN: "));  Serial.print(configuration.CHAN, DEC); Serial.print(" -> "); Serial.println(configuration.getChannelDescription());
    Serial.println(F(" "));
    Serial.print(F("SpeedParityBit BIN    : "));  Serial.print(configuration.SPED.uartParity, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getUARTParityDescription());
    Serial.print(F("SpeedUARTDataRate BIN : "));  Serial.print(configuration.SPED.uartBaudRate, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getUARTBaudRate());
    Serial.print(F("SpeedAirDataRate BIN  : "));  Serial.print(configuration.SPED.airDataRate, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getAirDataRate());

    Serial.print(F("OptionTrans BIN       : "));  Serial.print(configuration.OPTION.fixedTransmission, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getFixedTransmissionDescription());
    Serial.print(F("OptionPullup BIN      : "));  Serial.print(configuration.OPTION.ioDriveMode, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getIODroveModeDescription());
    Serial.print(F("OptionWakeup BIN      : "));  Serial.print(configuration.OPTION.wirelessWakeupTime, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getWirelessWakeUPTimeDescription());
    Serial.print(F("OptionFEC BIN         : "));  Serial.print(configuration.OPTION.fec, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getFECDescription());
    Serial.print(F("OptionPower BIN       : "));  Serial.print(configuration.OPTION.transmissionPower, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getTransmissionPowerDescription());

    Serial.println("----------------------------------------");

}
void printModuleInformation(struct ModuleInformation moduleInformation) {
    Serial.println("----------------------------------------");
    Serial.print(F("HEAD BIN: "));  Serial.print(moduleInformation.HEAD, BIN);Serial.print(" ");Serial.print(moduleInformation.HEAD, DEC);Serial.print(" ");Serial.println(moduleInformation.HEAD, HEX);

    Serial.print(F("Model no.: "));  Serial.println(moduleInformation.model, HEX);
    Serial.print(F("Version  : "));  Serial.println(moduleInformation.version, HEX);
    Serial.print(F("Features : "));  Serial.println(moduleInformation.features, HEX);
    Serial.println("----------------------------------------");

}
xreef commented 4 years ago

I tested and works correctly, I close issue but I wait feedback. Thanks and bye Renzo

taurushappy commented 4 years ago
 Thanks  your help solve the problem with send message use json !  I am a Chinese student,and I want to know :
  1. how to buy your create arduino shield without use 4.7k resister when use LoRa E32? and how much the your create arduino shield ?
  2. how to find the passage about "LoRa E32 device for Arduino, esp32 or esp8266: real example ad WeMos D1 shield"
xreef commented 4 years ago

Hi taurushappy, Why don't you want to use 4.7k resistors? You can try with similar different value, but datasheet advise 4.7k. The price isn't relevant, I don't sell the shield, I give the possibility to buy from productor of PCB the PCB with my schema. I add the link here on github, but It exist already on my site. Bye Renzo

taurushappy commented 4 years ago

 Thanks !     If  I want  to  make  data terminal unit   product in lot project , i couldn't use  breadboard , it is too large! so I need small and convenience  pcb instead !

---Original--- From: "Renzo Mischianti"<notifications@github.com> Date: Mon, Feb 10, 2020 14:56 PM To: "xreef/LoRa_E32_Series_Library"<LoRa_E32_Series_Library@noreply.github.com>; Cc: "taurushappy"<564509167@qq.com>;"Author"<author@noreply.github.com>; Subject: Re: [xreef/LoRa_E32_Series_Library] How to Send Message use JSON Format ? (#1)

Hi taurushappy, Why don't you want to use 4.7k resistors? You can try with similar different value, but datasheet advise 4.7k. The price isn't relevant, I don't sell the shield, I give the possibility to buy from productor of PCB the PCB with my schema. I add the link here on github, but It exist already on my site. Bye Renzo

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

xreef commented 4 years ago

Ok, if you need some help for your project ask me. Bye Renzo