IoT sensor/controller using STM32, W5500 ethernet, MQTT

Dependencies:   mbed WIZnet_Library Watchdog DHT MQTT DS1820

main.cpp

Committer:
Geekshow
Date:
2020-02-23
Revision:
3:de9611d75590
Parent:
2:a50b794b8ede
Child:
4:ebaf1973d008

File content as of revision 3:de9611d75590:

#include "mbed.h"
//#include "rtos.h"
//#include "pins.h"
#include "networking.h"


// ========== PIN DEFINITIONS ============
#define NUM_OF_OUTPUTS 11
#define NUM_OF_INPUTS 12

#define GREENLEDPIN PA5
#define ORANGELEDPIN PA_1
#define BUTTON PC_9

#define ANALOGPIN0 PC_0  // Analogue Input 0
#define ANALOGPIN1 PC_1  // Analogue Input 1
#define ANALOGPIN2 PC_2  // Analogue Input 2
#define ANALOGPIN3 PC_3  // Analogue Input 3
#define ANALOGPIN4 PC_4  // Analogue Input 4
#define ANALOGPIN5 PC_5  // Analogue Input 5

//#define INPUTPINx PC_15     // Don't use D23
#define INPUTPIN0 PB_9     // DHT22 digital pin (D24)
#define INPUTPIN1 PD_2     // DHT22 digital pin (D25)
#define INPUTPIN2 PC_10     // DHT22 digital pin (D26)
//#define INPUTPINx PB_0     // Don't use D27
//#define INPUTPINx PB_1     // Don't use D28
#define INPUTPIN3 PB_10     //  digital pin (D29)
#define INPUTPIN4 PB_11     //  digital pin (D30)
#define INPUTPIN5 PB_12     //  digital pin (D31)
#define INPUTPIN6 PB_13     //  digital pin (D32)
#define INPUTPIN7 PB_14     //  digital pin (D33)
#define INPUTPIN8 PB_15     //  digital pin (D34)
#define INPUTPIN9 PC_6      //  digital pin (D35)
#define INPUTPIN10 PC_7     //  digital pin (D36)
#define INPUTPIN11 PC_8     //  digital pin (D37)

#define OUTPUTPIN0 PA_3  // digital output D0
#define OUTPUTPIN1 PA_2  // digital output D1
#define OUTPUTPIN2 PA_0  // digital output D2
#define OUTPUTPIN3 PA_1  // digital output D3
#define OUTPUTPIN4 PB_5  // digital output D4
#define OUTPUTPIN5 PB_6  // digital output D5
#define OUTPUTPIN6 PA_8  // digital output D6
#define OUTPUTPIN7 PA_9  // digital output D7
#define OUTPUTPIN8 PA_10  // digital output D8
#define OUTPUTPIN9 PB_7  // digital output D9
//#define OUTPUTPINx PA_4  // digital output D10 - SPI1 SS
//#define OUTPUTPINx PA_4  // digital output D11 - SPI1 MOSI
//#define OUTPUTPINx PA_4  // digital output D12 - SPI1 MISO
//#define OUTPUTPINx PA_4  // digital output D13 - SPI1 CLK
#define OUTPUTPIN10 PB_8  // digital output D14
// ================= *************** ==================
#define USART3_TX PC_10
// ================= *************** ==================


Serial pc(USART3_TX, NC); // serial output on D26
DigitalIn BTN(BUTTON);
DigitalOut LED(LED_GREEN);

void on_control_cmd(const char* actuator_name, const char* control_value)
{
    pc.printf("Received CMD %s %s\r\n", actuator_name, control_value);
    if(strcmp(actuator_name, "led") == 0)
        LED = atoi(control_value);
}

void readInputs()
{
  inputs[0] = digitalRead(INPUTPIN0);
  inputs[1] = digitalRead(INPUTPIN1);
  inputs[2] = digitalRead(INPUTPIN2);
  inputs[3] = digitalRead(INPUTPIN3);
  inputs[4] = digitalRead(INPUTPIN4);
  inputs[5] = digitalRead(INPUTPIN5);
  inputs[6] = digitalRead(INPUTPIN6);
  inputs[7] = digitalRead(INPUTPIN7);
  inputs[8] = digitalRead(INPUTPIN8);
  inputs[9] = digitalRead(INPUTPIN9);
  inputs[10] = digitalRead(INPUTPIN10);
  inputs[11] = digitalRead(INPUTPIN11);
}

void setOutputs()
{
  digitalWrite(OUTPUTPIN0,!outputs[0]);
  digitalWrite(OUTPUTPIN1,!outputs[1]);
  digitalWrite(OUTPUTPIN2,!outputs[2]);
  digitalWrite(OUTPUTPIN3,!outputs[3]);
  digitalWrite(OUTPUTPIN4,!outputs[4]);
  digitalWrite(OUTPUTPIN5,!outputs[5]);
  digitalWrite(OUTPUTPIN6,!outputs[6]);
  digitalWrite(OUTPUTPIN7,!outputs[7]);
  digitalWrite(OUTPUTPIN8,!outputs[8]);
  digitalWrite(OUTPUTPIN9,!outputs[9]);
  digitalWrite(OUTPUTPIN10,!outputs[10]);
}


int main()
{
    MQTTSocket sock;
    MClient client(sock);

    // Declare sensors (name, unit)
    const char* sensors[][8] = {
        "test", " ",
        "button", "V",
        NULL, NULL
    };

    // Declare all actuators (name and parameter)
    const char* actuators[][8] = {
        "led", "int",
        NULL, NULL
    };

    int connected = networking_init(sock, client, sensors, actuators, on_control_cmd);

    bool btn = 0;

    while(1) {
        setOutputs();
        readInputs();
        
                
        bool newBTN = BTN;
        if(newBTN != btn) {
            char buf[16];
            int value = (bool)newBTN;

            sprintf(buf, "%d mV", value);
            publish_value(client,"button",buf);

            btn = newBTN;
        } else {
            client.yield(1000);
            connected = publish_value(client,"stat","hello world");
            if(connected != 0) {
                pc.printf("Restarting network....\r\n");
                networking_init(sock, client, sensors, actuators, on_control_cmd);
            }
        }
    }
}