Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp
00001 //MQTT+WIFI 00002 00003 00004 #define logMessage printf 00005 #define MQTTCLIENT_QOS2 1 00006 00007 #include "MQTTNetwork.h" 00008 #include "MQTTmbed.h" 00009 #include "MQTTClient.h" 00010 00011 int arrivedcount = 0; 00012 // 00013 00014 00015 #include "mbed.h" 00016 #include "TCPSocket.h" 00017 #include "VL53L1X.h" 00018 #include <string> 00019 #define WIFI_IDW0XX1 2 00020 00021 #if (defined(TARGET_DISCO_L475VG_IOT01A) || defined(TARGET_DISCO_F413ZH)) 00022 #include "ISM43362Interface.h" 00023 ISM43362Interface wifi(MBED_CONF_APP_WIFI_SPI_MOSI, MBED_CONF_APP_WIFI_SPI_MISO, MBED_CONF_APP_WIFI_SPI_SCLK, MBED_CONF_APP_WIFI_SPI_NSS, MBED_CONF_APP_WIFI_RESET, MBED_CONF_APP_WIFI_DATAREADY, MBED_CONF_APP_WIFI_WAKEUP, false); 00024 00025 #else // External WiFi modules 00026 00027 #if MBED_CONF_APP_WIFI_SHIELD == WIFI_IDW0XX1 00028 #include "SpwfSAInterface.h" 00029 SpwfSAInterface wifi(MBED_CONF_APP_WIFI_TX, MBED_CONF_APP_WIFI_RX); 00030 #endif // MBED_CONF_APP_WIFI_SHIELD == WIFI_IDW0XX1 00031 00032 #endif 00033 00034 00035 void messageArrived(MQTT::MessageData& md) 00036 { 00037 MQTT::Message &message = md.message; 00038 logMessage("Message arrived: qos %d, retained %d, dup %d, packetid %d\r\n", message.qos, message.retained, message.dup, message.id); 00039 logMessage("Payload %.*s\r\n", message.payloadlen, (char*)message.payload); 00040 //++arrivedcount; 00041 } 00042 00043 00044 const char *sec2str(nsapi_security_t sec) 00045 { 00046 switch (sec) { 00047 case NSAPI_SECURITY_NONE: 00048 return "None"; 00049 case NSAPI_SECURITY_WEP: 00050 return "WEP"; 00051 case NSAPI_SECURITY_WPA: 00052 return "WPA"; 00053 case NSAPI_SECURITY_WPA2: 00054 return "WPA2"; 00055 case NSAPI_SECURITY_WPA_WPA2: 00056 return "WPA/WPA2"; 00057 case NSAPI_SECURITY_UNKNOWN: 00058 default: 00059 return "Unknown"; 00060 } 00061 } 00062 00063 int scan_demo(WiFiInterface *wifi) 00064 { 00065 WiFiAccessPoint *ap; 00066 00067 printf("Scan:\n"); 00068 00069 int count = wifi->scan(NULL,0); 00070 printf("%d networks available.\n", count); 00071 00072 /* Limit number of network arbitrary to 15 */ 00073 count = count < 15 ? count : 15; 00074 00075 ap = new WiFiAccessPoint[count]; 00076 count = wifi->scan(ap, count); 00077 for (int i = 0; i < count; i++) 00078 { 00079 printf("Network: %s secured: %s BSSID: %hhX:%hhX:%hhX:%hhx:%hhx:%hhx RSSI: %hhd Ch: %hhd\n", ap[i].get_ssid(), 00080 sec2str(ap[i].get_security()), ap[i].get_bssid()[0], ap[i].get_bssid()[1], ap[i].get_bssid()[2], 00081 ap[i].get_bssid()[3], ap[i].get_bssid()[4], ap[i].get_bssid()[5], ap[i].get_rssi(), ap[i].get_channel()); 00082 } 00083 00084 delete[] ap; 00085 return count; 00086 } 00087 00088 void http_demo(NetworkInterface *net) 00089 { 00090 TCPSocket socket; 00091 nsapi_error_t response; 00092 00093 printf("Sending HTTP request to www.arm.com...\n"); 00094 00095 // Open a socket on the network interface, and create a TCP connection to www.arm.com 00096 socket.open(net); 00097 response = socket.connect("www.arm.com", 80); 00098 if(0 != response) { 00099 printf("Error connecting: %d\n", response); 00100 socket.close(); 00101 return; 00102 } 00103 00104 // Send a simple http request 00105 char sbuffer[] = "GET / HTTP/1.1\r\nHost: www.arm.com\r\n\r\n"; 00106 nsapi_size_t size = strlen(sbuffer); 00107 response = 0; 00108 while(size) 00109 { 00110 response = socket.send(sbuffer+response, size); 00111 if (response < 0) { 00112 printf("Error sending data: %d\n", response); 00113 socket.close(); 00114 return; 00115 } else { 00116 size -= response; 00117 // Check if entire message was sent or not 00118 printf("sent %d [%.*s]\n", response, strstr(sbuffer, "\r\n")-sbuffer, sbuffer); 00119 } 00120 } 00121 00122 // Recieve a simple http response and print out the response line 00123 char rbuffer[64]; 00124 response = socket.recv(rbuffer, sizeof rbuffer); 00125 if (response < 0) { 00126 printf("Error receiving data: %d\n", response); 00127 } else { 00128 printf("recv %d [%.*s]\n", response, strstr(rbuffer, "\r\n")-rbuffer, rbuffer); 00129 } 00130 00131 // Close the socket to return its memory and bring down the network interface 00132 socket.close(); 00133 } 00134 bool s1_init = true; 00135 bool s2_init = true; 00136 bool s3_init = true; 00137 bool s4_init = true; 00138 VL53L1X sensor1(PC_1,PC_0, PC_2); 00139 VL53L1X sensor2(PC_1,PC_0, PC_3); 00140 VL53L1X sensor3(PC_1,PC_0, PC_4); 00141 VL53L1X sensor4(PC_1,PC_0, PC_5); 00142 SPI acc (PA_7,PA_6,PA_5); 00143 DigitalOut cs(PB_8); 00144 char buffer[6]; 00145 int16_t data[3]; 00146 float x,y,z,w; 00147 Timer t; 00148 AnalogIn analog_value1(PA_2); 00149 AnalogIn analog_value2(PA_4); 00150 AnalogIn analog_value3(PB_1); 00151 AnalogIn analog_value4(PA_3); 00152 AnalogIn analog_value5(PB_0); 00153 Serial pc(USBTX,USBRX); 00154 00155 void sensor(void) 00156 { 00157 double meas_a; 00158 double meas_a1; 00159 double meas_b; 00160 double meas_b1; 00161 double meas_c; 00162 double meas_c1; 00163 double meas_d; 00164 double meas_d1; 00165 double meas_e; 00166 double meas_e1; 00167 double outputv; 00168 00169 double D1; 00170 double D2; 00171 double D3; 00172 double D4; 00173 00174 00175 00176 00177 sensor1.initReading(0x52,50000); 00178 sensor2.initReading(0x27,50000); 00179 sensor3.initReading(0x35,50000); 00180 sensor4.initReading(0x37,50000); 00181 sensor1.setDistanceMode(VL53L1X::Short); 00182 sensor2.setDistanceMode(VL53L1X::Short); 00183 sensor3.setDistanceMode(VL53L1X::Short); 00184 sensor4.setDistanceMode(VL53L1X::Short); 00185 cs=1; 00186 acc.format(8,3); 00187 acc.frequency(2000000); 00188 cs=0; 00189 acc.write(0x31); 00190 acc.write(0x0B); 00191 cs=1; 00192 cs=0; 00193 acc.write(0x2D); 00194 acc.write(0x08); 00195 cs=1; 00196 00197 D1 = sensor1.readFromOneSensor(); 00198 wait(0.1); 00199 D2 = sensor2.readFromOneSensor(); 00200 wait(0.1); 00201 D3 = sensor3.readFromOneSensor(); 00202 wait(0.1); 00203 D4 = sensor4.readFromOneSensor(); 00204 wait(0.1); 00205 00206 cs=0; 00207 acc.write(0x80|0x40|0x32); 00208 for (int i=0;i<=5;i++) 00209 { 00210 buffer[i]=acc.write(0x00); 00211 } 00212 cs= 1; 00213 data[0]=buffer[1]<<8|buffer[0]; 00214 data[1]=buffer[3]<<8|buffer[2]; 00215 data[2]=buffer[5]<<8|buffer[4]; 00216 x=0.004*data[0]; 00217 wait(0.1); 00218 y=0.004*data[1]; 00219 wait(0.1); 00220 z=0.004*data[2]; 00221 wait(0.1); 00222 w=atan2(x,y)*(57.4); 00223 wait(0.1); 00224 meas_a = analog_value1.read(); 00225 meas_a1 = meas_a * 3*25; 00226 meas_b = analog_value2.read(); 00227 meas_b1 = meas_b * 3*25; 00228 meas_c = analog_value3.read(); 00229 meas_c1 = meas_c * 3*25; 00230 meas_d = analog_value4.read(); 00231 meas_d1 = meas_d * 3*25; 00232 meas_e = analog_value5.read(); 00233 meas_e1 = meas_e * 3*25; 00234 00235 00236 00237 00238 } 00239 00240 00241 int main() 00242 { 00243 00244 00245 pc.baud (115200) ; 00246 00247 double meas_a; 00248 double meas_a1; 00249 double meas_b; 00250 double meas_b1; 00251 double meas_c; 00252 double meas_c1; 00253 double meas_d; 00254 double meas_d1; 00255 double meas_e; 00256 double meas_e1; 00257 double outputv; 00258 00259 double D1; 00260 double D2; 00261 double D3; 00262 double D4; 00263 00264 00265 00266 00267 sensor1.initReading(0x52,50000); 00268 sensor2.initReading(0x27,50000); 00269 sensor3.initReading(0x35,50000); 00270 sensor4.initReading(0x37,50000); 00271 sensor1.setDistanceMode(VL53L1X::Short); 00272 sensor2.setDistanceMode(VL53L1X::Short); 00273 sensor3.setDistanceMode(VL53L1X::Short); 00274 sensor4.setDistanceMode(VL53L1X::Short); 00275 cs=1; 00276 acc.format(8,3); 00277 acc.frequency(2000000); 00278 cs=0; 00279 acc.write(0x31); 00280 acc.write(0x0B); 00281 cs=1; 00282 cs=0; 00283 acc.write(0x2D); 00284 acc.write(0x08); 00285 cs=1; 00286 00287 D1 = sensor1.readFromOneSensor(); 00288 wait(0.1); 00289 D2 = sensor2.readFromOneSensor(); 00290 wait(0.1); 00291 D3 = sensor3.readFromOneSensor(); 00292 wait(0.1); 00293 D4 = sensor4.readFromOneSensor(); 00294 wait(0.1); 00295 00296 cs=0; 00297 acc.write(0x80|0x40|0x32); 00298 for (int i=0;i<=5;i++) 00299 { 00300 buffer[i]=acc.write(0x00); 00301 } 00302 cs= 1; 00303 data[0]=buffer[1]<<8|buffer[0]; 00304 data[1]=buffer[3]<<8|buffer[2]; 00305 data[2]=buffer[5]<<8|buffer[4]; 00306 x=0.004*data[0]; 00307 wait(0.1); 00308 y=0.004*data[1]; 00309 wait(0.1); 00310 z=0.004*data[2]; 00311 wait(0.1); 00312 w=atan2(x,y)*(57.4); 00313 wait(0.1); 00314 meas_a = analog_value1.read(); 00315 meas_a1 = meas_a * 3*25; 00316 meas_b = analog_value2.read(); 00317 meas_b1 = meas_b * 3*25; 00318 meas_c = analog_value3.read(); 00319 meas_c1 = meas_c * 3*25; 00320 meas_d = analog_value4.read(); 00321 meas_d1 = meas_d * 3*25; 00322 meas_e = analog_value5.read(); 00323 meas_e1 = meas_e * 3*25; 00324 00325 00326 00327 int count = 0; 00328 00329 printf("WiFi example\n\n"); 00330 00331 count = scan_demo(&wifi); 00332 00333 if (count == 0) { 00334 printf("No WIFI APNs found - can't continue further.\n"); 00335 return -1; 00336 } 00337 00338 printf("\nConnecting to %s...\n", MBED_CONF_APP_WIFI_SSID); 00339 int ret = wifi.connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2); 00340 //int ret = wifi.connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA); 00341 if (ret != 0) { 00342 printf("\nConnection error\n"); 00343 return -1; 00344 } 00345 00346 printf("Success\n\n"); 00347 printf("MAC: %s\n", wifi.get_mac_address()); 00348 printf("IP: %s\n", wifi.get_ip_address()); 00349 printf("Netmask: %s\n", wifi.get_netmask()); 00350 printf("Gateway: %s\n", wifi.get_gateway()); 00351 printf("RSSI: %d\n\n", wifi.get_rssi()); 00352 00353 http_demo(&wifi); 00354 00355 //wifi.disconnect(); 00356 00357 printf("\Wifi Example Done,MQTT Example Start\n"); 00358 00359 // MQTT Example Start 00360 float version = 0.6; 00361 char* topic = "192.168.0.164"; 00362 00363 logMessage("HelloMQTT: version is %.2f\r\n", version); 00364 00365 NetworkInterface* network = &wifi; 00366 if (!network) { 00367 return -1; 00368 } 00369 00370 MQTTNetwork mqttNetwork(network); 00371 00372 MQTT::Client<MQTTNetwork, Countdown> client(mqttNetwork); 00373 00374 const char* hostname = "192.168.0.164"; 00375 int port = 1883; 00376 logMessage("Connecting to %s:%d\r\n", hostname, port); 00377 int rc = mqttNetwork.connect(hostname, port); 00378 if (rc != 0) 00379 logMessage("rc from TCP connect is %d\r\n", rc); 00380 00381 MQTTPacket_connectData data = MQTTPacket_connectData_initializer; 00382 data.MQTTVersion = 3; 00383 data.clientID.cstring = "mbed-sample"; 00384 data.username.cstring = "testuser"; 00385 data.password.cstring = "testpassword"; 00386 if ((rc = client.connect(data)) != 0) 00387 logMessage("rc from MQTT connect is %d\r\n", rc); 00388 00389 if ((rc = client.subscribe(topic, MQTT::QOS2, messageArrived)) != 0) 00390 logMessage("rc from MQTT subscribe is %d\r\n", rc); 00391 00392 MQTT::Message message; 00393 //pc.printf("%d,%d,%d,%d,%+1.2f,%+1.2f,%+1.2f,%+1.2f,%1.0f,%1.0f,%1.0f,%1.0f,%1.0f\n\r", 00394 //sensor1.readFromOneSensor(), sensor2.readFromOneSensor(), sensor3.readFromOneSensor(), sensor4.readFromOneSensor(), 00395 //x,y,z,w, meas_a1, meas_b1, meas_c1, meas_d1, meas_e1); 00396 // QoS 0 00397 00398 char buf[100]; 00399 sprintf(buf, "100"); 00400 00401 00402 //sprintf(buf, "%d,%d,%d,%d,%+1.2f,%+1.2f,%+1.2f,%+1.2f,%1.0f,%1.0f,%1.0f,%1.0f,%1.0f\n\r", 00403 //sensor1.readFromOneSensor(), sensor2.readFromOneSensor(), sensor3.readFromOneSensor(), sensor4.readFromOneSensor(), 00404 //x,y,z,w, meas_a1, meas_b1, meas_c1, meas_d1, meas_e1); 00405 00406 00407 00408 message.qos = MQTT::QOS1; 00409 message.retained = false; 00410 message.dup = false; 00411 message.payload = (void*)buf; 00412 message.payloadlen = strlen(buf)+1; 00413 rc = client.publish(topic, message); 00414 client.yield(100); 00415 00416 00417 00418 00419 00420 }
Generated on Sun Jul 24 2022 03:43:05 by
1.7.2