diff --git a/README.md b/README.md index 2e56b07..6140ef1 100644 --- a/README.md +++ b/README.md @@ -11,10 +11,12 @@ Odjezdová tabule městské hromadné dopravy v Plzni postavená na protokolu Lo - automatické obnovení ztraceného připojení ### 🧰 Použité technologie + - **C/C++**, **Python**, **LoRaWAN** - HTML, CSS, JavaScript, Vue.js ### ⚙️ Použité součástky + - [M5Stack Core2](https://shop.m5stack.com/products/m5stack-core2-esp32-iot-development-kit) - [LoRaWAN UNIT 868MHz (ASR6501)](https://shop.m5stack.com/products/lorawan-unit-868mhz-asr6501-with-antenna) - kabely k propojení diff --git a/client/client.ino b/client/client.ino index 0929fb6..cf26ef3 100644 --- a/client/client.ino +++ b/client/client.ino @@ -13,11 +13,14 @@ M5_LoRaWAN LoRaWAN; bool connected = false; int lastMessage = 0; +void delay(int d) { + vTaskDelay(d/portTICK_PERIOD_MS); +} + void setupLoRaWAN() { connected = false; LoRaWAN.Init(&Serial2, 13, 14); - delay(100); Serial.println("Connecting..."); while (!LoRaWAN.checkDeviceConnect()); LoRaWAN.writeCMD("AT?\r\n"); @@ -56,6 +59,7 @@ void setupLoRaWAN() { LoRaWAN.startJoin(); while(true) { + delay(10); String recvMsg = LoRaWAN.waitMsg(1000); recvMsg.trim(); if(recvMsg == "+CJOIN:OK") { @@ -80,8 +84,9 @@ void setup() { setupLoRaWAN(); M5.Lcd.drawString("Connected!", 0, 30); delay(500); + M5.Lcd.clear(); - xTaskCreatePinnedToCore(task1, "task1", 4096, NULL, 1, NULL, 1); + xTaskCreatePinnedToCore(taskReceiving, "taskReceiving", 4096, NULL, 1, NULL, 1); } @@ -368,12 +373,13 @@ void addDeparture(String s) { + // Main loop with time counting void loop() { seconds = time(NULL); - if(seconds - lastMessage > INACTIVITY_TIME) { - setupLoRaWAN(); + if(connected && seconds - lastMessage > INACTIVITY_TIME) { + xTaskCreate(taskReconnect, "taskReconnect", 4096, NULL, 1, NULL); } if(seconds / 6 > lastUpdate) { lastUpdate++; @@ -384,11 +390,18 @@ void loop() { delay(900); } -// Additional task for receiving LoRaWAN messages +// Task for receiving LoRaWAN messages -void task1(void* params) { +void taskReceiving(void* params) { while(true) { if(connected) receiveMsg(1); else delay(1000); } } + +// Task for reconnecting + +void taskReconnect(void* params) { + setupLoRaWAN(); + vTaskDelete(NULL); +}