first Draft of UART for external LoRa-Module
This commit is contained in:
		| @@ -2,10 +2,16 @@ | |||||||
| #define _LORA_NET_H_ | #define _LORA_NET_H_ | ||||||
|  |  | ||||||
| #include <Arduino.h> | #include <Arduino.h> | ||||||
|  |  | ||||||
|  | #ifdef LORA_FEATURE_ENABLED | ||||||
| #include <LoRa_E220.h> | #include <LoRa_E220.h> | ||||||
|  | #elif defined(FEATURE_ENABLE_UARTLORA) | ||||||
|  | #include <SoftwareSerial.h> | ||||||
|  | #endif | ||||||
|  |  | ||||||
| // local includes | // local includes | ||||||
| #include "lora_messages.h" | #include "lora_messages.h" | ||||||
|  | #include "debugger.h" | ||||||
| #include "defaults.h" | #include "defaults.h" | ||||||
| #include "config.h" | #include "config.h" | ||||||
| #include "globals.h" | #include "globals.h" | ||||||
|   | |||||||
| @@ -14,6 +14,9 @@ | |||||||
|     #error "You must define an WIFI_AP_PASSWORD for Standalone AP-Mode" |     #error "You must define an WIFI_AP_PASSWORD for Standalone AP-Mode" | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | #if defined(FEATURE_ENABLE_UARTLORA) && defined(FEATURE_ENABLE_LORA) | ||||||
|  |     #error "You cannot enable LoRa and UART-Protocol at the same time!" | ||||||
|  | #endif | ||||||
|  |  | ||||||
| #ifdef FEATURE_ENABLE_WIFI_CLIENT | #ifdef FEATURE_ENABLE_WIFI_CLIENT | ||||||
|     #ifndef WIFI_CLIENT_PASSWORD |     #ifndef WIFI_CLIENT_PASSWORD | ||||||
|   | |||||||
| @@ -30,6 +30,7 @@ build_flags= | |||||||
|   ;-DFEATURE_ENABLE_WIFI_CLIENT |   ;-DFEATURE_ENABLE_WIFI_CLIENT | ||||||
|   ;-DFEATURE_ENABLE_LORA |   ;-DFEATURE_ENABLE_LORA | ||||||
|   ;-DCAPTIVE |   ;-DCAPTIVE | ||||||
|  |   -DFEATURE_ENABLE_UARTLORA | ||||||
|   -DWIFI_AP_IP_GW=10,0,0,1 |   -DWIFI_AP_IP_GW=10,0,0,1 | ||||||
|   -DADMIN_PASSWORD=${wifi_cred.ota_password} |   -DADMIN_PASSWORD=${wifi_cred.ota_password} | ||||||
|   -DWIFI_CLIENT_SSID=${wifi_cred.wifi_client_ssid} |   -DWIFI_CLIENT_SSID=${wifi_cred.wifi_client_ssid} | ||||||
|   | |||||||
| @@ -1,13 +1,19 @@ | |||||||
| #include "lora_net.h" | #include "lora_net.h" | ||||||
|  |  | ||||||
|  | #ifdef FEATURE_ENABLE_LORA | ||||||
| LoRa_E220 e220ttl(GPIO_LORA_TX, GPIO_LORA_RX, GPIO_LORA_AUX, 3, 4); // Arduino RX <-- e220 TX, Arduino TX --> e220 RX AUX M0 M1 | LoRa_E220 e220ttl(GPIO_LORA_TX, GPIO_LORA_RX, GPIO_LORA_AUX, 3, 4); // Arduino RX <-- e220 TX, Arduino TX --> e220 RX AUX M0 M1 | ||||||
|  |  | ||||||
| void printParameters(struct Configuration configuration); | void printParameters(struct Configuration configuration); | ||||||
| void printModuleInformation(struct ModuleInformation moduleInformation); | void printModuleInformation(struct ModuleInformation moduleInformation); | ||||||
|  | #elif defined(FEATURE_ENABLE_UARTLORA) | ||||||
|  | SoftwareSerial SerialLoRa(GPIO_LORA_RX, GPIO_LORA_TX); // RX, TX | ||||||
|  | void Parse_LoRa_UartCommand(char input[], int size); | ||||||
|  | #endif | ||||||
|  |  | ||||||
| bool InitLoRa(void (*MPinHelper)(int, int)) | bool InitLoRa(void (*MPinHelper)(int, int)) | ||||||
| { | { | ||||||
|     bool returnval; |     bool returnval = false; | ||||||
|  |  | ||||||
|  | #ifdef FEATURE_ENABLE_LORA | ||||||
|  |  | ||||||
|     e220ttl.setMPins = MPinHelper; |     e220ttl.setMPins = MPinHelper; | ||||||
|     returnval = e220ttl.begin(); |     returnval = e220ttl.begin(); | ||||||
| @@ -60,11 +66,15 @@ bool InitLoRa(void (*MPinHelper)(int, int)) | |||||||
|     { |     { | ||||||
|         MaintainDTC(DTC_NO_LORA_FOUND, DTC_WARN, true); |         MaintainDTC(DTC_NO_LORA_FOUND, DTC_WARN, true); | ||||||
|     } |     } | ||||||
|  | #elif defined(FEATURE_ENABLE_UARTLORA) | ||||||
|  |     // LORA UART Stuff here | ||||||
|  | #endif | ||||||
|     return returnval; |     return returnval; | ||||||
| } | } | ||||||
|  |  | ||||||
| void LoRa_Process() | void LoRa_Process() | ||||||
| { | { | ||||||
|  | #ifdef FEATURE_ENABLE_LORA | ||||||
|     if (e220ttl.available() > 1) |     if (e220ttl.available() > 1) | ||||||
|     { |     { | ||||||
|         ResponseContainer rc = e220ttl.receiveMessageRSSI(); |         ResponseContainer rc = e220ttl.receiveMessageRSSI(); | ||||||
| @@ -82,10 +92,50 @@ void LoRa_Process() | |||||||
|             Serial.println(rc.rssi, DEC); |             Serial.println(rc.rssi, DEC); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | #elif defined(FEATURE_ENABLE_UARTLORA) | ||||||
|  |  | ||||||
|  |     char packageInput[16]; | ||||||
|  |     bool packageRecieved = false; | ||||||
|  |     unsigned int bufferPtr = 0; | ||||||
|  |  | ||||||
|  |     if (SerialLoRa.available() && packageRecieved == false) | ||||||
|  |     { | ||||||
|  |         while (bufferPtr < sizeof(packageInput)) | ||||||
|  |         { | ||||||
|  |             packageInput[bufferPtr] = SerialLoRa.read(); | ||||||
|  |             if (packageInput[bufferPtr] == '\n') | ||||||
|  |             { | ||||||
|  |                 packageInput[bufferPtr] = 0; // terminate String | ||||||
|  |                 packageRecieved = true; | ||||||
|  |                 Debug_pushMessage("Got LoRa UART: %s\n", packageInput); | ||||||
|  |                 break; | ||||||
|  |             } | ||||||
|  |             else if ((packageInput[bufferPtr] >= 0x30) || (packageInput[bufferPtr] <= 0x5A)) // only accept Numbers, UpperCase-Letters and some special chars | ||||||
|  |             { | ||||||
|  |                 if (bufferPtr < sizeof(packageInput) - 1) | ||||||
|  |                 { | ||||||
|  |                     bufferPtr++; | ||||||
|  |                 } | ||||||
|  |                 else | ||||||
|  |                 { | ||||||
|  |                     packageInput[bufferPtr] = 0; // terminate String, bc Buffer is full (package to long) | ||||||
|  |                     packageRecieved = true;      // send it anyway to the parser | ||||||
|  |                     Debug_pushMessage("Got LoRa UART: %s\n", packageInput); | ||||||
|  |                     break; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     if (packageRecieved) | ||||||
|  |         Parse_LoRa_UartCommand(packageInput, bufferPtr); | ||||||
|  |  | ||||||
|  | #endif | ||||||
| } | } | ||||||
|  |  | ||||||
| void sendStatus_LoRa() | void sendStatus_LoRa() | ||||||
| { | { | ||||||
|  | #ifdef FEATURE_ENABLE_LORA | ||||||
|     struct |     struct | ||||||
|     { |     { | ||||||
|         MessageType_t type = "STATUS"; |         MessageType_t type = "STATUS"; | ||||||
| @@ -101,8 +151,13 @@ void sendStatus_LoRa() | |||||||
|  |  | ||||||
|     ResponseStatus rs = e220ttl.sendFixedMessage(0xFF, 0xFF, 23, (byte *)&sendStatus, sizeof(sendStatus)); |     ResponseStatus rs = e220ttl.sendFixedMessage(0xFF, 0xFF, 23, (byte *)&sendStatus, sizeof(sendStatus)); | ||||||
|     Serial.println(rs.getResponseDescription()); |     Serial.println(rs.getResponseDescription()); | ||||||
|  | #elif defined(FEATURE_ENABLE_UARTLORA) | ||||||
|  | // LORA UART SEND STUFF HERE | ||||||
|  | #endif | ||||||
| } | } | ||||||
|  |  | ||||||
|  | #ifdef FEATURE_ENABLE_LORA | ||||||
|  |  | ||||||
| void printParameters(struct Configuration configuration) | void printParameters(struct Configuration configuration) | ||||||
| { | { | ||||||
|     Serial.println("----------------------------------------"); |     Serial.println("----------------------------------------"); | ||||||
| @@ -169,3 +224,26 @@ void printParameters(struct Configuration configuration) | |||||||
|  |  | ||||||
|     Serial.println("----------------------------------------"); |     Serial.println("----------------------------------------"); | ||||||
| } | } | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #ifdef FEATURE_ENABLE_UARTLORA | ||||||
|  | void Parse_LoRa_UartCommand(char input[], int size) | ||||||
|  | { | ||||||
|  |  | ||||||
|  |     char delimiter[] = ";"; | ||||||
|  |     char *ptr; | ||||||
|  |     char command[8]; | ||||||
|  |     char value[8]; | ||||||
|  |  | ||||||
|  |     ptr = strtok(input, delimiter); | ||||||
|  |  | ||||||
|  |     while (ptr != NULL) | ||||||
|  |     { | ||||||
|  |         strncpy(command, ptr, sizeof(command)); | ||||||
|  |         ptr = strtok(NULL, delimiter); | ||||||
|  |         strncpy(value, ptr, sizeof(value)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     Debug_pushMessage("Parsed LoRa UART Command:  %s Value: %s\n", command, value); | ||||||
|  | } | ||||||
|  | #endif | ||||||
| @@ -19,7 +19,7 @@ | |||||||
| #include "globals.h" | #include "globals.h" | ||||||
| #include "dtc.h" | #include "dtc.h" | ||||||
| #include "debugger.h" | #include "debugger.h" | ||||||
| #ifdef FEATURE_ENABLE_LORA | #if defined(FEATURE_ENABLE_LORA) || defined(FEATURE_ENABLE_UARTLORA) | ||||||
| #include "lora_net.h" | #include "lora_net.h" | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| @@ -49,7 +49,7 @@ void OverrideDisplay(uint32_t time, const char *message1, const char *message2, | |||||||
| void initGlobals(); | void initGlobals(); | ||||||
| void maintainSysStat(); | void maintainSysStat(); | ||||||
|  |  | ||||||
| #ifdef FEATURE_ENABLE_LORA | #if defined(FEATURE_ENABLE_UARTLORA) || defined(FEATURE_ENABLE_LORA) | ||||||
| void setMPins_Helper(int pin, int status); | void setMPins_Helper(int pin, int status); | ||||||
| void tmrCallback_StatusSender(); | void tmrCallback_StatusSender(); | ||||||
| Ticker tmrStatusSender(tmrCallback_StatusSender, 30000, 0, MILLIS); | Ticker tmrStatusSender(tmrCallback_StatusSender, 30000, 0, MILLIS); | ||||||
| @@ -72,7 +72,7 @@ Ticker tmrWiFiMaintainConnection(tmrCallback_WiFiMaintainConnection, 1000, 0, MI | |||||||
| uint32_t DisplayOverrideFlag = 0; | uint32_t DisplayOverrideFlag = 0; | ||||||
| char DisplayOverrideValue[3][5] = {0}; | char DisplayOverrideValue[3][5] = {0}; | ||||||
|  |  | ||||||
| #ifdef FEATURE_ENABLE_LORA | #if defined(FEATURE_ENABLE_UARTLORA) || defined(FEATURE_ENABLE_LORA) | ||||||
| void setMPins_Helper(int pin, int status) | void setMPins_Helper(int pin, int status) | ||||||
| { | { | ||||||
| 	i2c_io.write(pin, status); | 	i2c_io.write(pin, status); | ||||||
| @@ -119,7 +119,7 @@ void setup() | |||||||
| 		Serial.print("INA219 not Initialized\n"); | 		Serial.print("INA219 not Initialized\n"); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| #ifdef FEATURE_ENABLE_LORA | #if defined(FEATURE_ENABLE_UARTLORA) || defined(FEATURE_ENABLE_LORA) | ||||||
| 	if (InitLoRa(&setMPins_Helper)) | 	if (InitLoRa(&setMPins_Helper)) | ||||||
| 	{ | 	{ | ||||||
| 		Serial.print("Initialized LoRa_Transceiver\n"); | 		Serial.print("Initialized LoRa_Transceiver\n"); | ||||||
| @@ -229,9 +229,9 @@ void loop() | |||||||
| 	DTC_Process(); | 	DTC_Process(); | ||||||
| 	Debug_Process(); | 	Debug_Process(); | ||||||
|  |  | ||||||
| #ifdef FEATURE_ENABLE_LORA | #if defined(FEATURE_ENABLE_LORA) || defined(FEATURE_ENABLE_UARTLORA) | ||||||
| 	tmrStatusSender.update(); |  | ||||||
| 	LoRa_Process(); | 	LoRa_Process(); | ||||||
|  | 	tmrStatusSender.update(); | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef CAPTIVE | #ifdef CAPTIVE | ||||||
| @@ -380,7 +380,7 @@ void tmrCallback_InputGetter() | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| #ifdef FEATURE_ENABLE_LORA | #if defined(FEATURE_ENABLE_LORA) || defined(FEATURE_ENABLE_UARTLORA) | ||||||
| void tmrCallback_StatusSender() | void tmrCallback_StatusSender() | ||||||
| { | { | ||||||
| 	sendStatus_LoRa(); | 	sendStatus_LoRa(); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user