IoT sensor/controller using STM32, W5500 ethernet, MQTT
Dependencies: mbed WIZnet_Library Watchdog DHT MQTT DS1820
main.cpp@3:de9611d75590, 2020-02-23 (annotated)
- 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?
User | Revision | Line number | New 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 | } |