STM32F103C8T6-Cayenne-WIZnet_SD1306_BMP280

Dependencies:   Cayenne-MQTT-mbed mbed Cayenne-WIZnet_Library WIZnet_Library BME280

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?

UserRevisionLine numberNew 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