Vladimir Tovladić / Mbed OS TV_20-616_PIM
Committer:
tv200616d
Date:
Mon Jan 17 15:59:40 2022 +0000
Revision:
0:ee7ec177de7e
Tovladic Vladimir 20/0616;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tv200616d 0:ee7ec177de7e 1 //include
tv200616d 0:ee7ec177de7e 2 #include "mbed.h"
tv200616d 0:ee7ec177de7e 3 #include "mb_pins.h"
tv200616d 0:ee7ec177de7e 4 #include "platform/mbed_thread.h"
tv200616d 0:ee7ec177de7e 5 #include "MQTTClientMbedOs.h"
tv200616d 0:ee7ec177de7e 6
tv200616d 0:ee7ec177de7e 7 //Define
tv200616d 0:ee7ec177de7e 8 #define BLINKING_RATE_MS 250
tv200616d 0:ee7ec177de7e 9 #define VOLTAGE_SCALER 3.3f
tv200616d 0:ee7ec177de7e 10 #define YIELD_TIMEOUT_MS 1000
tv200616d 0:ee7ec177de7e 11 #define MAX_NETWORKS 15
tv200616d 0:ee7ec177de7e 12 #define PRINTF_DELAY_MS 10
tv200616d 0:ee7ec177de7e 13
tv200616d 0:ee7ec177de7e 14 //Deklaracije
tv200616d 0:ee7ec177de7e 15 AnalogIn pot1(MB_POT1);
tv200616d 0:ee7ec177de7e 16 InterruptIn sw1(MB_SW1);
tv200616d 0:ee7ec177de7e 17 DigitalOut led2(MB_LED2);
tv200616d 0:ee7ec177de7e 18 WiFiInterface *wifi;
tv200616d 0:ee7ec177de7e 19 TCPSocket socket;
tv200616d 0:ee7ec177de7e 20 MQTTClient client(&socket);
tv200616d 0:ee7ec177de7e 21 MQTT::Message message;
tv200616d 0:ee7ec177de7e 22
tv200616d 0:ee7ec177de7e 23 char* topic = "pubpim";
tv200616d 0:ee7ec177de7e 24 char* topic_sub = "subpim";
tv200616d 0:ee7ec177de7e 25 int arrivedcount = 0;
tv200616d 0:ee7ec177de7e 26 int button_pressed=0;
tv200616d 0:ee7ec177de7e 27 const char* hostname = "broker.hivemq.com";
tv200616d 0:ee7ec177de7e 28 int port = 1883;
tv200616d 0:ee7ec177de7e 29
tv200616d 0:ee7ec177de7e 30 //Funkcije koje rade nesto
tv200616d 0:ee7ec177de7e 31 const char *sec2str(nsapi_security_t sec)
tv200616d 0:ee7ec177de7e 32 {
tv200616d 0:ee7ec177de7e 33 switch (sec)
tv200616d 0:ee7ec177de7e 34 {
tv200616d 0:ee7ec177de7e 35 case NSAPI_SECURITY_NONE:
tv200616d 0:ee7ec177de7e 36 return "None";
tv200616d 0:ee7ec177de7e 37 case NSAPI_SECURITY_WEP:
tv200616d 0:ee7ec177de7e 38 return "WEP";
tv200616d 0:ee7ec177de7e 39 case NSAPI_SECURITY_WPA:
tv200616d 0:ee7ec177de7e 40 return "WPA";
tv200616d 0:ee7ec177de7e 41 case NSAPI_SECURITY_WPA2:
tv200616d 0:ee7ec177de7e 42 return "WPA2";
tv200616d 0:ee7ec177de7e 43 case NSAPI_SECURITY_WPA_WPA2:
tv200616d 0:ee7ec177de7e 44 return "WPA/WPA2";
tv200616d 0:ee7ec177de7e 45 case NSAPI_SECURITY_UNKNOWN:
tv200616d 0:ee7ec177de7e 46 default:
tv200616d 0:ee7ec177de7e 47 return "Unknown";
tv200616d 0:ee7ec177de7e 48 }
tv200616d 0:ee7ec177de7e 49 }
tv200616d 0:ee7ec177de7e 50
tv200616d 0:ee7ec177de7e 51 int scan_networks(WiFiInterface *wifi)
tv200616d 0:ee7ec177de7e 52 {
tv200616d 0:ee7ec177de7e 53 printf("Scan:\n");
tv200616d 0:ee7ec177de7e 54
tv200616d 0:ee7ec177de7e 55 int count = wifi->scan(NULL, 0);
tv200616d 0:ee7ec177de7e 56 if (count <= 0)
tv200616d 0:ee7ec177de7e 57 {
tv200616d 0:ee7ec177de7e 58 printf("scan() failed with return value: %d\n", count);
tv200616d 0:ee7ec177de7e 59 return 0;
tv200616d 0:ee7ec177de7e 60 }
tv200616d 0:ee7ec177de7e 61
tv200616d 0:ee7ec177de7e 62 count = count < MAX_NETWORKS ? count : MAX_NETWORKS;
tv200616d 0:ee7ec177de7e 63
tv200616d 0:ee7ec177de7e 64 WiFiAccessPoint *ap = new WiFiAccessPoint[count];
tv200616d 0:ee7ec177de7e 65 count = wifi->scan(ap, count);
tv200616d 0:ee7ec177de7e 66
tv200616d 0:ee7ec177de7e 67 if (count <= 0)
tv200616d 0:ee7ec177de7e 68 {
tv200616d 0:ee7ec177de7e 69 printf("scan() failed with return value: %d\n", count);
tv200616d 0:ee7ec177de7e 70 return 0;
tv200616d 0:ee7ec177de7e 71 }
tv200616d 0:ee7ec177de7e 72
tv200616d 0:ee7ec177de7e 73
tv200616d 0:ee7ec177de7e 74 for (int i = 0; i < count; i++)
tv200616d 0:ee7ec177de7e 75 {
tv200616d 0:ee7ec177de7e 76 printf("Network: %s secured: %s BSSID: %hhX:%hhX:%hhX:%hhx:%hhx:%hhx RSSI: %hhd Ch: %hhd\n", ap[i].get_ssid(),
tv200616d 0:ee7ec177de7e 77 sec2str(ap[i].get_security()), ap[i].get_bssid()[0], ap[i].get_bssid()[1], ap[i].get_bssid()[2],
tv200616d 0:ee7ec177de7e 78 ap[i].get_bssid()[3], ap[i].get_bssid()[4], ap[i].get_bssid()[5], ap[i].get_rssi(), ap[i].get_channel());
tv200616d 0:ee7ec177de7e 79 thread_sleep_for(PRINTF_DELAY_MS);
tv200616d 0:ee7ec177de7e 80 }
tv200616d 0:ee7ec177de7e 81 printf("%d networks available.\n", count);
tv200616d 0:ee7ec177de7e 82
tv200616d 0:ee7ec177de7e 83 delete[] ap;
tv200616d 0:ee7ec177de7e 84 return count;
tv200616d 0:ee7ec177de7e 85 }
tv200616d 0:ee7ec177de7e 86
tv200616d 0:ee7ec177de7e 87 void messageArrived(MQTT::MessageData& md)
tv200616d 0:ee7ec177de7e 88 {
tv200616d 0:ee7ec177de7e 89 MQTT::Message &message = md.message;
tv200616d 0:ee7ec177de7e 90 printf("Message from the browser: %.*s\r\n", message.payloadlen, (char*)message.payload);
tv200616d 0:ee7ec177de7e 91 ++arrivedcount;
tv200616d 0:ee7ec177de7e 92 }
tv200616d 0:ee7ec177de7e 93
tv200616d 0:ee7ec177de7e 94 void buttonFunction() {
tv200616d 0:ee7ec177de7e 95
tv200616d 0:ee7ec177de7e 96 button_pressed=1;
tv200616d 0:ee7ec177de7e 97
tv200616d 0:ee7ec177de7e 98 }
tv200616d 0:ee7ec177de7e 99
tv200616d 0:ee7ec177de7e 100
tv200616d 0:ee7ec177de7e 101 //Glavna funkcija
tv200616d 0:ee7ec177de7e 102 int main()
tv200616d 0:ee7ec177de7e 103 {
tv200616d 0:ee7ec177de7e 104 sw1.fall(&buttonFunction);
tv200616d 0:ee7ec177de7e 105
tv200616d 0:ee7ec177de7e 106 wifi = WiFiInterface::get_default_instance();
tv200616d 0:ee7ec177de7e 107 if (!wifi) {
tv200616d 0:ee7ec177de7e 108 printf("ERROR: No WiFiInterface found.\n");
tv200616d 0:ee7ec177de7e 109 return -1;
tv200616d 0:ee7ec177de7e 110 }
tv200616d 0:ee7ec177de7e 111
tv200616d 0:ee7ec177de7e 112 int count = scan_networks(wifi);
tv200616d 0:ee7ec177de7e 113 if (count == 0) {
tv200616d 0:ee7ec177de7e 114 printf("No WIFI APs found - can't continue further.\n");
tv200616d 0:ee7ec177de7e 115 return -1;
tv200616d 0:ee7ec177de7e 116 }
tv200616d 0:ee7ec177de7e 117
tv200616d 0:ee7ec177de7e 118 printf("\nConnecting to %s...\n", MBED_CONF_APP_WIFI_SSID);
tv200616d 0:ee7ec177de7e 119 int ret = wifi->connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2);
tv200616d 0:ee7ec177de7e 120 if (ret != 0) {
tv200616d 0:ee7ec177de7e 121 printf("\nConnection error: %d\n", ret);
tv200616d 0:ee7ec177de7e 122 return -1;
tv200616d 0:ee7ec177de7e 123 }
tv200616d 0:ee7ec177de7e 124
tv200616d 0:ee7ec177de7e 125 printf("Success\n\n");
tv200616d 0:ee7ec177de7e 126 printf("MAC: %s\n", wifi->get_mac_address());
tv200616d 0:ee7ec177de7e 127 printf("IP: %s\n", wifi->get_ip_address());
tv200616d 0:ee7ec177de7e 128 printf("Netmask: %s\n", wifi->get_netmask());
tv200616d 0:ee7ec177de7e 129 printf("Gateway: %s\n", wifi->get_gateway());
tv200616d 0:ee7ec177de7e 130 printf("RSSI: %d\n\n", wifi->get_rssi());
tv200616d 0:ee7ec177de7e 131
tv200616d 0:ee7ec177de7e 132 socket.open(wifi);
tv200616d 0:ee7ec177de7e 133 socket.connect(hostname, port);
tv200616d 0:ee7ec177de7e 134 MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
tv200616d 0:ee7ec177de7e 135 data.MQTTVersion = 3;
tv200616d 0:ee7ec177de7e 136 data.clientID.cstring = "NUCLEO-L476RG-60";
tv200616d 0:ee7ec177de7e 137
tv200616d 0:ee7ec177de7e 138 int rc = 0;
tv200616d 0:ee7ec177de7e 139 if ((rc = client.connect(data)) != 0)
tv200616d 0:ee7ec177de7e 140 printf("rc from MQTT connect is %d\r\n", rc);
tv200616d 0:ee7ec177de7e 141
tv200616d 0:ee7ec177de7e 142 if ((rc = client.subscribe(topic_sub, MQTT::QOS2, messageArrived)) != 0)
tv200616d 0:ee7ec177de7e 143 printf("rc from MQTT subscribe is %d\r\n", rc);
tv200616d 0:ee7ec177de7e 144
tv200616d 0:ee7ec177de7e 145 while (true) {
tv200616d 0:ee7ec177de7e 146 led2 = !led2;
tv200616d 0:ee7ec177de7e 147 thread_sleep_for(BLINKING_RATE_MS);
tv200616d 0:ee7ec177de7e 148 if (button_pressed==1) {
tv200616d 0:ee7ec177de7e 149 button_pressed=0;
tv200616d 0:ee7ec177de7e 150 char buf[100];
tv200616d 0:ee7ec177de7e 151 sprintf(buf, "V(POT1) = %1.2f\r\n", pot1*VOLTAGE_SCALER);
tv200616d 0:ee7ec177de7e 152 message.qos = MQTT::QOS0;
tv200616d 0:ee7ec177de7e 153 message.retained = false;
tv200616d 0:ee7ec177de7e 154 message.dup = false;
tv200616d 0:ee7ec177de7e 155 message.payload = (void*)buf;
tv200616d 0:ee7ec177de7e 156 message.payloadlen = strlen(buf)+1;
tv200616d 0:ee7ec177de7e 157 client.publish(topic, message);
tv200616d 0:ee7ec177de7e 158 }
tv200616d 0:ee7ec177de7e 159 client.yield(YIELD_TIMEOUT_MS);
tv200616d 0:ee7ec177de7e 160 }
tv200616d 0:ee7ec177de7e 161 }