Pavle Popovic 2020/0494

Dependencies:   Adafruit_GFX 19E042PIM_MB_PINS

Committer:
pavle1
Date:
Mon Jan 17 16:05:55 2022 +0000
Revision:
0:4b068ef5ed41
Pavle Popovic 2020/0494

Who changed what in which revision?

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