[IoT EDGE V.3 Board] LoRa Communication Test. , Heltec CubeCell Capsule BMP180

Supphakarin Phoruangrong
4 min readMay 18, 2021

Device

  • IoT EDGE V.3 Board
  • LoRa Shield Dragino V.1.4
  • CubCell Capsule BMP180 (Temperature and Humidity)

Software

Library for Arduino IDE

Model Test

  • IoT EDGE V.3 Board + LoRa Shield (Receive)
  • CubCell Capsule BMP180 (Node)

Source Code

  • IoT EDGE V.3 + LoRa, Pressure (Download)

Explain

ในการทดสอบการใช้งานบอร์ด IoT EAGE V.3 ในบทความนี้ความจะทดสอบการสื่อสารแบบ LoRa ใช้ในการส่งข้อมูลระหว่าง ตัวรับ(Receive) และ ตัวส่งข้อมูล(Node) ในตัวของตัวส่งมี วัดความดันบรรยากาศ ของ Heltec BMP180
ความถี่ใช้งาน 915 MHz หลักการในการส่งใช้แบบ LoRa Modulation

Method

  1. Install CubCell Capsule Heltec
  • Open Arduino 2.0 Beta → File → Preferences → Copy URL → Press on Additional boards manager URLs : → Ok

https://resource.heltec.cn/download/package_CubeCell_index.json

2.Search Board

  • Tools → Board → Boards Manager → click → Search : CubeCell → Install

3.เขียน Code

IoT EDGE V.3 + LoRa Shield

#include <SPI.h>
#include <LoRa.h>
#define ss 2
#define reset 17
#define dio0 26void setup() {
Serial.begin(115200);
while (!Serial);
LoRa.setPins(ss, reset, dio0);
Serial.println("LoRa Receiver");if (!LoRa.begin(915E6)) {
Serial.println("Starting LoRa failed!");
while (1);
}
}void loop() {
// try to parse packet
int packetSize = LoRa.parsePacket();
if (packetSize) {
// received a packet
Serial.print("Received packet '");// read packet
while (LoRa.available()) {
Serial.print((char)LoRa.read());
}// print RSSI of packet
Serial.print("' with RSSI ");
Serial.println(LoRa.packetRssi());
}
}

Capsule BMP180

/* Heltec Automation send communication test example
*
* Function:
* 1. Send data from a CubeCell device over hardware
*
*
* this project also realess in GitHub:
* https://github.com/HelTecAutomation/ASR650x-Arduino
* */
#include "LoRaWan_APP.h"
#include "Arduino.h"
#include <Wire.h>
#include <BMP180.h>
BMP085 bmp;
/*
* set LoraWan_RGB to 1,the RGB active in loraWan
* RGB red means sending;
* RGB green means received done;
*/
#ifndef LoraWan_RGB
#define LoraWan_RGB 0
#endif
#define RF_FREQUENCY 915000000 // Hz#define TX_OUTPUT_POWER 14 // dBm#define LORA_BANDWIDTH 0 // [0: 125 kHz,
// 1: 250 kHz,
// 2: 500 kHz,
// 3: Reserved]
#define LORA_SPREADING_FACTOR 7 // [SF7..SF12]
#define LORA_CODINGRATE 1 // [1: 4/5,
// 2: 4/6,
// 3: 4/7,
// 4: 4/8]
#define LORA_PREAMBLE_LENGTH 8 // Same for Tx and Rx
#define LORA_SYMBOL_TIMEOUT 0 // Symbols
#define LORA_FIX_LENGTH_PAYLOAD_ON false
#define LORA_IQ_INVERSION_ON false
#define RX_TIMEOUT_VALUE 1000
#define BUFFER_SIZE 30 // Define the payload size here
char txpacket[BUFFER_SIZE];
char rxpacket[BUFFER_SIZE];
static RadioEvents_t RadioEvents;double txNumber;int16_t rssi,rxSize;
void DoubleToString( char *str, double double_num,unsigned int len);
void setup() {
pinMode(Vext,OUTPUT);
digitalWrite(Vext,LOW);
Serial.begin(115200);
txNumber=0;
rssi=0;
Radio.Init( &RadioEvents );
Radio.SetChannel( RF_FREQUENCY );
Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,
LORA_SPREADING_FACTOR, LORA_CODINGRATE,
LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
true, 0, 0, LORA_IQ_INVERSION_ON, 3000 );
}
void loop()
{
Serial.print("Temperature = ");
Serial.print(bmp.readTemperature());
Serial.println(" *C");
int Pressure = bmp.readPressure();
Serial.print("Pressure = ");
Serial.print(bmp.readPressure());
Serial.println(" Pa");
delay(1000);
txNumber += 0.01;
sprintf(txpacket,"%s","Pressure = "); //start a package
sprintf(txpacket+strlen(txpacket),"%d / ",Pressure); //add to the end of package

DoubleToString(txpacket,txNumber,3); //add to the end of package

turnOnRGB(COLOR_SEND,0); //change rgb color
Serial.printf("\r\nsending packet \"%s\" , length %d\r\n",txpacket, strlen(txpacket));Radio.Send( (uint8_t *)txpacket, strlen(txpacket) ); //send the package out
}
/**
* @brief Double To String
* @param str: Array or pointer for storing strings
* @param double_num: Number to be converted
* @param len: Fractional length to keep
* @retval None
*/
void DoubleToString( char *str, double double_num,unsigned int len) {
double fractpart, intpart;
fractpart = modf(double_num, &intpart);
fractpart = fractpart * (pow(10,len));
sprintf(str + strlen(str),"%d", (int)(intpart)); //Integer part
sprintf(str + strlen(str), ".%d", (int)(fractpart)); //Decimal part
}

4. Code Upload

IoT EDGE V.3 + LoRa Shield (Board →ESP32 → ESP32DeV Module)

Capsule BMP180 (Board →CubeCell → CubeCell-Capsule)

5. ดูข้อมูลจาก Serial Monitor ของ IoT EDGE V.3

Reference

--

--