|
|
- #ifdef UARTtoMQTT
-
- #include <queue>
- #include <Ticker.h>
-
- // -----------------------------------------------------------------------------
- // GLOBALS TO THE MODULE
- // -----------------------------------------------------------------------------
- const byte numChars = 100;
- char receivedChars[numChars]; // an array to store the received data
- boolean newData = false;
-
- void _recvWithEndMarker() {
- static byte ndx = 0;
- char endMarker = '\n';
- char rc;
-
- while (Serial.available() > 0 && newData == false) {
- rc = Serial.read();
-
- if (rc != endMarker) {
- receivedChars[ndx] = rc;
- ndx++;
- if (ndx >= numChars) {
- ndx = numChars - 1;
- }
- }
- else {
- receivedChars[ndx] = '\0'; // terminate the string
- ndx = 0;
- newData = true;
- }
- }
- }
-
- void _sendNewData() {
- if (newData == true && MQTT_SUPPORT) {
- mqttSend(MQTT_TOPIC_UARTIN, receivedChars); // publish: UART -> mqtt bus
- newData = false;
- }
- }
-
- #if MQTT_SUPPORT
- void _UARTtoMQTTMqttCallback(unsigned int type, const char * topic, const char * payload) {
- if (type == MQTT_CONNECT_EVENT) {
- mqttSubscribe(MQTT_TOPIC_UARTOUT);
- }
-
- if (type == MQTT_MESSAGE_EVENT) {
-
- // Match topic
- String t = mqttTopicKey((char *) topic);
- bool isUARTOut = t.equals(MQTT_TOPIC_UARTOUT);
-
- if (isUARTOut) {
- Serial.print(payload);
- Serial.println();
- }
-
- }
-
- }
- #endif
-
- // -----------------------------------------------------------------------------
- // SETUP & LOOP
- // -----------------------------------------------------------------------------
-
- void UARTtoMQTTSetup() {
-
- #if MQTT_SUPPORT
- mqttRegister(_UARTtoMQTTMqttCallback);
- #endif
-
- // Register oop
- espurnaRegisterLoop(UARTtoMQTTLoop);
-
- }
-
- void UARTtoMQTTLoop() {
- _recvWithEndMarker();
- _sendNewData();
- }
-
- #endif
|