Manometr mierzący ciśnienie w kołach

Dependencies:   Cayenne-MQTT-mbed mbed TMP36 X_NUCLEO_IDW01M1v2 NetworkSocketAPI

Committer:
percu
Date:
Wed Jan 27 23:09:02 2021 +0000
Revision:
6:e23a088bd573
Parent:
5:294a8b1bca28
sw

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jburhenn 0:4d7a64104b46 1 #include "MQTTTimer.h"
jburhenn 0:4d7a64104b46 2 #include "CayenneMQTTClient.h"
jburhenn 0:4d7a64104b46 3 #include "MQTTNetworkIDW01M1.h"
jburhenn 0:4d7a64104b46 4 #include "SpwfInterface.h"
percu 6:e23a088bd573 5 #include "ABP.h"
percu 6:e23a088bd573 6 #include "LM35.h"
jburhenn 0:4d7a64104b46 7
percu 6:e23a088bd573 8 // Dane do wifi
percu 6:e23a088bd573 9 char* ssid = "FunBox2-20F4";
percu 6:e23a088bd573 10 char* wifiPassword = "3129F7A6C2479CC337E77C5D6A";
jburhenn 0:4d7a64104b46 11
percu 6:e23a088bd573 12 // Dane do Cayenne
percu 6:e23a088bd573 13 char* username = "a9472990-3ff6-11eb-a2e4-b32ea624e442";
percu 6:e23a088bd573 14 char* password = "9c7d211eff0e1f0da7d90e036eeaafada2ac5339";
percu 6:e23a088bd573 15 char* clientID = "28d96ff0-3ff8-11eb-8779-7d56e82df461";
jburhenn 0:4d7a64104b46 16
jburhenn 0:4d7a64104b46 17 SpwfSAInterface interface(D8, D2); // TX, RX
jburhenn 0:4d7a64104b46 18 MQTTNetwork<SpwfSAInterface> network(interface);
jburhenn 0:4d7a64104b46 19 CayenneMQTT::MQTTClient<MQTTNetwork<SpwfSAInterface>, MQTTTimer> mqttClient(network, username, password, clientID);
jburhenn 0:4d7a64104b46 20
jburhenn 0:4d7a64104b46 21 DigitalOut led1(LED1);
jburhenn 0:4d7a64104b46 22
jburhenn 0:4d7a64104b46 23 void outputMessage(CayenneMQTT::MessageData& message)
jburhenn 0:4d7a64104b46 24 {
jburhenn 0:4d7a64104b46 25 switch (message.topic) {
jburhenn 0:4d7a64104b46 26 case COMMAND_TOPIC:
jburhenn 0:4d7a64104b46 27 printf("topic=Command");
jburhenn 0:4d7a64104b46 28 break;
jburhenn 0:4d7a64104b46 29 case CONFIG_TOPIC:
jburhenn 0:4d7a64104b46 30 printf("topic=Config");
jburhenn 0:4d7a64104b46 31 break;
jburhenn 0:4d7a64104b46 32 default:
jburhenn 0:4d7a64104b46 33 printf("topic=%d", message.topic);
jburhenn 0:4d7a64104b46 34 break;
jburhenn 0:4d7a64104b46 35 }
jburhenn 0:4d7a64104b46 36 printf(" channel=%d", message.channel);
jburhenn 0:4d7a64104b46 37 if (message.clientID) {
jburhenn 0:4d7a64104b46 38 printf(" clientID=%s", message.clientID);
jburhenn 0:4d7a64104b46 39 }
jburhenn 0:4d7a64104b46 40 if (message.type) {
jburhenn 0:4d7a64104b46 41 printf(" type=%s", message.type);
jburhenn 0:4d7a64104b46 42 }
jburhenn 0:4d7a64104b46 43 for (size_t i = 0; i < message.valueCount; ++i) {
jburhenn 0:4d7a64104b46 44 if (message.getValue(i)) {
jburhenn 0:4d7a64104b46 45 printf(" value=%s", message.getValue(i));
jburhenn 0:4d7a64104b46 46 }
jburhenn 0:4d7a64104b46 47 if (message.getUnit(i)) {
jburhenn 0:4d7a64104b46 48 printf(" unit=%s", message.getUnit(i));
jburhenn 0:4d7a64104b46 49 }
jburhenn 0:4d7a64104b46 50 }
jburhenn 0:4d7a64104b46 51 if (message.id) {
jburhenn 0:4d7a64104b46 52 printf(" id=%s", message.id);
jburhenn 0:4d7a64104b46 53 }
jburhenn 0:4d7a64104b46 54 printf("\n");
jburhenn 0:4d7a64104b46 55 }
jburhenn 0:4d7a64104b46 56
jburhenn 0:4d7a64104b46 57 void messageArrived(CayenneMQTT::MessageData& message)
jburhenn 0:4d7a64104b46 58 {
jburhenn 0:4d7a64104b46 59 int error = 0;
jburhenn 0:4d7a64104b46 60 outputMessage(message);
jburhenn 0:4d7a64104b46 61
jburhenn 0:4d7a64104b46 62 if (message.topic == COMMAND_TOPIC) {
jburhenn 0:4d7a64104b46 63 switch(message.channel) {
jburhenn 0:4d7a64104b46 64 case 0:
percu 6:e23a088bd573 65
jburhenn 0:4d7a64104b46 66 led1 = atoi(message.getValue());
percu 6:e23a088bd573 67
jburhenn 0:4d7a64104b46 68 if ((error = mqttClient.publishData(DATA_TOPIC, message.channel, NULL, NULL, message.getValue())) != CAYENNE_SUCCESS) {
jburhenn 0:4d7a64104b46 69 printf("Publish LED state failure, error: %d\n", error);
jburhenn 0:4d7a64104b46 70 }
jburhenn 0:4d7a64104b46 71 break;
jburhenn 0:4d7a64104b46 72 }
jburhenn 0:4d7a64104b46 73
percu 6:e23a088bd573 74
jburhenn 2:d7c27e622707 75 if ((error = mqttClient.publishResponse(message.id, NULL, message.clientID)) != CAYENNE_SUCCESS) {
jburhenn 0:4d7a64104b46 76 printf("Response failure, error: %d\n", error);
jburhenn 0:4d7a64104b46 77 }
jburhenn 0:4d7a64104b46 78 }
jburhenn 0:4d7a64104b46 79 }
jburhenn 0:4d7a64104b46 80
jburhenn 0:4d7a64104b46 81 int connectClient(void)
jburhenn 0:4d7a64104b46 82 {
jburhenn 0:4d7a64104b46 83 int error = 0;
jburhenn 0:4d7a64104b46 84 printf("Connecting to %s:%d\n", CAYENNE_DOMAIN, CAYENNE_PORT);
jburhenn 0:4d7a64104b46 85 while ((error = network.connect(CAYENNE_DOMAIN, CAYENNE_PORT)) != 0) {
jburhenn 0:4d7a64104b46 86 printf("TCP connect failed, error: %d\n", error);
jburhenn 0:4d7a64104b46 87 wait(2);
jburhenn 0:4d7a64104b46 88 }
jburhenn 0:4d7a64104b46 89
jburhenn 0:4d7a64104b46 90 if ((error = mqttClient.connect()) != MQTT::SUCCESS) {
jburhenn 0:4d7a64104b46 91 printf("MQTT connect failed, error: %d\n", error);
jburhenn 0:4d7a64104b46 92 return error;
jburhenn 0:4d7a64104b46 93 }
jburhenn 0:4d7a64104b46 94 printf("Connected\n");
jburhenn 0:4d7a64104b46 95
percu 6:e23a088bd573 96
jburhenn 0:4d7a64104b46 97 if ((error = mqttClient.subscribe(COMMAND_TOPIC, CAYENNE_ALL_CHANNELS)) != CAYENNE_SUCCESS) {
jburhenn 0:4d7a64104b46 98 printf("Subscription to Command topic failed, error: %d\n", error);
jburhenn 0:4d7a64104b46 99 }
jburhenn 0:4d7a64104b46 100 if ((error = mqttClient.subscribe(CONFIG_TOPIC, CAYENNE_ALL_CHANNELS)) != CAYENNE_SUCCESS) {
jburhenn 0:4d7a64104b46 101 printf("Subscription to Config topic failed, error:%d\n", error);
jburhenn 0:4d7a64104b46 102 }
jburhenn 0:4d7a64104b46 103
jburhenn 0:4d7a64104b46 104 mqttClient.publishData(SYS_VERSION_TOPIC, CAYENNE_NO_CHANNEL, NULL, NULL, CAYENNE_VERSION);
jburhenn 0:4d7a64104b46 105 mqttClient.publishData(SYS_MODEL_TOPIC, CAYENNE_NO_CHANNEL, NULL, NULL, "mbedDevice");
jburhenn 0:4d7a64104b46 106
jburhenn 0:4d7a64104b46 107 return CAYENNE_SUCCESS;
jburhenn 0:4d7a64104b46 108 }
jburhenn 0:4d7a64104b46 109
jburhenn 0:4d7a64104b46 110 void loop(void)
jburhenn 0:4d7a64104b46 111 {
percu 6:e23a088bd573 112 MQTTTimer timer(1000);
percu 6:e23a088bd573 113 LM35 LM35(A1); // Wyłowanie klasy z PINEM A0 odpowiadająca czujnik temperatury LM35
percu 6:e23a088bd573 114 ABP ABP(A0); //Wyłowanie klasy z PINEM A0 odpowiadająca czujniki ciśnienia ABPMANV150PGAA5 HONEYWELL
percu 6:e23a088bd573 115 double Idealne_cisnienie,bary,ile; // zmienne odpowiadające rózne obliczenia ciśnień
percu 6:e23a088bd573 116 int wzorzecP,wzorzecT; // zmienne odpowiadjące za wzrocowe cisnieni i temperature
percu 6:e23a088bd573 117 wzorzecP=230000; //Ciśnieni wzorcowe w kole
percu 6:e23a088bd573 118 wzorzecT=293; //Temperatura wzorcowe w kole
jburhenn 0:4d7a64104b46 119
jburhenn 0:4d7a64104b46 120 while (true) {
percu 6:e23a088bd573 121 Idealne_cisnienie=(((wzorzecP)*(LM35.read()+ 273))/(wzorzecT));
percu 6:e23a088bd573 122 bary=Idealne_cisnienie/100000;
percu 6:e23a088bd573 123 ile=(bary-ABP.read());
jburhenn 0:4d7a64104b46 124 mqttClient.yield(1000);
jburhenn 0:4d7a64104b46 125 if (!network.connected() || !mqttClient.connected()) {
jburhenn 0:4d7a64104b46 126 network.disconnect();
jburhenn 0:4d7a64104b46 127 mqttClient.disconnect();
jburhenn 0:4d7a64104b46 128 printf("Reconnecting\n");
jburhenn 0:4d7a64104b46 129 while (connectClient() != CAYENNE_SUCCESS) {
jburhenn 0:4d7a64104b46 130 wait(2);
jburhenn 0:4d7a64104b46 131 printf("Reconnect failed, retrying\n");
jburhenn 0:4d7a64104b46 132 }
jburhenn 0:4d7a64104b46 133 }
jburhenn 0:4d7a64104b46 134
jburhenn 0:4d7a64104b46 135 if (timer.expired()) {
jburhenn 0:4d7a64104b46 136 int error = 0;
percu 6:e23a088bd573 137 if ((error = mqttClient.publishData(DATA_TOPIC, 5, TYPE_TEMPERATURE, UNIT_CELSIUS, LM35.read())) != CAYENNE_SUCCESS) {
percu 6:e23a088bd573 138 printf("Publish temperature failed, error: %d\n", error);
percu 6:e23a088bd573 139
percu 6:e23a088bd573 140 }
percu 6:e23a088bd573 141 if ((error = mqttClient.publishData(DATA_TOPIC,2, TYPE_BAROMETRIC_PRESSURE, UNIT_HECTOPASCAL, ABP.read())) != CAYENNE_SUCCESS)
percu 6:e23a088bd573 142 {
percu 6:e23a088bd573 143 printf("Publish temperature failed, error: %d\n", error);
percu 6:e23a088bd573 144 }
percu 6:e23a088bd573 145 if ((error = mqttClient.publishData(DATA_TOPIC, 3, TYPE_BAROMETRIC_PRESSURE, UNIT_HECTOPASCAL,ile)) != CAYENNE_SUCCESS)
percu 6:e23a088bd573 146
percu 6:e23a088bd573 147 {
jburhenn 0:4d7a64104b46 148 printf("Publish temperature failed, error: %d\n", error);
jburhenn 0:4d7a64104b46 149 }
jburhenn 0:4d7a64104b46 150 timer.countdown_ms(5000);
percu 6:e23a088bd573 151 }
jburhenn 0:4d7a64104b46 152 }
jburhenn 0:4d7a64104b46 153 }
jburhenn 0:4d7a64104b46 154
jburhenn 0:4d7a64104b46 155 int main()
jburhenn 0:4d7a64104b46 156 {
percu 6:e23a088bd573 157 printf("Ladowanie interfejsu \n");
jburhenn 0:4d7a64104b46 158 interface.connect(ssid, wifiPassword, NSAPI_SECURITY_WPA2);
jburhenn 0:4d7a64104b46 159 mqttClient.setDefaultMessageHandler(messageArrived);
jburhenn 0:4d7a64104b46 160 if (connectClient() == CAYENNE_SUCCESS) {
jburhenn 0:4d7a64104b46 161 loop();
jburhenn 0:4d7a64104b46 162 }
jburhenn 0:4d7a64104b46 163 else {
jburhenn 0:4d7a64104b46 164 printf("Connection failed, exiting\n");
jburhenn 0:4d7a64104b46 165 }
jburhenn 0:4d7a64104b46 166
jburhenn 0:4d7a64104b46 167 if (mqttClient.connected())
jburhenn 0:4d7a64104b46 168 mqttClient.disconnect();
jburhenn 0:4d7a64104b46 169 if (network.connected())
jburhenn 0:4d7a64104b46 170 network.disconnect();
jburhenn 0:4d7a64104b46 171
jburhenn 0:4d7a64104b46 172 return 0;
jburhenn 0:4d7a64104b46 173 }
jburhenn 0:4d7a64104b46 174