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); } } } }