LoRaWAN915.ino 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. #include "M5Stack.h"
  2. #include "TFTTerminal.h"
  3. #include "freertos/queue.h"
  4. TFT_eSprite TerminalBuff = TFT_eSprite(&M5.Lcd);
  5. TFTTerminal terminal(&TerminalBuff);
  6. String waitRevice() {
  7. String recvStr;
  8. do {
  9. recvStr = Serial2.readStringUntil('\n');
  10. } while (recvStr.length() == 0);
  11. Serial.println(recvStr);
  12. terminal.println(recvStr);
  13. return recvStr;
  14. }
  15. void sendATCMD(String cmdStr) {
  16. Serial2.print(cmdStr);
  17. delay(100);
  18. }
  19. int sendATCMDAndRevice(String cmdStr) {
  20. Serial2.print(cmdStr);
  21. delay(100);
  22. waitRevice();
  23. String recvStr = waitRevice();
  24. if (recvStr.indexOf("OK") != -1) {
  25. return 0;
  26. } else {
  27. return -1;
  28. }
  29. }
  30. void setup() {
  31. M5.begin();
  32. Serial2.begin(115200, SERIAL_8N1, 16, 17);
  33. Serial2.flush();
  34. delay(100);
  35. M5.Lcd.fillRect(0, 0, 320, 240, TFT_BLACK);
  36. M5.Lcd.fillRect(0, 0, 320, 40, TFT_WHITE);
  37. M5.Lcd.setTextColor(TFT_BLACK);
  38. M5.Lcd.setTextDatum(TC_DATUM);
  39. M5.Lcd.drawString("Unit-LoraWan(915) TEST", 160, 10, 4);
  40. M5.Lcd.setTextDatum(TL_DATUM);
  41. M5.Lcd.setTextColor(TFT_WHITE);
  42. TerminalBuff.createSprite(240, 200);
  43. terminal.setGeometry(20, 55, 300, 200);
  44. terminal.setFontsize(1);
  45. sendATCMD("AT?\r\n");
  46. delay(100);
  47. Serial2.flush();
  48. sendATCMDAndRevice("AT+ILOGLVL=0\r\n");
  49. sendATCMDAndRevice("AT+CSAVE\r\n");
  50. sendATCMDAndRevice("AT+IREBOOT=0\r\n");
  51. terminal.println("LoraWan Rebooting");
  52. delay(2000);
  53. terminal.println("LoraWan config");
  54. // Set Join Mode OTAA
  55. sendATCMDAndRevice("AT+CJOINMODE=0\r\n");
  56. sendATCMDAndRevice("AT+CDEVEUI=d896e0ff00000240\r\n");
  57. sendATCMDAndRevice("AT+CAPPEUI=0000000000000001\r\n");
  58. sendATCMDAndRevice("AT+CAPPKEY=98929b92f09e2daf676d646d0f61d250\r\n");
  59. sendATCMDAndRevice("AT+CULDLMODE=2\r\n");
  60. // Set ClassC mode
  61. sendATCMDAndRevice("AT+CCLASS=2\r\n");
  62. sendATCMDAndRevice("AT+CWORKMODE=2\r\n");
  63. sendATCMDAndRevice("AT+CRXP=0,0,923300000\r\n");
  64. // TX Freq
  65. // 902.3
  66. // 902.5
  67. // 902.7
  68. // 902.9
  69. // 903.1
  70. // 903.3
  71. // 903.5
  72. // 903.7
  73. // MARK 0000 0000 0000 0001 | 0x001
  74. sendATCMDAndRevice("AT+CFREQBANDMASK=0001\r\n");
  75. // RX Freq
  76. // 923.3 - (RX1)
  77. // 923.9 - (RX1)
  78. // 924.5 - (RX1)
  79. // 925.1 - (RX1)
  80. // 925.7 - (RX1)
  81. // 926.3 - (RX1)
  82. // 926.9 - (RX1)
  83. // 927.5 - (RX1)
  84. // 923.3 - (RX2) | 923300000
  85. sendATCMDAndRevice("AT+CJOIN=1,0,10,8\r\n");
  86. }
  87. enum systemstate {
  88. kIdel = 0,
  89. kJoined,
  90. kSending,
  91. kWaitSend,
  92. kEnd,
  93. };
  94. int system_fsm = kIdel;
  95. int loraWanSendNUM = -1;
  96. int loraWanSendCNT = -1;
  97. void loop() {
  98. String recvStr = waitRevice();
  99. if (recvStr.indexOf("+CJOIN:") != -1) {
  100. if (recvStr.indexOf("OK") != -1) {
  101. Serial.println("[ INFO ] JOIN IN SUCCESSFUL");
  102. terminal.println("LoraWan JOIN");
  103. system_fsm = kJoined;
  104. } else {
  105. Serial.println("[ INFO ] JOIN IN FAIL");
  106. terminal.println("LoraWan JOIN FAIL");
  107. system_fsm = kIdel;
  108. }
  109. } else if (recvStr.indexOf("OK+RECV") != -1) {
  110. if (system_fsm == kJoined) {
  111. system_fsm = kSending;
  112. } else if (system_fsm == kWaitSend) {
  113. system_fsm = kSending;
  114. char strbuff[128];
  115. if ((loraWanSendCNT < 5) && (loraWanSendNUM == 8)) {
  116. sprintf(strbuff, "TSET OK CNT: %d", loraWanSendCNT);
  117. terminal.println(strbuff);
  118. } else {
  119. sprintf(strbuff, "FAILD NUM:%d CNT:%d", loraWanSendNUM,
  120. loraWanSendCNT);
  121. terminal.println(strbuff);
  122. }
  123. }
  124. } else if (recvStr.indexOf("OK+SEND") != -1) {
  125. String snednum = recvStr.substring(8);
  126. // Serial.printf(" [ INFO ] SEND NUM %s \r\n",snednum.c_str());
  127. loraWanSendNUM = snednum.toInt();
  128. } else if (recvStr.indexOf("OK+SENT") != -1) {
  129. String snedcnt = recvStr.substring(8);
  130. // Serial.printf(" [ INFO ] SEND CNT %s \r\n",snedcnt.c_str());
  131. loraWanSendCNT = snedcnt.toInt();
  132. }
  133. if (system_fsm == kSending) {
  134. terminal.println("LoraWan Sending");
  135. sendATCMD("AT+DTRX=1,15,8,4655434b20535443\r\n");
  136. system_fsm = kWaitSend;
  137. }
  138. // if (M5.BtnA.wasPressed())
  139. // {
  140. // sendATCMDAndRevice("AT+CLINKCHECK=1\r\n");
  141. // delay(100);
  142. // }
  143. // if (M5.BtnB.wasPressed())
  144. // {
  145. // sendATCMDAndRevice("AT+DTRX=1,15,8,4655434b20535443\r\n");
  146. // delay(100);
  147. // }
  148. // if (M5.BtnC.wasPressed())
  149. // {
  150. // sendATCMDAndRevice("AT+DRX?\r\n");
  151. // delay(100);
  152. // }
  153. delay(10);
  154. M5.update();
  155. }