STM32F103C8T6-Cayenne-WIZnet_SD1306_BMP280
Dependencies: Cayenne-MQTT-mbed mbed Cayenne-WIZnet_Library WIZnet_Library BME280
main.cpp@10:63b5e5d19bee, 2019-11-08 (annotated)
- Committer:
- dadangjia
- Date:
- Fri Nov 08 00:16:02 2019 +0000
- Revision:
- 10:63b5e5d19bee
- Parent:
- 9:3ba93660c82e
STM32F103C8T6,CAYENNE ,SD1306,BMP280
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jburhenn | 0:8ce4fc106e50 | 1 | /** |
jburhenn | 0:8ce4fc106e50 | 2 | * Example app for using the Cayenne MQTT C++ library to send and receive example data. This example uses |
jburhenn | 0:8ce4fc106e50 | 3 | * the WIZnet_Library library to connect via Ethernet. |
jburhenn | 0:8ce4fc106e50 | 4 | * |
jburhenn | 0:8ce4fc106e50 | 5 | * NOTE: The WIZnet_Library defaults to using code for W5500. If you want to use a W5100 or W5200 code you need to |
jburhenn | 0:8ce4fc106e50 | 6 | * set the appropriate define in wiznet.h. |
jburhenn | 0:8ce4fc106e50 | 7 | */ |
jburhenn | 0:8ce4fc106e50 | 8 | #include "MQTTTimer.h" |
jburhenn | 0:8ce4fc106e50 | 9 | #include "CayenneMQTTClient.h" |
jburhenn | 0:8ce4fc106e50 | 10 | #include "MQTTNetwork.h" |
jburhenn | 0:8ce4fc106e50 | 11 | #include "WIZnetInterface.h" |
jburhenn | 0:8ce4fc106e50 | 12 | // Cayenne authentication info. This should be obtained from the Cayenne Dashboard. |
dadangjia | 9:3ba93660c82e | 13 | char* username = "c5495b90-ff04-11e6-a6b3-05972afbabc2"; |
dadangjia | 9:3ba93660c82e | 14 | char* password = "084cdefbc6a98c0b5b781716c9d102ce06b62cc4"; |
dadangjia | 9:3ba93660c82e | 15 | char* clientID = "267e1460-8aff-11e7-a5d9-9de9b49680ec"; |
dadangjia | 9:3ba93660c82e | 16 | #define USE_DHCP 1 |
dadangjia | 9:3ba93660c82e | 17 | |
dadangjia | 9:3ba93660c82e | 18 | Serial pc(USBTX, USBRX); //TX RX |
jburhenn | 0:8ce4fc106e50 | 19 | |
jburhenn | 0:8ce4fc106e50 | 20 | SPI spi(D11, D12, D13); |
dadangjia | 9:3ba93660c82e | 21 | WIZnetInterface ethernet(&spi, PB_0, PB_1); // SPI, SEL, Reset |
dadangjia | 9:3ba93660c82e | 22 | MQTTNetwork<WIZnetInterface> network(ethernet); |
jburhenn | 2:472a2fd3359a | 23 | CayenneMQTT::MQTTClient<MQTTNetwork<WIZnetInterface>, MQTTTimer> mqttClient(network, username, password, clientID); |
dadangjia | 10:63b5e5d19bee | 24 | char buffer[8][20]; |
dadangjia | 9:3ba93660c82e | 25 | float Temperature,Pressure; |
dadangjia | 9:3ba93660c82e | 26 | long ADC_VALUE[3]; |
dadangjia | 9:3ba93660c82e | 27 | AnalogIn ADC_MQ2(A0); //ADC1,MQ2空气质量检测 |
dadangjia | 9:3ba93660c82e | 28 | AnalogIn ADC_MQ3(A1); //ADC2,MQ3空气质量检测 |
dadangjia | 9:3ba93660c82e | 29 | AnalogIn analog_value(A2); // ADC3,可调电位器 |
dadangjia | 10:63b5e5d19bee | 30 | Ticker ticker; |
dadangjia | 10:63b5e5d19bee | 31 | float tickerTime = 0.5; |
dadangjia | 9:3ba93660c82e | 32 | #include "CriusOLED.h" |
dadangjia | 9:3ba93660c82e | 33 | void OLED_INIT() |
dadangjia | 9:3ba93660c82e | 34 | { |
dadangjia | 9:3ba93660c82e | 35 | i2c.frequency(400000); |
dadangjia | 9:3ba93660c82e | 36 | init_OLED(); |
dadangjia | 9:3ba93660c82e | 37 | displayOn(); |
dadangjia | 9:3ba93660c82e | 38 | reset_display(); |
dadangjia | 9:3ba93660c82e | 39 | } |
dadangjia | 9:3ba93660c82e | 40 | |
dadangjia | 9:3ba93660c82e | 41 | #include "BME280.h" |
dadangjia | 9:3ba93660c82e | 42 | BME280 sensor(PB_9, PB_8); |
dadangjia | 9:3ba93660c82e | 43 | void bme280_dat() |
dadangjia | 9:3ba93660c82e | 44 | { |
dadangjia | 9:3ba93660c82e | 45 | Temperature=sensor.getTemperature(); |
dadangjia | 9:3ba93660c82e | 46 | Pressure=sensor.getPressure()*100; |
dadangjia | 9:3ba93660c82e | 47 | snprintf(buffer[0],sizeof(buffer[0]), "%2.2fC %6.0fPa",Temperature, Pressure); |
dadangjia | 9:3ba93660c82e | 48 | sendStrXY(buffer[0],0,0); |
dadangjia | 9:3ba93660c82e | 49 | } |
dadangjia | 9:3ba93660c82e | 50 | |
dadangjia | 10:63b5e5d19bee | 51 | //DigitalOut rled(PC_13); |
dadangjia | 10:63b5e5d19bee | 52 | //DigitalOut gled(PC_14); |
dadangjia | 10:63b5e5d19bee | 53 | //DigitalOut bled(PC_15); |
dadangjia | 10:63b5e5d19bee | 54 | |
dadangjia | 10:63b5e5d19bee | 55 | |
dadangjia | 10:63b5e5d19bee | 56 | #define ArrayLenth 25 //times of collection |
dadangjia | 10:63b5e5d19bee | 57 | #define Offset 0.00 |
dadangjia | 10:63b5e5d19bee | 58 | float pHArray[ArrayLenth]; //Store the average value of the sensor feedback |
dadangjia | 10:63b5e5d19bee | 59 | int pHArrayIndex=0; |
dadangjia | 10:63b5e5d19bee | 60 | float pHValue; |
dadangjia | 10:63b5e5d19bee | 61 | Ticker ph_ticker; |
dadangjia | 10:63b5e5d19bee | 62 | float ph_sampleTime = 0.02; |
dadangjia | 10:63b5e5d19bee | 63 | |
dadangjia | 10:63b5e5d19bee | 64 | void PH_ticker() |
dadangjia | 10:63b5e5d19bee | 65 | { |
dadangjia | 10:63b5e5d19bee | 66 | pHArray[pHArrayIndex++]=analog_value.read(); |
dadangjia | 10:63b5e5d19bee | 67 | if(pHArrayIndex==ArrayLenth)pHArrayIndex=0; |
dadangjia | 10:63b5e5d19bee | 68 | } |
dadangjia | 10:63b5e5d19bee | 69 | |
dadangjia | 10:63b5e5d19bee | 70 | void ph_dat() |
dadangjia | 10:63b5e5d19bee | 71 | { |
dadangjia | 10:63b5e5d19bee | 72 | char i; |
dadangjia | 10:63b5e5d19bee | 73 | float sum; |
dadangjia | 10:63b5e5d19bee | 74 | for(i=0;i<ArrayLenth;i++) |
dadangjia | 10:63b5e5d19bee | 75 | sum+=pHArray[pHArrayIndex]; |
dadangjia | 10:63b5e5d19bee | 76 | pHValue = (sum/ArrayLenth)*3.5*5.0+Offset; |
dadangjia | 10:63b5e5d19bee | 77 | snprintf(buffer[3],sizeof(buffer[3]), "pH:%2.2f",pHValue); |
dadangjia | 10:63b5e5d19bee | 78 | sendStrXY(buffer[3],3,0); |
dadangjia | 10:63b5e5d19bee | 79 | } |
dadangjia | 10:63b5e5d19bee | 80 | |
dadangjia | 10:63b5e5d19bee | 81 | void adc_dat() |
dadangjia | 10:63b5e5d19bee | 82 | { |
dadangjia | 10:63b5e5d19bee | 83 | ADC_VALUE[0] = (long)(ADC_MQ2.read() * 3300); |
dadangjia | 10:63b5e5d19bee | 84 | ADC_VALUE[1] = (long)(ADC_MQ3.read() * 3300); |
dadangjia | 10:63b5e5d19bee | 85 | ADC_VALUE[2] = (long)(analog_value.read() * 3300); |
dadangjia | 10:63b5e5d19bee | 86 | snprintf(buffer[2],sizeof(buffer[2]), "%4dmV %4dmV",ADC_VALUE[0], ADC_VALUE[1]); |
dadangjia | 10:63b5e5d19bee | 87 | sendStrXY(buffer[2],2,0); |
dadangjia | 10:63b5e5d19bee | 88 | } |
dadangjia | 10:63b5e5d19bee | 89 | |
dadangjia | 9:3ba93660c82e | 90 | void Stm32f103c8t6_ticker() |
dadangjia | 9:3ba93660c82e | 91 | { |
dadangjia | 9:3ba93660c82e | 92 | bme280_dat(); |
dadangjia | 10:63b5e5d19bee | 93 | adc_dat(); |
dadangjia | 10:63b5e5d19bee | 94 | // ph_dat(); |
dadangjia | 9:3ba93660c82e | 95 | } |
jburhenn | 0:8ce4fc106e50 | 96 | /** |
jburhenn | 0:8ce4fc106e50 | 97 | * Print the message info. |
jburhenn | 0:8ce4fc106e50 | 98 | * @param[in] message The message received from the Cayenne server. |
jburhenn | 0:8ce4fc106e50 | 99 | */ |
jburhenn | 2:472a2fd3359a | 100 | void outputMessage(CayenneMQTT::MessageData& message) |
jburhenn | 0:8ce4fc106e50 | 101 | { |
dadangjia | 9:3ba93660c82e | 102 | size_t j; |
jburhenn | 0:8ce4fc106e50 | 103 | switch (message.topic) { |
jburhenn | 0:8ce4fc106e50 | 104 | case COMMAND_TOPIC: |
dadangjia | 9:3ba93660c82e | 105 | pc.printf("topic=Command"); |
jburhenn | 0:8ce4fc106e50 | 106 | break; |
jburhenn | 0:8ce4fc106e50 | 107 | case CONFIG_TOPIC: |
dadangjia | 9:3ba93660c82e | 108 | pc.printf("topic=Config"); |
jburhenn | 0:8ce4fc106e50 | 109 | break; |
jburhenn | 0:8ce4fc106e50 | 110 | default: |
dadangjia | 9:3ba93660c82e | 111 | pc.printf("topic=%d", message.topic); |
jburhenn | 0:8ce4fc106e50 | 112 | break; |
jburhenn | 0:8ce4fc106e50 | 113 | } |
dadangjia | 9:3ba93660c82e | 114 | pc.printf(" channel=%d", message.channel); |
jburhenn | 0:8ce4fc106e50 | 115 | if (message.clientID) { |
dadangjia | 9:3ba93660c82e | 116 | pc.printf(" clientID=%s", message.clientID); |
jburhenn | 0:8ce4fc106e50 | 117 | } |
jburhenn | 0:8ce4fc106e50 | 118 | if (message.type) { |
dadangjia | 9:3ba93660c82e | 119 | pc.printf(" type=%s", message.type); |
jburhenn | 0:8ce4fc106e50 | 120 | } |
jburhenn | 0:8ce4fc106e50 | 121 | for (size_t i = 0; i < message.valueCount; ++i) { |
jburhenn | 2:472a2fd3359a | 122 | if (message.getValue(i)) { |
dadangjia | 9:3ba93660c82e | 123 | pc.printf(" value=%s", message.getValue(i)); |
dadangjia | 9:3ba93660c82e | 124 | j = i; |
jburhenn | 2:472a2fd3359a | 125 | } |
jburhenn | 2:472a2fd3359a | 126 | if (message.getUnit(i)) { |
dadangjia | 9:3ba93660c82e | 127 | pc.printf(" unit=%s", message.getUnit(i)); |
jburhenn | 2:472a2fd3359a | 128 | } |
jburhenn | 0:8ce4fc106e50 | 129 | } |
jburhenn | 0:8ce4fc106e50 | 130 | if (message.id) { |
dadangjia | 9:3ba93660c82e | 131 | pc.printf(" id=%s", message.id); |
jburhenn | 0:8ce4fc106e50 | 132 | } |
dadangjia | 9:3ba93660c82e | 133 | pc.printf("\n"); |
dadangjia | 10:63b5e5d19bee | 134 | /* |
dadangjia | 10:63b5e5d19bee | 135 | switch(message.channel) |
dadangjia | 10:63b5e5d19bee | 136 | { |
dadangjia | 10:63b5e5d19bee | 137 | case 7:if(strstr(message.getValue(j),"0")) |
dadangjia | 10:63b5e5d19bee | 138 | { |
dadangjia | 10:63b5e5d19bee | 139 | gled=0; |
dadangjia | 10:63b5e5d19bee | 140 | } |
dadangjia | 10:63b5e5d19bee | 141 | else if(strstr(message.getValue(j),"1")) |
dadangjia | 10:63b5e5d19bee | 142 | { |
dadangjia | 10:63b5e5d19bee | 143 | gled=1; |
dadangjia | 10:63b5e5d19bee | 144 | } |
dadangjia | 10:63b5e5d19bee | 145 | pc.printf("LED=%s\n", message.getValue(j)); |
dadangjia | 10:63b5e5d19bee | 146 | break; |
dadangjia | 10:63b5e5d19bee | 147 | case 11:if(strstr(message.getValue(j),"0")) |
dadangjia | 10:63b5e5d19bee | 148 | { |
dadangjia | 10:63b5e5d19bee | 149 | bled=0; |
dadangjia | 10:63b5e5d19bee | 150 | } |
dadangjia | 10:63b5e5d19bee | 151 | else if(strstr(message.getValue(j),"1")) |
dadangjia | 10:63b5e5d19bee | 152 | { |
dadangjia | 10:63b5e5d19bee | 153 | bled=1; |
dadangjia | 10:63b5e5d19bee | 154 | } |
dadangjia | 10:63b5e5d19bee | 155 | pc.printf("LED2=%s\n", message.getValue(j)); |
dadangjia | 10:63b5e5d19bee | 156 | break; |
dadangjia | 10:63b5e5d19bee | 157 | } |
dadangjia | 10:63b5e5d19bee | 158 | */ |
dadangjia | 9:3ba93660c82e | 159 | |
jburhenn | 0:8ce4fc106e50 | 160 | } |
jburhenn | 0:8ce4fc106e50 | 161 | |
jburhenn | 0:8ce4fc106e50 | 162 | /** |
jburhenn | 0:8ce4fc106e50 | 163 | * Handle messages received from the Cayenne server. |
jburhenn | 0:8ce4fc106e50 | 164 | * @param[in] message The message received from the Cayenne server. |
jburhenn | 0:8ce4fc106e50 | 165 | */ |
jburhenn | 2:472a2fd3359a | 166 | void messageArrived(CayenneMQTT::MessageData& message) |
jburhenn | 0:8ce4fc106e50 | 167 | { |
jburhenn | 0:8ce4fc106e50 | 168 | int error = 0; |
jburhenn | 0:8ce4fc106e50 | 169 | // Add code to process the message. Here we just ouput the message data. |
jburhenn | 0:8ce4fc106e50 | 170 | outputMessage(message); |
jburhenn | 0:8ce4fc106e50 | 171 | |
jburhenn | 2:472a2fd3359a | 172 | if (message.topic == COMMAND_TOPIC) { |
jburhenn | 2:472a2fd3359a | 173 | // If this is a command message we publish a response to show we recieved it. Here we are just sending a default 'OK' response. |
jburhenn | 2:472a2fd3359a | 174 | // An error response should be sent if there are issues processing the message. |
jburhenn | 5:f3de9c6ca8f5 | 175 | if ((error = mqttClient.publishResponse(message.id, NULL, message.clientID)) != CAYENNE_SUCCESS) { |
dadangjia | 9:3ba93660c82e | 176 | pc.printf("Response failure, error: %d\n", error); |
jburhenn | 2:472a2fd3359a | 177 | } |
jburhenn | 2:472a2fd3359a | 178 | |
jburhenn | 2:472a2fd3359a | 179 | // Send the updated state for the channel so it is reflected in the Cayenne dashboard. If a command is successfully processed |
jburhenn | 2:472a2fd3359a | 180 | // the updated state will usually just be the value received in the command message. |
jburhenn | 2:472a2fd3359a | 181 | if ((error = mqttClient.publishData(DATA_TOPIC, message.channel, NULL, NULL, message.getValue())) != CAYENNE_SUCCESS) { |
dadangjia | 9:3ba93660c82e | 182 | pc.printf("Publish state failure, error: %d\n", error); |
jburhenn | 2:472a2fd3359a | 183 | } |
jburhenn | 2:472a2fd3359a | 184 | } |
jburhenn | 0:8ce4fc106e50 | 185 | } |
jburhenn | 0:8ce4fc106e50 | 186 | |
jburhenn | 0:8ce4fc106e50 | 187 | /** |
jburhenn | 0:8ce4fc106e50 | 188 | * Connect to the Cayenne server. |
jburhenn | 0:8ce4fc106e50 | 189 | * @return Returns CAYENNE_SUCCESS if the connection succeeds, or an error code otherwise. |
jburhenn | 0:8ce4fc106e50 | 190 | */ |
jburhenn | 0:8ce4fc106e50 | 191 | int connectClient(void) |
jburhenn | 0:8ce4fc106e50 | 192 | { |
jburhenn | 0:8ce4fc106e50 | 193 | int error = 0; |
jburhenn | 0:8ce4fc106e50 | 194 | // Connect to the server. |
dadangjia | 9:3ba93660c82e | 195 | pc.printf("Connecting to %s:%d\n", CAYENNE_DOMAIN, CAYENNE_PORT); |
jburhenn | 0:8ce4fc106e50 | 196 | while ((error = network.connect(CAYENNE_DOMAIN, CAYENNE_PORT)) != 0) { |
dadangjia | 9:3ba93660c82e | 197 | pc.printf("TCP connect failed, error: %d\n", error); |
jburhenn | 0:8ce4fc106e50 | 198 | wait(2); |
jburhenn | 0:8ce4fc106e50 | 199 | } |
jburhenn | 0:8ce4fc106e50 | 200 | |
jburhenn | 2:472a2fd3359a | 201 | if ((error = mqttClient.connect()) != MQTT::SUCCESS) { |
dadangjia | 9:3ba93660c82e | 202 | pc.printf("MQTT connect failed, error: %d\n", error); |
jburhenn | 0:8ce4fc106e50 | 203 | return error; |
jburhenn | 0:8ce4fc106e50 | 204 | } |
dadangjia | 9:3ba93660c82e | 205 | pc.printf("Connected\n"); |
jburhenn | 0:8ce4fc106e50 | 206 | |
jburhenn | 0:8ce4fc106e50 | 207 | // Subscribe to required topics. |
jburhenn | 0:8ce4fc106e50 | 208 | if ((error = mqttClient.subscribe(COMMAND_TOPIC, CAYENNE_ALL_CHANNELS)) != CAYENNE_SUCCESS) { |
dadangjia | 9:3ba93660c82e | 209 | pc.printf("Subscription to Command topic failed, error: %d\n", error); |
jburhenn | 0:8ce4fc106e50 | 210 | } |
jburhenn | 0:8ce4fc106e50 | 211 | if ((error = mqttClient.subscribe(CONFIG_TOPIC, CAYENNE_ALL_CHANNELS)) != CAYENNE_SUCCESS) { |
dadangjia | 9:3ba93660c82e | 212 | pc.printf("Subscription to Config topic failed, error:%d\n", error); |
jburhenn | 0:8ce4fc106e50 | 213 | } |
jburhenn | 0:8ce4fc106e50 | 214 | |
jburhenn | 0:8ce4fc106e50 | 215 | // Send device info. Here we just send some example values for the system info. These should be changed to use actual system data, or removed if not needed. |
jburhenn | 0:8ce4fc106e50 | 216 | mqttClient.publishData(SYS_VERSION_TOPIC, CAYENNE_NO_CHANNEL, NULL, NULL, CAYENNE_VERSION); |
jburhenn | 0:8ce4fc106e50 | 217 | mqttClient.publishData(SYS_MODEL_TOPIC, CAYENNE_NO_CHANNEL, NULL, NULL, "mbedDevice"); |
dadangjia | 10:63b5e5d19bee | 218 | mqttClient.publishData(SYS_CPU_MODEL_TOPIC, CAYENNE_NO_CHANNEL, NULL, NULL, "CPU Model"); |
dadangjia | 10:63b5e5d19bee | 219 | mqttClient.publishData(SYS_CPU_SPEED_TOPIC, CAYENNE_NO_CHANNEL, NULL, NULL, "72000000"); |
jburhenn | 0:8ce4fc106e50 | 220 | |
jburhenn | 0:8ce4fc106e50 | 221 | return CAYENNE_SUCCESS; |
jburhenn | 0:8ce4fc106e50 | 222 | } |
jburhenn | 0:8ce4fc106e50 | 223 | |
jburhenn | 0:8ce4fc106e50 | 224 | /** |
jburhenn | 0:8ce4fc106e50 | 225 | * Main loop where MQTT code is run. |
jburhenn | 0:8ce4fc106e50 | 226 | */ |
jburhenn | 0:8ce4fc106e50 | 227 | void loop(void) |
jburhenn | 0:8ce4fc106e50 | 228 | { |
jburhenn | 8:be2ac38e5bb9 | 229 | // Start the countdown timer for publishing data every 5 seconds. Change the timeout parameter to publish at a different interval. |
jburhenn | 0:8ce4fc106e50 | 230 | MQTTTimer timer(5000); |
jburhenn | 0:8ce4fc106e50 | 231 | |
jburhenn | 0:8ce4fc106e50 | 232 | while (true) { |
jburhenn | 0:8ce4fc106e50 | 233 | // Yield to allow MQTT message processing. |
jburhenn | 0:8ce4fc106e50 | 234 | mqttClient.yield(1000); |
jburhenn | 0:8ce4fc106e50 | 235 | |
jburhenn | 0:8ce4fc106e50 | 236 | // Check that we are still connected, if not, reconnect. |
jburhenn | 0:8ce4fc106e50 | 237 | if (!network.connected() || !mqttClient.connected()) { |
jburhenn | 0:8ce4fc106e50 | 238 | network.disconnect(); |
jburhenn | 0:8ce4fc106e50 | 239 | mqttClient.disconnect(); |
dadangjia | 9:3ba93660c82e | 240 | pc.printf("Reconnecting\n"); |
jburhenn | 0:8ce4fc106e50 | 241 | while (connectClient() != CAYENNE_SUCCESS) { |
jburhenn | 0:8ce4fc106e50 | 242 | wait(2); |
dadangjia | 9:3ba93660c82e | 243 | pc.printf("Reconnect failed, retrying\n"); |
jburhenn | 0:8ce4fc106e50 | 244 | } |
jburhenn | 0:8ce4fc106e50 | 245 | } |
jburhenn | 0:8ce4fc106e50 | 246 | |
jburhenn | 0:8ce4fc106e50 | 247 | // Publish some example data every few seconds. This should be changed to send your actual data to Cayenne. |
jburhenn | 0:8ce4fc106e50 | 248 | if (timer.expired()) { |
dadangjia | 9:3ba93660c82e | 249 | int error=0; |
dadangjia | 9:3ba93660c82e | 250 | if ((error = mqttClient.publishData(DATA_TOPIC, 0, TYPE_TEMPERATURE, UNIT_CELSIUS, Temperature)) != CAYENNE_SUCCESS) { |
dadangjia | 9:3ba93660c82e | 251 | pc.printf("T:%2.2fC\n",Temperature); |
dadangjia | 9:3ba93660c82e | 252 | } |
dadangjia | 9:3ba93660c82e | 253 | if ((error = mqttClient.publishData(DATA_TOPIC, 1, TYPE_LUMINOSITY, UNIT_LUX, (long)Pressure)) != CAYENNE_SUCCESS) { |
dadangjia | 9:3ba93660c82e | 254 | pc.printf("P:%6.0fPa\n",Pressure); |
dadangjia | 10:63b5e5d19bee | 255 | } |
dadangjia | 9:3ba93660c82e | 256 | if ((error = mqttClient.publishData(DATA_TOPIC, 8, TYPE_BAROMETRIC_PRESSURE, UNIT_HECTOPASCAL, ADC_VALUE[0])) != CAYENNE_SUCCESS) { |
dadangjia | 9:3ba93660c82e | 257 | pc.printf("A0:%4dmV\n", ADC_VALUE[0]); |
dadangjia | 9:3ba93660c82e | 258 | } |
dadangjia | 9:3ba93660c82e | 259 | if ((error = mqttClient.publishData(DATA_TOPIC, 9, TYPE_BAROMETRIC_PRESSURE, UNIT_HECTOPASCAL, ADC_VALUE[1])) != CAYENNE_SUCCESS) { |
dadangjia | 9:3ba93660c82e | 260 | pc.printf("A1:%4dmV\n", ADC_VALUE[1]); |
dadangjia | 9:3ba93660c82e | 261 | } |
dadangjia | 9:3ba93660c82e | 262 | if ((error = mqttClient.publishData(DATA_TOPIC, 10, TYPE_BAROMETRIC_PRESSURE, UNIT_HECTOPASCAL, ADC_VALUE[2])) != CAYENNE_SUCCESS) { |
dadangjia | 9:3ba93660c82e | 263 | pc.printf("A2:%4dmV\n", ADC_VALUE[2]); |
dadangjia | 9:3ba93660c82e | 264 | } |
dadangjia | 10:63b5e5d19bee | 265 | // if ((error = mqttClient.publishData(DATA_TOPIC, 13, TYPE_BAROMETRIC_PRESSURE, UNIT_HECTOPASCAL, pHValue)) != CAYENNE_SUCCESS) { |
dadangjia | 10:63b5e5d19bee | 266 | // pc.printf("PH:%.2f\n",pHValue); |
dadangjia | 10:63b5e5d19bee | 267 | // } |
jburhenn | 8:be2ac38e5bb9 | 268 | // Restart the countdown timer for publishing data every 5 seconds. Change the timeout parameter to publish at a different interval. |
jburhenn | 0:8ce4fc106e50 | 269 | timer.countdown_ms(5000); |
jburhenn | 0:8ce4fc106e50 | 270 | } |
jburhenn | 0:8ce4fc106e50 | 271 | } |
jburhenn | 0:8ce4fc106e50 | 272 | } |
jburhenn | 0:8ce4fc106e50 | 273 | |
dadangjia | 9:3ba93660c82e | 274 | char * IP_Addr = "192.168.0.194"; |
dadangjia | 9:3ba93660c82e | 275 | char * IP_Subnet = "255.255.255.0"; |
dadangjia | 9:3ba93660c82e | 276 | char * IP_Gateway = "192.168.0.1"; |
dadangjia | 9:3ba93660c82e | 277 | unsigned char MAC_Addr[6] = {0x00,0x08,0xDC,0x12,0x34,0x56}; |
dadangjia | 9:3ba93660c82e | 278 | void W5500_init() |
dadangjia | 9:3ba93660c82e | 279 | { |
dadangjia | 9:3ba93660c82e | 280 | #if USE_DHCP |
dadangjia | 9:3ba93660c82e | 281 | int ret = ethernet.init(MAC_Addr); |
dadangjia | 9:3ba93660c82e | 282 | #else |
dadangjia | 9:3ba93660c82e | 283 | int ret = ethernet.init(MAC_Addr,IP_Addr,IP_Subnet,IP_Gateway); |
dadangjia | 9:3ba93660c82e | 284 | #endif |
dadangjia | 9:3ba93660c82e | 285 | if (!ret) { |
dadangjia | 9:3ba93660c82e | 286 | pc.printf("Initialized, MAC: %s\r\n", ethernet.getMACAddress()); |
dadangjia | 9:3ba93660c82e | 287 | ret = ethernet.connect(); |
dadangjia | 9:3ba93660c82e | 288 | if (!ret) { |
dadangjia | 9:3ba93660c82e | 289 | pc.printf("IP: %s, MASK: %s, GW: %s\r\n", |
dadangjia | 9:3ba93660c82e | 290 | ethernet.getIPAddress(), ethernet.getNetworkMask(), ethernet.getGateway()); |
dadangjia | 9:3ba93660c82e | 291 | sendStrXY("IP:",1,0); |
dadangjia | 9:3ba93660c82e | 292 | sendStrXY(ethernet.getIPAddress(),1,3); |
dadangjia | 9:3ba93660c82e | 293 | } else { |
dadangjia | 9:3ba93660c82e | 294 | pc.printf("Error ethernet.connect() - ret = %d\r\n", ret); |
dadangjia | 9:3ba93660c82e | 295 | exit(0); |
dadangjia | 9:3ba93660c82e | 296 | } |
dadangjia | 9:3ba93660c82e | 297 | } else { |
dadangjia | 9:3ba93660c82e | 298 | pc.printf("Error ethernet.init() - ret = %d\r\n", ret); |
dadangjia | 9:3ba93660c82e | 299 | exit(0); |
dadangjia | 9:3ba93660c82e | 300 | } |
dadangjia | 9:3ba93660c82e | 301 | } |
jburhenn | 0:8ce4fc106e50 | 302 | /** |
jburhenn | 0:8ce4fc106e50 | 303 | * Main function. |
jburhenn | 0:8ce4fc106e50 | 304 | */ |
jburhenn | 0:8ce4fc106e50 | 305 | int main() |
jburhenn | 0:8ce4fc106e50 | 306 | { |
dadangjia | 9:3ba93660c82e | 307 | pc.baud(921600); |
dadangjia | 9:3ba93660c82e | 308 | pc.printf("Stm32f103k3t6-w5500-Cayeme-ethernet\n"); |
dadangjia | 9:3ba93660c82e | 309 | OLED_INIT(); |
dadangjia | 9:3ba93660c82e | 310 | ticker.attach(&Stm32f103c8t6_ticker, tickerTime); |
dadangjia | 10:63b5e5d19bee | 311 | // ph_ticker.attach(&PH_ticker, ph_sampleTime); |
jburhenn | 0:8ce4fc106e50 | 312 | // Set the correct SPI frequency for your shield, if necessary. For example, 42000000 for Arduino Ethernet Shield W5500 or 20000000 for Arduino Ethernet Shield W5100. |
dadangjia | 9:3ba93660c82e | 313 | W5500_init(); |
jburhenn | 0:8ce4fc106e50 | 314 | // Set the default function that receives Cayenne messages. |
jburhenn | 0:8ce4fc106e50 | 315 | mqttClient.setDefaultMessageHandler(messageArrived); |
jburhenn | 0:8ce4fc106e50 | 316 | // Connect to Cayenne. |
jburhenn | 0:8ce4fc106e50 | 317 | if (connectClient() == CAYENNE_SUCCESS) { |
jburhenn | 0:8ce4fc106e50 | 318 | // Run main loop. |
jburhenn | 0:8ce4fc106e50 | 319 | loop(); |
jburhenn | 0:8ce4fc106e50 | 320 | } |
jburhenn | 0:8ce4fc106e50 | 321 | else { |
dadangjia | 9:3ba93660c82e | 322 | pc.printf("Connection failed, exiting\n"); |
jburhenn | 0:8ce4fc106e50 | 323 | } |
jburhenn | 0:8ce4fc106e50 | 324 | |
jburhenn | 0:8ce4fc106e50 | 325 | if (mqttClient.connected()) |
jburhenn | 0:8ce4fc106e50 | 326 | mqttClient.disconnect(); |
jburhenn | 0:8ce4fc106e50 | 327 | if (network.connected()) |
jburhenn | 0:8ce4fc106e50 | 328 | network.disconnect(); |
jburhenn | 0:8ce4fc106e50 | 329 | |
jburhenn | 0:8ce4fc106e50 | 330 | return 0; |
jburhenn | 0:8ce4fc106e50 | 331 | } |
jburhenn | 0:8ce4fc106e50 | 332 |