Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SoftwareSerial.h>
- #include <lmic.h>
- #include <hal/hal.h>
- #include <SPI.h>
- SoftwareSerial Kekistan(11, 12); // RX | TX
- // This EUI must be in little-endian format, so least-significant-byte
- // first. When copying an EUI from ttnctl output, this means to reverse
- // the bytes. For TTN issued EUIs the last bytes should be 0xD5, 0xB3,
- // 0x70.
- static const u1_t PROGMEM APPEUI[8]={ 0xDA, 0xBA, 0x02, 0xD0, 0x7E, 0xD5, 0xB3, 0x70 };
- void os_getArtEui (u1_t* buf) { memcpy_P(buf, APPEUI, 8);}
- // This should also be in little endian format, see above.
- static const u1_t PROGMEM DEVEUI[8]={ 0x56, 0x34, 0x12, 0x90, 0x78, 0x56, 0x34, 0x12 };
- void os_getDevEui (u1_t* buf) { memcpy_P(buf, DEVEUI, 8);}
- // This key should be in big endian format (or, since it is not really a
- // number but a block of memory, endianness does not really apply). In
- // practice, a key taken from ttnctl can be copied as-is.
- // The key shown here is the semtech default key.
- static const u1_t PROGMEM APPKEY[16] = { 0x92, 0xE4, 0xD5, 0xB7, 0x31, 0xC3, 0xB0, 0x65, 0x4B, 0x58, 0x62, 0xC9, 0xCA, 0x7B, 0xCA, 0x62 };
- void os_getDevKey (u1_t* buf) { memcpy_P(buf, APPKEY, 16);}
- static uint8_t mydata[7];
- static osjob_t sendjob;
- // Schedule TX every this many seconds (might become longer due to duty
- // cycle limitations).
- const unsigned TX_INTERVAL = 30;
- // Pin mapping
- const lmic_pinmap lmic_pins = {
- .nss = 10,
- .rxtx = LMIC_UNUSED_PIN,
- .rst = 9,
- .dio = {2, 6, 7},
- };
- void setup()
- {
- #ifdef VCC_ENABLE
- // For Pinoccio Scout boards
- pinMode(VCC_ENABLE, OUTPUT);
- digitalWrite(VCC_ENABLE, HIGH);
- delay(1000);
- #endif
- // LMIC init
- os_init();
- // Reset the MAC state. Session and pending data transfers will be discarded.
- LMIC_reset();
- // Start job (sending automatically starts OTAA too)
- do_send(&sendjob);
- Serial.begin(9600);
- Serial.println("The bluetooth gates are open.\n Connect to HC-05 from any other bluetooth device with 1234 as pairing key!.");
- Kekistan.begin(38400); //Default Baud for comm, it may be different for your Module.
- Kekistan.println("WELCOME TO Kekistan");
- }
- void loop()
- {
- os_runloop_once();
- String a = "acc";
- a.getBytes(mydata,a.length()+1);
- // Feed any data from bluetooth to Terminal.
- if (Kekistan.available()){
- Serial.write(Kekistan.read());
- String a = Kekistan.readString();
- a.getBytes(mydata,a.length()+1);
- }
- // Feed all data from termial to bluetooth
- if (Serial.available())
- Kekistan.write(Serial.read());
- }
- void onEvent (ev_t ev) {
- Serial.print(os_getTime());
- Serial.print(": ");
- switch(ev) {
- case EV_SCAN_TIMEOUT:
- Serial.println(F("EV_SCAN_TIMEOUT"));
- break;
- case EV_BEACON_FOUND:
- Serial.println(F("EV_BEACON_FOUND"));
- break;
- case EV_BEACON_MISSED:
- Serial.println(F("EV_BEACON_MISSED"));
- break;
- case EV_BEACON_TRACKED:
- Serial.println(F("EV_BEACON_TRACKED"));
- break;
- case EV_JOINING:
- Serial.println(F("EV_JOINING"));
- break;
- case EV_JOINED:
- Serial.println(F("EV_JOINED"));
- // Disable link check validation (automatically enabled
- // during join, but not supported by TTN at this time).
- LMIC_setLinkCheckMode(0);
- break;
- case EV_RFU1:
- Serial.println(F("EV_RFU1"));
- break;
- case EV_JOIN_FAILED:
- Serial.println(F("EV_JOIN_FAILED"));
- break;
- case EV_REJOIN_FAILED:
- Serial.println(F("EV_REJOIN_FAILED"));
- break;
- break;
- case EV_TXCOMPLETE:
- Serial.println(F("EV_TXCOMPLETE (includes waiting for RX windows)"));
- if (LMIC.txrxFlags & TXRX_ACK)
- Serial.println(F("Received ack"));
- if (LMIC.dataLen) {
- Serial.println(F("Received "));
- Serial.println(LMIC.dataLen);
- Serial.println(F(" bytes of payload"));
- uint8_t result = LMIC.frame[LMIC.dataBeg + 0];
- Serial.println(F(" Payload: "));
- Serial.println(result);
- }
- // Schedule next transmission
- os_setTimedCallback(&sendjob, os_getTime()+sec2osticks(TX_INTERVAL), do_send);
- break;
- case EV_LOST_TSYNC:
- Serial.println(F("EV_LOST_TSYNC"));
- break;
- case EV_RESET:
- Serial.println(F("EV_RESET"));
- break;
- case EV_RXCOMPLETE:
- // data received in ping slot
- Serial.println(F("EV_RXCOMPLETE"));
- break;
- case EV_LINK_DEAD:
- Serial.println(F("EV_LINK_DEAD"));
- break;
- case EV_LINK_ALIVE:
- Serial.println(F("EV_LINK_ALIVE"));
- break;
- default:
- Serial.println(F("Unknown event"));
- break;
- }
- }
- void do_send(osjob_t* j){
- // Check if there is not a current TX/RX job running
- if (LMIC.opmode & OP_TXRXPEND) {
- Serial.println(F("OP_TXRXPEND, not sending"));
- } else {
- // Prepare upstream data transmission at the next possible time.
- LMIC_setTxData2(1, mydata, sizeof(mydata)-1, 0);
- Serial.println(F("Packet queued"));
- }
- // Next TX is scheduled after TX_COMPLETE event.
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement