Temperature reading using NUCLEO-L152RE microcontroller and Grove – Temperature&Humidity Sensor Pro.
Dependencies: DHT LMiC SX1276Lib mbed
Fork of LoRaWAN_send_text by
main.cpp
- Committer:
- tamberg
- Date:
- 2015-09-16
- Revision:
- 8:747796516a2f
- Parent:
- 7:4adfa7248a0b
- Child:
- 9:fdd150f9db9e
File content as of revision 8:747796516a2f:
/* License: Revised BSD License, see LICENSE.TXT, (c)2015 tamberg.org, (c)2015 Semtech */ #include "mbed.h" #include "lmic.h" #include "debug.h" #define LORAWAN_NET_ID (uint32_t) 0x00000000 #define LORAWAN_DEV_ADDR (uint32_t) 0x00001056 #define LORAWAN_ADR_ON 1 #define LORAWAN_CONFIRMED_MSG_ON 1 #define LORAWAN_APP_PORT 15 #define LORAWAN_APP_DATA_SIZE 1 // 32 // max 51 static uint8_t NwkSKey[] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF }; static uint8_t ArtSKey[] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF }; osjob_t sendFrameJob; void os_getArtEui (uint8_t *buf) {} // ignore void os_getDevEui (uint8_t *buf) {} // ignore void os_getDevKey (uint8_t *buf) {} // ignore u1_t n = 0; static void prepareTxFrame (void) { debug_str("prepareTxFrame\r\n"); //for (int i = 0; i < LORAWAN_APP_DATA_SIZE; i++) { // LMIC.frame[i] = n; //} //n++; LMIC.frame[0] = n++; } void processRxFrame (void) { debug_str("processRxFrame\r\n"); u1_t rxPort = LMIC.frame[LMIC.dataBeg - 1]; debug_val("rxPort", rxPort); for (int i = 0; i < LMIC.dataLen; i++) { debug_hex(LMIC.frame[LMIC.dataBeg + i]); debug_char(' '); } } static void onSendFrame (osjob_t* j) { debug_str("onSendFrame\r\n"); prepareTxFrame(); int result = LMIC_setTxData2( LORAWAN_APP_PORT, LMIC.frame, LORAWAN_APP_DATA_SIZE, LORAWAN_CONFIRMED_MSG_ON); // calls onEvent() debug_val("LMIC_setTxData2, result = ", result); } static void onInit (osjob_t* j) { debug_str("onInit\r\n"); LMIC_reset(); // reset MAC state LMIC_setAdrMode(LORAWAN_ADR_ON); LMIC_setDrTxpow(DR_SF12, 16); // 14 LMIC_setSession( LORAWAN_NET_ID, LORAWAN_DEV_ADDR, NwkSKey, ArtSKey); onSendFrame(NULL); } void onEvent (ev_t ev) { // called by lmic.cpp, see also oslmic.h debug_str("onEvent\r\n"); debug_event(ev); if (ev == EV_TXCOMPLETE) { // scheduled data sent (optionally data received) debug_val("Datarate = ", LMIC.datarate); if ((LMIC.txrxFlags & (TXRX_DNW1 | TXRX_DNW2)) != 0) { // downlink? if (LMIC.dataLen != 0) { // data received in rx slot after tx debug_buf(LMIC.frame + LMIC.dataBeg, LMIC.dataLen); processRxFrame(); } } //os_setTimedCallback(&sendFrameJob, os_getTime() + 5000, onSendFrame); os_setCallback(&sendFrameJob, onSendFrame); } } int main (void) { debug_str("main\r\n"); osjob_t initjob; os_init(); os_setCallback(&initjob, onInit); os_runloop(); // blocking }