Working example code TCP 1883.
Dependencies: EthernetInterface MQTT mbed-rtos mbed
Fork of K64F-RTOS-MQTT-Example by
main.cpp
00001 #include "mbed.h" 00002 #include "MQTTClient.h" 00003 #include "MQTTEthernet.h" 00004 #include "rtos.h" 00005 #include "k64f.h" 00006 // connect options for MQTT broker 00007 #define BROKER "192.168.0.29" // MQTT broker URL 00008 #define PORT 1883 // MQTT broker port number 00009 #define CLIENTID "0002F7F000" // use K64F MAC address without colons 00010 #define USERNAME "" // not required for MQTT Dashboard public broker 00011 #define PASSWORD "" // not required for MQTT Dashboard public broker 00012 #define TOPIC "testeroo" // MQTT topic 00013 00014 Queue<uint32_t, 6> messageQ; 00015 bool flash = false; 00016 int thresh = 3; 00017 // LED color control function 00018 void controlLED(color_t led_color) { 00019 switch(led_color) { 00020 case red : 00021 greenLED = blueLED = 1; 00022 redLED = 0.7; 00023 break; 00024 case green : 00025 redLED = blueLED = 1; 00026 greenLED = 0.7; 00027 break; 00028 case blue : 00029 redLED = greenLED = 1; 00030 blueLED = 0.7; 00031 break; 00032 case off : 00033 redLED = greenLED = blueLED = 1; 00034 break; 00035 } 00036 } 00037 00038 // Switch 2 interrupt handler 00039 void sw2_ISR(void) { 00040 messageQ.put((uint32_t*)22); 00041 } 00042 00043 // Switch3 interrupt handler 00044 void sw3_ISR(void) { 00045 messageQ.put((uint32_t*)33); 00046 } 00047 00048 // MQTT message arrived callback function 00049 void messageArrived(MQTT::MessageData& md) { 00050 MQTT::Message &message = md.message; 00051 pc.printf("Receiving MQTT message: %.*s\r\n", message.payloadlen, (char*)message.payload); 00052 00053 // if (message.payloadlen == 3) { 00054 if (strncmp((char*)message.payload, "red", 3) == 0) 00055 controlLED(red); 00056 00057 else if(strncmp((char*)message.payload, "add", 3) == 0) 00058 {controlLED(off); 00059 controlLED(green); 00060 wait(.1); 00061 controlLED(off);} 00062 00063 else if(strncmp((char*)message.payload, "blu", 3) == 0) 00064 controlLED(blue); 00065 00066 else if(strncmp((char*)message.payload, "off", 3) == 0) 00067 controlLED(off); 00068 00069 else if(strncmp((char*)message.payload, "b1o", 3) == 0) 00070 flash = true; 00071 else if(strncmp((char*)message.payload, "b1u", 3) == 0) 00072 {flash = false; 00073 controlLED(off); 00074 controlLED(blue); 00075 wait(.1); 00076 controlLED(off);} 00077 else if(strncmp((char*)message.payload, "new", 3)==0) 00078 {controlLED(off); 00079 controlLED(blue); 00080 wait(.1); 00081 controlLED(off);} 00082 00083 // } 00084 } 00085 00086 int main() { 00087 // turn off LED 00088 controlLED(red); 00089 00090 // set SW2 and SW3 to generate interrupt on falling edge 00091 switch2.fall(&sw2_ISR); 00092 switch3.fall(&sw3_ISR); 00093 00094 pc.printf("\r\n\r\nWelcome to the K64F MQTT Demo!\r\n"); 00095 pc.printf("\r\nAttempting connect to local network...\r\n"); 00096 00097 // initialize ethernet interface 00098 MQTTEthernet ipstack = MQTTEthernet(); 00099 00100 // get and display client network info 00101 EthernetInterface& eth = ipstack.getEth(); 00102 pc.printf("IP address is %s\r\n", eth.getIPAddress()); 00103 pc.printf("MAC address is %s\r\n", eth.getMACAddress()); 00104 pc.printf("Gateway address is %s\r\n", eth.getGateway()); 00105 00106 00107 // construct the MQTT client 00108 MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack); 00109 00110 char* hostname = BROKER; 00111 int port = PORT; 00112 int rc; 00113 00114 pc.printf("\r\nAttempting TCP connect to %s:%d: ", hostname, port); 00115 00116 // connect to TCP socket and check return code 00117 if ((rc = ipstack.connect(hostname, port)) != 0){ 00118 pc.printf("failed: rc= %d\r\n", rc); 00119 controlLED(blue);} 00120 00121 else 00122 pc.printf("success\r\n"); 00123 00124 00125 //client starts building connection request to the broker 00126 MQTTPacket_connectData data = MQTTPacket_connectData_initializer; 00127 data.MQTTVersion = 3; 00128 data.clientID.cstring = CLIENTID; 00129 // data.username.cstring = USERNAME; 00130 // data.password.cstring = PASSWORD; 00131 00132 // send MQTT connect packet and check return code 00133 pc.printf("Attempting MQTT connect to %s:%d: ", hostname, port); 00134 if ((rc = client.connect(data)) != 0){ 00135 pc.printf("failed: rc= %d\r\n", rc); 00136 controlLED(green);} 00137 else{ 00138 pc.printf("success\r\n"); 00139 controlLED(off);} 00140 00141 char* topic = TOPIC; 00142 00143 // subscribe to MQTT topic 00144 pc.printf("Subscribing to MQTT topic %s: ", topic); 00145 if ((rc = client.subscribe(topic, MQTT::QOS0, messageArrived)) != 0) 00146 pc.printf("failed: rc= %d\r\n", rc); 00147 00148 else 00149 pc.printf("success\r\n"); 00150 00151 MQTT::Message message; 00152 char buf[100]; 00153 message.qos = MQTT::QOS0; 00154 message.retained = false; 00155 message.dup = false; 00156 message.payload = (void*)buf; 00157 message.payloadlen = strlen(buf)+1; 00158 int counter = 0; 00159 00160 while(true) { 00161 osEvent switchEvent = messageQ.get(100); 00162 00163 00164 if(flash){ 00165 controlLED(red); 00166 wait(.25); 00167 controlLED(off); 00168 wait(.25); 00169 } 00170 00171 if (switchEvent.value.v == 22 || switchEvent.value.v == 33) { 00172 switch(switchEvent.value.v) { 00173 case 22 : 00174 if(counter == thresh){sprintf(buf, "b1o");} 00175 else{sprintf(buf, "add");} 00176 counter++; 00177 break; 00178 case 33 : 00179 00180 if(counter == (thresh+1)){sprintf(buf, "b1u");} 00181 else{sprintf(buf, "new");} 00182 if(counter > 0){counter--;} 00183 break; 00184 } 00185 00186 00187 pc.printf("Publishing MQTT message: %.*s\r\n", message.payloadlen, (char*)message.payload); 00188 rc = client.publish(topic, message); 00189 client.yield(100); 00190 00191 } 00192 00193 else { 00194 client.yield(100); 00195 } 00196 } 00197 }
Generated on Wed Jul 27 2022 06:16:17 by 1.7.2