Moved LoRaWAN reconnect to separated task

This commit is contained in:
Filip Znachor 2022-12-15 17:35:25 +01:00
parent 179336ef7b
commit 570f3313da
2 changed files with 21 additions and 6 deletions

View file

@ -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í

View file

@ -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);
}