IoT sensor/controller using STM32, W5500 ethernet, MQTT

Dependencies:   mbed WIZnet_Library Watchdog DHT MQTT DS1820

Committer:
Geekshow
Date:
Sun Feb 23 10:17:06 2020 +0000
Revision:
3:de9611d75590
Parent:
2:a50b794b8ede
Child:
4:ebaf1973d008
start customise for controller operation

Who changed what in which revision?

UserRevisionLine numberNew contents of line
zhangyx 0:1170747a672f 1 #include "mbed.h"
Geekshow 3:de9611d75590 2 //#include "rtos.h"
Geekshow 3:de9611d75590 3 //#include "pins.h"
zhangyx 2:a50b794b8ede 4 #include "networking.h"
zhangyx 0:1170747a672f 5
Geekshow 3:de9611d75590 6
Geekshow 3:de9611d75590 7 // ========== PIN DEFINITIONS ============
Geekshow 3:de9611d75590 8 #define NUM_OF_OUTPUTS 11
Geekshow 3:de9611d75590 9 #define NUM_OF_INPUTS 12
Geekshow 3:de9611d75590 10
Geekshow 3:de9611d75590 11 #define GREENLEDPIN PA5
Geekshow 3:de9611d75590 12 #define ORANGELEDPIN PA_1
Geekshow 3:de9611d75590 13 #define BUTTON PC_9
Geekshow 3:de9611d75590 14
Geekshow 3:de9611d75590 15 #define ANALOGPIN0 PC_0 // Analogue Input 0
Geekshow 3:de9611d75590 16 #define ANALOGPIN1 PC_1 // Analogue Input 1
Geekshow 3:de9611d75590 17 #define ANALOGPIN2 PC_2 // Analogue Input 2
Geekshow 3:de9611d75590 18 #define ANALOGPIN3 PC_3 // Analogue Input 3
Geekshow 3:de9611d75590 19 #define ANALOGPIN4 PC_4 // Analogue Input 4
Geekshow 3:de9611d75590 20 #define ANALOGPIN5 PC_5 // Analogue Input 5
Geekshow 3:de9611d75590 21
Geekshow 3:de9611d75590 22 //#define INPUTPINx PC_15 // Don't use D23
Geekshow 3:de9611d75590 23 #define INPUTPIN0 PB_9 // DHT22 digital pin (D24)
Geekshow 3:de9611d75590 24 #define INPUTPIN1 PD_2 // DHT22 digital pin (D25)
Geekshow 3:de9611d75590 25 #define INPUTPIN2 PC_10 // DHT22 digital pin (D26)
Geekshow 3:de9611d75590 26 //#define INPUTPINx PB_0 // Don't use D27
Geekshow 3:de9611d75590 27 //#define INPUTPINx PB_1 // Don't use D28
Geekshow 3:de9611d75590 28 #define INPUTPIN3 PB_10 // digital pin (D29)
Geekshow 3:de9611d75590 29 #define INPUTPIN4 PB_11 // digital pin (D30)
Geekshow 3:de9611d75590 30 #define INPUTPIN5 PB_12 // digital pin (D31)
Geekshow 3:de9611d75590 31 #define INPUTPIN6 PB_13 // digital pin (D32)
Geekshow 3:de9611d75590 32 #define INPUTPIN7 PB_14 // digital pin (D33)
Geekshow 3:de9611d75590 33 #define INPUTPIN8 PB_15 // digital pin (D34)
Geekshow 3:de9611d75590 34 #define INPUTPIN9 PC_6 // digital pin (D35)
Geekshow 3:de9611d75590 35 #define INPUTPIN10 PC_7 // digital pin (D36)
Geekshow 3:de9611d75590 36 #define INPUTPIN11 PC_8 // digital pin (D37)
Geekshow 3:de9611d75590 37
Geekshow 3:de9611d75590 38 #define OUTPUTPIN0 PA_3 // digital output D0
Geekshow 3:de9611d75590 39 #define OUTPUTPIN1 PA_2 // digital output D1
Geekshow 3:de9611d75590 40 #define OUTPUTPIN2 PA_0 // digital output D2
Geekshow 3:de9611d75590 41 #define OUTPUTPIN3 PA_1 // digital output D3
Geekshow 3:de9611d75590 42 #define OUTPUTPIN4 PB_5 // digital output D4
Geekshow 3:de9611d75590 43 #define OUTPUTPIN5 PB_6 // digital output D5
Geekshow 3:de9611d75590 44 #define OUTPUTPIN6 PA_8 // digital output D6
Geekshow 3:de9611d75590 45 #define OUTPUTPIN7 PA_9 // digital output D7
Geekshow 3:de9611d75590 46 #define OUTPUTPIN8 PA_10 // digital output D8
Geekshow 3:de9611d75590 47 #define OUTPUTPIN9 PB_7 // digital output D9
Geekshow 3:de9611d75590 48 //#define OUTPUTPINx PA_4 // digital output D10 - SPI1 SS
Geekshow 3:de9611d75590 49 //#define OUTPUTPINx PA_4 // digital output D11 - SPI1 MOSI
Geekshow 3:de9611d75590 50 //#define OUTPUTPINx PA_4 // digital output D12 - SPI1 MISO
Geekshow 3:de9611d75590 51 //#define OUTPUTPINx PA_4 // digital output D13 - SPI1 CLK
Geekshow 3:de9611d75590 52 #define OUTPUTPIN10 PB_8 // digital output D14
Geekshow 3:de9611d75590 53 // ================= *************** ==================
Geekshow 3:de9611d75590 54 #define USART3_TX PC_10
Geekshow 3:de9611d75590 55 // ================= *************** ==================
Geekshow 3:de9611d75590 56
Geekshow 3:de9611d75590 57
Geekshow 3:de9611d75590 58 Serial pc(USART3_TX, NC); // serial output on D26
Geekshow 3:de9611d75590 59 DigitalIn BTN(BUTTON);
Geekshow 3:de9611d75590 60 DigitalOut LED(LED_GREEN);
zhangyx 0:1170747a672f 61
zhangyx 2:a50b794b8ede 62 void on_control_cmd(const char* actuator_name, const char* control_value)
zhangyx 0:1170747a672f 63 {
zhangyx 2:a50b794b8ede 64 pc.printf("Received CMD %s %s\r\n", actuator_name, control_value);
zhangyx 2:a50b794b8ede 65 if(strcmp(actuator_name, "led") == 0)
zhangyx 2:a50b794b8ede 66 LED = atoi(control_value);
zhangyx 0:1170747a672f 67 }
zhangyx 2:a50b794b8ede 68
Geekshow 3:de9611d75590 69 void readInputs()
Geekshow 3:de9611d75590 70 {
Geekshow 3:de9611d75590 71 inputs[0] = digitalRead(INPUTPIN0);
Geekshow 3:de9611d75590 72 inputs[1] = digitalRead(INPUTPIN1);
Geekshow 3:de9611d75590 73 inputs[2] = digitalRead(INPUTPIN2);
Geekshow 3:de9611d75590 74 inputs[3] = digitalRead(INPUTPIN3);
Geekshow 3:de9611d75590 75 inputs[4] = digitalRead(INPUTPIN4);
Geekshow 3:de9611d75590 76 inputs[5] = digitalRead(INPUTPIN5);
Geekshow 3:de9611d75590 77 inputs[6] = digitalRead(INPUTPIN6);
Geekshow 3:de9611d75590 78 inputs[7] = digitalRead(INPUTPIN7);
Geekshow 3:de9611d75590 79 inputs[8] = digitalRead(INPUTPIN8);
Geekshow 3:de9611d75590 80 inputs[9] = digitalRead(INPUTPIN9);
Geekshow 3:de9611d75590 81 inputs[10] = digitalRead(INPUTPIN10);
Geekshow 3:de9611d75590 82 inputs[11] = digitalRead(INPUTPIN11);
Geekshow 3:de9611d75590 83 }
Geekshow 3:de9611d75590 84
Geekshow 3:de9611d75590 85 void setOutputs()
Geekshow 3:de9611d75590 86 {
Geekshow 3:de9611d75590 87 digitalWrite(OUTPUTPIN0,!outputs[0]);
Geekshow 3:de9611d75590 88 digitalWrite(OUTPUTPIN1,!outputs[1]);
Geekshow 3:de9611d75590 89 digitalWrite(OUTPUTPIN2,!outputs[2]);
Geekshow 3:de9611d75590 90 digitalWrite(OUTPUTPIN3,!outputs[3]);
Geekshow 3:de9611d75590 91 digitalWrite(OUTPUTPIN4,!outputs[4]);
Geekshow 3:de9611d75590 92 digitalWrite(OUTPUTPIN5,!outputs[5]);
Geekshow 3:de9611d75590 93 digitalWrite(OUTPUTPIN6,!outputs[6]);
Geekshow 3:de9611d75590 94 digitalWrite(OUTPUTPIN7,!outputs[7]);
Geekshow 3:de9611d75590 95 digitalWrite(OUTPUTPIN8,!outputs[8]);
Geekshow 3:de9611d75590 96 digitalWrite(OUTPUTPIN9,!outputs[9]);
Geekshow 3:de9611d75590 97 digitalWrite(OUTPUTPIN10,!outputs[10]);
Geekshow 3:de9611d75590 98 }
Geekshow 3:de9611d75590 99
Geekshow 3:de9611d75590 100
Geekshow 3:de9611d75590 101 int main()
Geekshow 3:de9611d75590 102 {
zhangyx 0:1170747a672f 103 MQTTSocket sock;
zhangyx 0:1170747a672f 104 MClient client(sock);
Geekshow 3:de9611d75590 105
Geekshow 3:de9611d75590 106 // Declare sensors (name, unit)
Geekshow 3:de9611d75590 107 const char* sensors[][8] = {
zhangyx 2:a50b794b8ede 108 "test", " ",
zhangyx 2:a50b794b8ede 109 "button", "V",
Geekshow 3:de9611d75590 110 NULL, NULL
zhangyx 2:a50b794b8ede 111 };
zhangyx 0:1170747a672f 112
Geekshow 3:de9611d75590 113 // Declare all actuators (name and parameter)
Geekshow 3:de9611d75590 114 const char* actuators[][8] = {
zhangyx 2:a50b794b8ede 115 "led", "int",
Geekshow 3:de9611d75590 116 NULL, NULL
zhangyx 2:a50b794b8ede 117 };
Geekshow 3:de9611d75590 118
Geekshow 3:de9611d75590 119 int connected = networking_init(sock, client, sensors, actuators, on_control_cmd);
zhangyx 0:1170747a672f 120
zhangyx 0:1170747a672f 121 bool btn = 0;
Geekshow 3:de9611d75590 122
Geekshow 3:de9611d75590 123 while(1) {
Geekshow 3:de9611d75590 124 setOutputs();
Geekshow 3:de9611d75590 125 readInputs();
Geekshow 3:de9611d75590 126
Geekshow 3:de9611d75590 127
zhangyx 0:1170747a672f 128 bool newBTN = BTN;
Geekshow 3:de9611d75590 129 if(newBTN != btn) {
zhangyx 0:1170747a672f 130 char buf[16];
zhangyx 2:a50b794b8ede 131 int value = (bool)newBTN;
Geekshow 3:de9611d75590 132
zhangyx 0:1170747a672f 133 sprintf(buf, "%d mV", value);
zhangyx 2:a50b794b8ede 134 publish_value(client,"button",buf);
Geekshow 3:de9611d75590 135
zhangyx 0:1170747a672f 136 btn = newBTN;
Geekshow 3:de9611d75590 137 } else {
zhangyx 2:a50b794b8ede 138 client.yield(1000);
Geekshow 3:de9611d75590 139 connected = publish_value(client,"stat","hello world");
Geekshow 3:de9611d75590 140 if(connected != 0) {
Geekshow 3:de9611d75590 141 pc.printf("Restarting network....\r\n");
Geekshow 3:de9611d75590 142 networking_init(sock, client, sensors, actuators, on_control_cmd);
Geekshow 3:de9611d75590 143 }
zhangyx 0:1170747a672f 144 }
zhangyx 0:1170747a672f 145 }
zhangyx 0:1170747a672f 146 }