Petar Djuric 2018/0002

Dependencies:   mbed Adafruit_GFX 19E042PIM_MB_PINS

Committer:
petardjuric180002
Date:
Sat Dec 11 16:28:28 2021 +0000
Revision:
0:a2c1c8bc2b0f
Petar Djuric 2018/0002

Who changed what in which revision?

UserRevisionLine numberNew contents of line
petardjuric180002 0:a2c1c8bc2b0f 1 #include "mb_pins.h"
petardjuric180002 0:a2c1c8bc2b0f 2 #include "mbed.h"
petardjuric180002 0:a2c1c8bc2b0f 3 #include "platform/mbed_thread.h"
petardjuric180002 0:a2c1c8bc2b0f 4 #include "MQTTClientMbedOs.h"
petardjuric180002 0:a2c1c8bc2b0f 5 #include "Adafruit_GFX.h"
petardjuric180002 0:a2c1c8bc2b0f 6 #include "Adafruit_GFX_Config.h"
petardjuric180002 0:a2c1c8bc2b0f 7 #include "Adafruit_SSD1306.h"
petardjuric180002 0:a2c1c8bc2b0f 8 #include <cstring>
petardjuric180002 0:a2c1c8bc2b0f 9
petardjuric180002 0:a2c1c8bc2b0f 10 #define SMALL_WAIT_MS 10
petardjuric180002 0:a2c1c8bc2b0f 11
petardjuric180002 0:a2c1c8bc2b0f 12 #define BLINK_PERIOD_MS 250
petardjuric180002 0:a2c1c8bc2b0f 13
petardjuric180002 0:a2c1c8bc2b0f 14 //OLED DIMENSIONS
petardjuric180002 0:a2c1c8bc2b0f 15 #define OLED_HEIGHT_PX 64
petardjuric180002 0:a2c1c8bc2b0f 16 #define OLED_WIDTH_PX 128
petardjuric180002 0:a2c1c8bc2b0f 17
petardjuric180002 0:a2c1c8bc2b0f 18 //I2C adress
petardjuric180002 0:a2c1c8bc2b0f 19 #define I2C_ADDRESS 0x3c
petardjuric180002 0:a2c1c8bc2b0f 20 #define I2C_ADD_MBED I2C_ADDRESS << 1
petardjuric180002 0:a2c1c8bc2b0f 21
petardjuric180002 0:a2c1c8bc2b0f 22 AnalogIn POT1(MB_POT1);
petardjuric180002 0:a2c1c8bc2b0f 23 DigitalOut led2(MB_LED2);
petardjuric180002 0:a2c1c8bc2b0f 24
petardjuric180002 0:a2c1c8bc2b0f 25 TCPSocket socket;
petardjuric180002 0:a2c1c8bc2b0f 26 MQTTClient client(&socket);
petardjuric180002 0:a2c1c8bc2b0f 27 MQTT::Message message;
petardjuric180002 0:a2c1c8bc2b0f 28 WiFiInterface *wifi;
petardjuric180002 0:a2c1c8bc2b0f 29
petardjuric180002 0:a2c1c8bc2b0f 30 I2C i2c_obj(MB_OLED_SDA, MB_OLED_SCL);
petardjuric180002 0:a2c1c8bc2b0f 31 Adafruit_SSD1306_I2c myOLED(i2c_obj, PB_5, I2C_ADD_MBED, OLED_HEIGHT_PX, OLED_WIDTH_PX);
petardjuric180002 0:a2c1c8bc2b0f 32
petardjuric180002 0:a2c1c8bc2b0f 33
petardjuric180002 0:a2c1c8bc2b0f 34 char* topic_pub = "pubpim";
petardjuric180002 0:a2c1c8bc2b0f 35 char* topic_sub = "subpim";
petardjuric180002 0:a2c1c8bc2b0f 36 const char* hostname = "broker.hivemq.com";
petardjuric180002 0:a2c1c8bc2b0f 37 int port = 1883;
petardjuric180002 0:a2c1c8bc2b0f 38
petardjuric180002 0:a2c1c8bc2b0f 39
petardjuric180002 0:a2c1c8bc2b0f 40
petardjuric180002 0:a2c1c8bc2b0f 41 void messageArrived(MQTT::MessageData& md)
petardjuric180002 0:a2c1c8bc2b0f 42 {
petardjuric180002 0:a2c1c8bc2b0f 43 MQTT::Message &message = md.message;
petardjuric180002 0:a2c1c8bc2b0f 44 printf("Browser message: %.*s \r\n", message.payloadlen, (char*)message.payload);
petardjuric180002 0:a2c1c8bc2b0f 45
petardjuric180002 0:a2c1c8bc2b0f 46 myOLED.clearDisplay();
petardjuric180002 0:a2c1c8bc2b0f 47 myOLED.printf("%.*s \r", message.payloadlen, (char*)message.payload);
petardjuric180002 0:a2c1c8bc2b0f 48 myOLED.display();
petardjuric180002 0:a2c1c8bc2b0f 49 }
petardjuric180002 0:a2c1c8bc2b0f 50
petardjuric180002 0:a2c1c8bc2b0f 51
petardjuric180002 0:a2c1c8bc2b0f 52
petardjuric180002 0:a2c1c8bc2b0f 53 int main()
petardjuric180002 0:a2c1c8bc2b0f 54 {
petardjuric180002 0:a2c1c8bc2b0f 55 wifi = WiFiInterface::get_default_instance();
petardjuric180002 0:a2c1c8bc2b0f 56 if(!wifi)
petardjuric180002 0:a2c1c8bc2b0f 57 {
petardjuric180002 0:a2c1c8bc2b0f 58 printf("ERROR: Nema WiFija");
petardjuric180002 0:a2c1c8bc2b0f 59 return -1;
petardjuric180002 0:a2c1c8bc2b0f 60 }
petardjuric180002 0:a2c1c8bc2b0f 61
petardjuric180002 0:a2c1c8bc2b0f 62 printf("\n Connecting to %s...\n", MBED_CONF_APP_WIFI_SSID);
petardjuric180002 0:a2c1c8bc2b0f 63 int ret = wifi->connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2);
petardjuric180002 0:a2c1c8bc2b0f 64 if (ret != 0){
petardjuric180002 0:a2c1c8bc2b0f 65 printf("GRESKA u POVEZIVANJU \n");
petardjuric180002 0:a2c1c8bc2b0f 66 return -1;
petardjuric180002 0:a2c1c8bc2b0f 67 }
petardjuric180002 0:a2c1c8bc2b0f 68
petardjuric180002 0:a2c1c8bc2b0f 69 printf("Success\n");
petardjuric180002 0:a2c1c8bc2b0f 70 printf("MAC: %s\n", wifi->get_mac_address());
petardjuric180002 0:a2c1c8bc2b0f 71 printf("IP: %s\n", wifi->get_ip_address());
petardjuric180002 0:a2c1c8bc2b0f 72 printf("Netmask: %s\n", wifi->get_netmask());
petardjuric180002 0:a2c1c8bc2b0f 73 printf("Gateway: %s\n", wifi->get_gateway());
petardjuric180002 0:a2c1c8bc2b0f 74 printf("RSSI: %d\n\n", wifi->get_rssi());
petardjuric180002 0:a2c1c8bc2b0f 75
petardjuric180002 0:a2c1c8bc2b0f 76 socket.open(wifi);
petardjuric180002 0:a2c1c8bc2b0f 77 socket.connect(hostname, port);
petardjuric180002 0:a2c1c8bc2b0f 78
petardjuric180002 0:a2c1c8bc2b0f 79
petardjuric180002 0:a2c1c8bc2b0f 80 MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
petardjuric180002 0:a2c1c8bc2b0f 81 data.MQTTVersion = 3;
petardjuric180002 0:a2c1c8bc2b0f 82 data.clientID.cstring = "YUSUF";
petardjuric180002 0:a2c1c8bc2b0f 83
petardjuric180002 0:a2c1c8bc2b0f 84 int rc = 0;
petardjuric180002 0:a2c1c8bc2b0f 85 if((rc = client.connect(data)) != 0)
petardjuric180002 0:a2c1c8bc2b0f 86 printf("rc from MQTT connect is %d \r\n",rc);
petardjuric180002 0:a2c1c8bc2b0f 87
petardjuric180002 0:a2c1c8bc2b0f 88 if((rc = client.subscribe(topic_sub, MQTT::QOS2, messageArrived)) != 0) //ovako se on subscribuje na temu
petardjuric180002 0:a2c1c8bc2b0f 89 printf("rc from MQTT subscribe is %d \r\n", rc);
petardjuric180002 0:a2c1c8bc2b0f 90
petardjuric180002 0:a2c1c8bc2b0f 91
petardjuric180002 0:a2c1c8bc2b0f 92 char dr[4] = {'o','l','e','d'};
petardjuric180002 0:a2c1c8bc2b0f 93 char strt[5] = {'s','t','a','r','t'};
petardjuric180002 0:a2c1c8bc2b0f 94 char stp[4] = {'s','t','o','p'};
petardjuric180002 0:a2c1c8bc2b0f 95 while(true)
petardjuric180002 0:a2c1c8bc2b0f 96 {
petardjuric180002 0:a2c1c8bc2b0f 97 led2 =! led2;
petardjuric180002 0:a2c1c8bc2b0f 98 thread_sleep_for(BLINK_PERIOD_MS);
petardjuric180002 0:a2c1c8bc2b0f 99 char buf[100];
petardjuric180002 0:a2c1c8bc2b0f 100 sprintf(buf, "rec je");
petardjuric180002 0:a2c1c8bc2b0f 101
petardjuric180002 0:a2c1c8bc2b0f 102
petardjuric180002 0:a2c1c8bc2b0f 103 /* if (std::strcmp(buf, strt) == 0 && m==1) {
petardjuric180002 0:a2c1c8bc2b0f 104 sprintf(buf, "V(POT1) = %1.2f \r\n", POT1 * (3.3f));
petardjuric180002 0:a2c1c8bc2b0f 105
petardjuric180002 0:a2c1c8bc2b0f 106
petardjuric180002 0:a2c1c8bc2b0f 107 if (std::strcmp(buf, stp) == 0) {
petardjuric180002 0:a2c1c8bc2b0f 108 sprintf(buf, "rec je");
petardjuric180002 0:a2c1c8bc2b0f 109
petardjuric180002 0:a2c1c8bc2b0f 110 } }
petardjuric180002 0:a2c1c8bc2b0f 111 */
petardjuric180002 0:a2c1c8bc2b0f 112
petardjuric180002 0:a2c1c8bc2b0f 113 if (std::strcmp(buf, dr) == 0) {
petardjuric180002 0:a2c1c8bc2b0f 114 //ako jes
petardjuric180002 0:a2c1c8bc2b0f 115 myOLED.begin(); //pocetak
petardjuric180002 0:a2c1c8bc2b0f 116 i2c_obj.frequency(400000); //veca frekvencija slanja da ne bi ghostovalo
petardjuric180002 0:a2c1c8bc2b0f 117
petardjuric180002 0:a2c1c8bc2b0f 118 myOLED.clearDisplay();
petardjuric180002 0:a2c1c8bc2b0f 119 myOLED.display();
petardjuric180002 0:a2c1c8bc2b0f 120
petardjuric180002 0:a2c1c8bc2b0f 121 }
petardjuric180002 0:a2c1c8bc2b0f 122
petardjuric180002 0:a2c1c8bc2b0f 123 message.qos = MQTT::QOS0;
petardjuric180002 0:a2c1c8bc2b0f 124 message.retained = false;
petardjuric180002 0:a2c1c8bc2b0f 125 message.dup = false;
petardjuric180002 0:a2c1c8bc2b0f 126 message.payload = (void*)buf;
petardjuric180002 0:a2c1c8bc2b0f 127 message.payloadlen = strlen(buf)+1;
petardjuric180002 0:a2c1c8bc2b0f 128 client.publish(topic_pub, message);
petardjuric180002 0:a2c1c8bc2b0f 129
petardjuric180002 0:a2c1c8bc2b0f 130 client.yield(1000);
petardjuric180002 0:a2c1c8bc2b0f 131
petardjuric180002 0:a2c1c8bc2b0f 132 }
petardjuric180002 0:a2c1c8bc2b0f 133 }