-
Notifications
You must be signed in to change notification settings - Fork 110
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
added example OTAA_OLED_interrupt_CLASS_C
- Loading branch information
1 parent
4398342
commit 2bb4ee5
Showing
1 changed file
with
178 additions
and
0 deletions.
There are no files selected for viewing
178 changes: 178 additions & 0 deletions
178
examples/OTAA_OLED_interrupt_CLASS_C/OTAA_OLED_interrupt_CLASS_C.ino
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,178 @@ | ||
/* | ||
* HelTec Automation(TM) LoRaWAN 1.0.2 OTAA example use OTAA, CLASS A | ||
* | ||
* Function summary: | ||
* | ||
* - use internal RTC(150KHz); | ||
* | ||
* - Include stop mode and deep sleep mode; | ||
* | ||
* - 15S data send cycle; | ||
* | ||
* - Informations output via serial(115200); | ||
* | ||
* - Only ESP32 + LoRa series boards can use this library, need a license | ||
* to make the code run(check you license here: http://www.heltec.cn/search ); | ||
* | ||
* You can change some definition in "Commissioning.h" and "LoRaMac-definitions.h" | ||
* | ||
* HelTec AutoMation, Chengdu, China. | ||
* 成都惠利特自动化科技有限公司 | ||
* https://heltec.org | ||
* support@heltec.cn | ||
* | ||
*this project also release in GitHub: | ||
*https://github.com/HelTecAutomation/ESP32_LoRaWAN | ||
*/ | ||
|
||
#include <ESP32_LoRaWAN.h> | ||
#include "Arduino.h" | ||
|
||
#define INT_PIN 12 | ||
/*license for Heltec ESP32 LoRaWan, quary your ChipID relevant license: http://resource.heltec.cn/search */ | ||
uint32_t license[4] = {0x0C6EE449, 0x446722FE, 0x6758DEB6, 0x0C4A735E}; | ||
/* OTAA para*/ | ||
uint8_t DevEui[] = { 0x22, 0x32, 0x33, 0x00, 0x00, 0x88, 0x88, 0x02 }; | ||
uint8_t AppEui[] = { 0x70, 0xB3, 0xD5, 0x7E, 0xD0, 0x02, 0xB1, 0x8A }; | ||
uint8_t AppKey[] = { 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x66, 0x01 }; | ||
|
||
/* ABP para*/ | ||
uint8_t NwkSKey[] = { 0x15, 0xb1, 0xd0, 0xef, 0xa4, 0x63, 0xdf, 0xbe, 0x3d, 0x11, 0x18, 0x1e, 0x1e, 0xc7, 0xda,0x85 }; | ||
uint8_t AppSKey[] = { 0xd7, 0x2c, 0x78, 0x75, 0x8c, 0xdc, 0xca, 0xbf, 0x55, 0xee, 0x4a, 0x77, 0x8d, 0x16, 0xef,0x67 }; | ||
uint32_t DevAddr = ( uint32_t )0x007e6ae1; | ||
|
||
/*LoraWan channelsmask, default channels 0-7*/ | ||
uint16_t userChannelsMask[6]={ 0x00FF,0x0000,0x0000,0x0000,0x0000,0x0000 }; | ||
|
||
/*LoraWan Class, Class A and Class C are supported*/ | ||
DeviceClass_t loraWanClass = CLASS_C; | ||
|
||
/*the application data transmission duty cycle. value in [ms].*/ | ||
uint32_t appTxDutyCycle = 3600*24*1000; | ||
|
||
/*OTAA or ABP*/ | ||
bool overTheAirActivation = true; | ||
|
||
/*ADR enable*/ | ||
bool loraWanAdr = true; | ||
|
||
/* Indicates if the node is sending confirmed or unconfirmed messages */ | ||
bool isTxConfirmed = true; | ||
|
||
/* Application port */ | ||
uint8_t appPort = 2; | ||
|
||
/*! | ||
* Number of trials to transmit the frame, if the LoRaMAC layer did not | ||
* receive an acknowledgment. The MAC performs a datarate adaptation, | ||
* according to the LoRaWAN Specification V1.0.2, chapter 18.4, according | ||
* to the following table: | ||
* | ||
* Transmission nb | Data Rate | ||
* ----------------|----------- | ||
* 1 (first) | DR | ||
* 2 | DR | ||
* 3 | max(DR-1,0) | ||
* 4 | max(DR-1,0) | ||
* 5 | max(DR-2,0) | ||
* 6 | max(DR-2,0) | ||
* 7 | max(DR-3,0) | ||
* 8 | max(DR-3,0) | ||
* | ||
* Note, that if NbTrials is set to 1 or 2, the MAC will not decrease | ||
* the datarate, in case the LoRaMAC layer did not receive an acknowledgment | ||
*/ | ||
uint8_t confirmedNbTrials = 1; | ||
|
||
/*LoraWan debug level, select in arduino IDE tools. | ||
* None : print basic info. | ||
* Freq : print Tx and Rx freq, DR info. | ||
* Freq && DIO : print Tx and Rx freq, DR, DIO0 interrupt and DIO1 interrupt info. | ||
* Freq && DIO && PW: print Tx and Rx freq, DR, DIO0 interrupt, DIO1 interrupt, MCU sleep and MCU wake info. | ||
*/ | ||
uint8_t debugLevel = LoRaWAN_DEBUG_LEVEL; | ||
|
||
/*LoraWan region, select in arduino IDE tools*/ | ||
LoRaMacRegion_t loraWanRegion = ACTIVE_REGION; | ||
|
||
|
||
static void prepareTxFrame( uint8_t port ) | ||
{ | ||
appDataSize = 4; | ||
appData[0] = 0x00; | ||
appData[1] = 0x01; | ||
appData[2] = 0x02; | ||
appData[3] = 0x03; | ||
} | ||
|
||
void keyDown() | ||
{ | ||
delay(10); | ||
if(digitalRead(INT_PIN)==1 && IsLoRaMacNetworkJoined) | ||
{ | ||
deviceState = DEVICE_STATE_SEND; | ||
} | ||
} | ||
// Add your initialization code here | ||
void setup() | ||
{ | ||
if(mcuStarted==0) | ||
{ | ||
LoRaWAN.displayMcuInit(); | ||
} | ||
Serial.begin(115200); | ||
while (!Serial); | ||
SPI.begin(SCK,MISO,MOSI,SS); | ||
Mcu.init(SS,RST_LoRa,DIO0,DIO1,license); | ||
delay(100); | ||
pinMode(INT_PIN,INPUT_PULLUP); | ||
attachInterrupt(INT_PIN,keyDown,RISING); | ||
deviceState = DEVICE_STATE_INIT; | ||
} | ||
|
||
|
||
// The loop function is called in an endless loop | ||
void loop() | ||
{ | ||
switch( deviceState ) | ||
{ | ||
case DEVICE_STATE_INIT: | ||
{ | ||
LoRaWAN.init(loraWanClass,loraWanRegion); | ||
break; | ||
} | ||
case DEVICE_STATE_JOIN: | ||
{ | ||
LoRaWAN.displayJoining(); | ||
LoRaWAN.join(); | ||
break; | ||
} | ||
case DEVICE_STATE_SEND: | ||
{ | ||
LoRaWAN.displaySending(); | ||
prepareTxFrame( appPort ); | ||
LoRaWAN.send(loraWanClass); | ||
deviceState = DEVICE_STATE_CYCLE; | ||
break; | ||
} | ||
case DEVICE_STATE_CYCLE: | ||
{ | ||
// Schedule next packet transmission | ||
txDutyCycleTime = appTxDutyCycle + randr( -APP_TX_DUTYCYCLE_RND, APP_TX_DUTYCYCLE_RND ); | ||
LoRaWAN.cycle(txDutyCycleTime); | ||
deviceState = DEVICE_STATE_SLEEP; | ||
break; | ||
} | ||
case DEVICE_STATE_SLEEP: | ||
{ | ||
LoRaWAN.displayAck(); | ||
LoRaWAN.sleep(loraWanClass,debugLevel); | ||
break; | ||
} | ||
default: | ||
{ | ||
deviceState = DEVICE_STATE_INIT; | ||
break; | ||
} | ||
} | ||
} |