Petar Djuric 2018/0002
Dependencies: mbed Adafruit_GFX 19E042PIM_MB_PINS
main.cpp@0:a2c1c8bc2b0f, 2021-12-11 (annotated)
- Committer:
- petardjuric180002
- Date:
- Sat Dec 11 16:28:28 2021 +0000
- Revision:
- 0:a2c1c8bc2b0f
Petar Djuric 2018/0002
Who changed what in which revision?
User | Revision | Line number | New 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 | } |