Aleksandar Cvetkovic 2020/0553
Dependencies: Adafruit_GFX 19E042PIM_MB_PINS
main.cpp@5:b4c6bef81c0b, 2021-12-11 (annotated)
- Committer:
- filip_ste
- Date:
- Sat Dec 11 16:28:50 2021 +0000
- Revision:
- 5:b4c6bef81c0b
- Parent:
- 4:55d5519a06a1
- Child:
- 6:b361643727ea
Filip Stevanovic 2020/0039
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
filip_ste | 0:82908a60b720 | 1 | #include "mb_pins.h" |
filip_ste | 0:82908a60b720 | 2 | #include "mbed.h" |
filip_ste | 0:82908a60b720 | 3 | #include "platform/mbed_thread.h" |
filip_ste | 0:82908a60b720 | 4 | #include "MQTTClientMbedOs.h" |
filip_ste | 0:82908a60b720 | 5 | |
filip_ste | 0:82908a60b720 | 6 | #include "Adafruit_GFX.h" |
filip_ste | 0:82908a60b720 | 7 | #include "Adafruit_GFX_Config.h" |
filip_ste | 0:82908a60b720 | 8 | #include "Adafruit_SSD1306.h" |
filip_ste | 0:82908a60b720 | 9 | |
filip_ste | 2:8dacbf975c41 | 10 | #include <string> |
filip_ste | 2:8dacbf975c41 | 11 | using namespace std; |
filip_ste | 2:8dacbf975c41 | 12 | |
filip_ste | 0:82908a60b720 | 13 | /////////////////////////////////////////////////////////////// |
filip_ste | 0:82908a60b720 | 14 | |
filip_ste | 0:82908a60b720 | 15 | #define SMALL_WAIT_MS 10 |
filip_ste | 2:8dacbf975c41 | 16 | #define VOLTAGE_SCALER 3.3f |
filip_ste | 0:82908a60b720 | 17 | |
filip_ste | 0:82908a60b720 | 18 | //I2C adress |
filip_ste | 0:82908a60b720 | 19 | #define I2C_ADDRESS 0x3c |
filip_ste | 0:82908a60b720 | 20 | #define I2C_ADD_MBED I2C_ADDRESS << 1 |
filip_ste | 0:82908a60b720 | 21 | |
filip_ste | 0:82908a60b720 | 22 | //OLED DIMENSIONS |
filip_ste | 0:82908a60b720 | 23 | #define OLED_HEIGHT_PX 64 |
filip_ste | 0:82908a60b720 | 24 | #define OLED_WIDTH_PX 128 |
filip_ste | 0:82908a60b720 | 25 | |
filip_ste | 0:82908a60b720 | 26 | /////////////////////////////////////////////////////////////// |
filip_ste | 0:82908a60b720 | 27 | |
filip_ste | 0:82908a60b720 | 28 | TCPSocket socket; |
filip_ste | 0:82908a60b720 | 29 | MQTTClient client(&socket); |
filip_ste | 0:82908a60b720 | 30 | MQTT::Message message; |
filip_ste | 0:82908a60b720 | 31 | WiFiInterface *wifi; |
filip_ste | 0:82908a60b720 | 32 | |
filip_ste | 0:82908a60b720 | 33 | I2C i2c_obj(MB_OLED_SDA, MB_OLED_SCL); |
filip_ste | 0:82908a60b720 | 34 | Adafruit_SSD1306_I2c myOLED(i2c_obj, PB_5, I2C_ADD_MBED, OLED_HEIGHT_PX, OLED_WIDTH_PX); |
filip_ste | 0:82908a60b720 | 35 | |
filip_ste | 2:8dacbf975c41 | 36 | const char* topic_sub = "subpim"; |
filip_ste | 2:8dacbf975c41 | 37 | const char* topic_pub = "pubpim"; |
filip_ste | 0:82908a60b720 | 38 | const char* hostname = "broker.hivemq.com"; |
filip_ste | 5:b4c6bef81c0b | 39 | const int port = 1883; |
filip_ste | 0:82908a60b720 | 40 | |
filip_ste | 2:8dacbf975c41 | 41 | Timer t; |
filip_ste | 2:8dacbf975c41 | 42 | AnalogIn pot1(MB_POT1); |
filip_ste | 2:8dacbf975c41 | 43 | |
filip_ste | 2:8dacbf975c41 | 44 | char buf[100]; |
filip_ste | 2:8dacbf975c41 | 45 | string s; |
filip_ste | 2:8dacbf975c41 | 46 | |
filip_ste | 2:8dacbf975c41 | 47 | string recv; |
filip_ste | 2:8dacbf975c41 | 48 | string tran; |
filip_ste | 2:8dacbf975c41 | 49 | |
filip_ste | 3:522c779c5f29 | 50 | bool oledInit = false; |
filip_ste | 3:522c779c5f29 | 51 | |
filip_ste | 2:8dacbf975c41 | 52 | string chrToStr(char* a, int size){ |
filip_ste | 2:8dacbf975c41 | 53 | string s = ""; |
filip_ste | 2:8dacbf975c41 | 54 | for (int i = 0; i < size; i++) { |
filip_ste | 2:8dacbf975c41 | 55 | s = s + a[i]; |
filip_ste | 2:8dacbf975c41 | 56 | } |
filip_ste | 2:8dacbf975c41 | 57 | return s; |
filip_ste | 2:8dacbf975c41 | 58 | } |
filip_ste | 2:8dacbf975c41 | 59 | |
filip_ste | 2:8dacbf975c41 | 60 | void updateOLED() |
filip_ste | 2:8dacbf975c41 | 61 | { |
filip_ste | 2:8dacbf975c41 | 62 | myOLED.clearDisplay(); |
filip_ste | 2:8dacbf975c41 | 63 | myOLED.setTextCursor(0, 0); |
filip_ste | 2:8dacbf975c41 | 64 | myOLED.printf("Recv: %s\n", recv.c_str()); |
filip_ste | 2:8dacbf975c41 | 65 | myOLED.printf("Tran: %s\n", tran.c_str()); |
filip_ste | 2:8dacbf975c41 | 66 | myOLED.display(); |
filip_ste | 2:8dacbf975c41 | 67 | } |
filip_ste | 2:8dacbf975c41 | 68 | |
filip_ste | 2:8dacbf975c41 | 69 | void printMQTT() |
filip_ste | 2:8dacbf975c41 | 70 | { |
filip_ste | 2:8dacbf975c41 | 71 | message.qos = MQTT::QOS0; |
filip_ste | 2:8dacbf975c41 | 72 | message.retained = false; |
filip_ste | 2:8dacbf975c41 | 73 | message.dup = false; |
filip_ste | 2:8dacbf975c41 | 74 | message.payload = (void*)buf; |
filip_ste | 2:8dacbf975c41 | 75 | //message.payloadlen = strlen(buf)+1; |
filip_ste | 2:8dacbf975c41 | 76 | message.payloadlen = strlen(buf); |
filip_ste | 2:8dacbf975c41 | 77 | client.publish(topic_pub, message); |
filip_ste | 2:8dacbf975c41 | 78 | } |
filip_ste | 2:8dacbf975c41 | 79 | |
filip_ste | 2:8dacbf975c41 | 80 | void sendValue(){ |
filip_ste | 2:8dacbf975c41 | 81 | sprintf(buf, "V = %1.2f", pot1*VOLTAGE_SCALER); |
filip_ste | 2:8dacbf975c41 | 82 | s = chrToStr(buf, sizeof(buf)); |
filip_ste | 2:8dacbf975c41 | 83 | tran = s; |
filip_ste | 2:8dacbf975c41 | 84 | printMQTT(); |
filip_ste | 2:8dacbf975c41 | 85 | } |
filip_ste | 2:8dacbf975c41 | 86 | |
filip_ste | 0:82908a60b720 | 87 | /////////////////////////////////////////////////////////////// |
filip_ste | 0:82908a60b720 | 88 | |
filip_ste | 0:82908a60b720 | 89 | void messageArrived(MQTT::MessageData& md) |
filip_ste | 0:82908a60b720 | 90 | { |
filip_ste | 0:82908a60b720 | 91 | MQTT::Message &message = md.message; |
filip_ste | 0:82908a60b720 | 92 | printf("Browser message: %.*s \n", message.payloadlen, (char*)message.payload); |
filip_ste | 0:82908a60b720 | 93 | |
filip_ste | 2:8dacbf975c41 | 94 | //sprintf(buf, "%.*s %d", message.payloadlen, (char*)message.payload, message.payloadlen); |
filip_ste | 2:8dacbf975c41 | 95 | //printMQTT(); |
filip_ste | 2:8dacbf975c41 | 96 | |
filip_ste | 2:8dacbf975c41 | 97 | s = chrToStr((char*)message.payload, message.payloadlen); |
filip_ste | 2:8dacbf975c41 | 98 | |
filip_ste | 2:8dacbf975c41 | 99 | recv = s; |
filip_ste | 2:8dacbf975c41 | 100 | |
filip_ste | 5:b4c6bef81c0b | 101 | //sprintf(buf, "%s", s.c_str()); |
filip_ste | 5:b4c6bef81c0b | 102 | //printMQTT(); |
filip_ste | 2:8dacbf975c41 | 103 | |
filip_ste | 2:8dacbf975c41 | 104 | if(s == "start") |
filip_ste | 2:8dacbf975c41 | 105 | { |
filip_ste | 2:8dacbf975c41 | 106 | sendValue(); |
filip_ste | 2:8dacbf975c41 | 107 | t.reset(); |
filip_ste | 2:8dacbf975c41 | 108 | t.start(); |
filip_ste | 2:8dacbf975c41 | 109 | } |
filip_ste | 2:8dacbf975c41 | 110 | else if(s == "stop") |
filip_ste | 2:8dacbf975c41 | 111 | { |
filip_ste | 2:8dacbf975c41 | 112 | t.stop(); |
filip_ste | 2:8dacbf975c41 | 113 | } |
filip_ste | 2:8dacbf975c41 | 114 | else if(s == "oled") |
filip_ste | 2:8dacbf975c41 | 115 | { |
filip_ste | 3:522c779c5f29 | 116 | oledInit = true; |
filip_ste | 4:55d5519a06a1 | 117 | myOLED.begin(); |
filip_ste | 3:522c779c5f29 | 118 | //myOLED.clearDisplay(); |
filip_ste | 3:522c779c5f29 | 119 | //myOLED.display(); |
filip_ste | 2:8dacbf975c41 | 120 | } |
filip_ste | 2:8dacbf975c41 | 121 | |
filip_ste | 0:82908a60b720 | 122 | } |
filip_ste | 0:82908a60b720 | 123 | |
filip_ste | 0:82908a60b720 | 124 | /////////////////////////////////////////////////////////////// |
filip_ste | 0:82908a60b720 | 125 | |
filip_ste | 0:82908a60b720 | 126 | int main() |
filip_ste | 0:82908a60b720 | 127 | { |
filip_ste | 0:82908a60b720 | 128 | wifi = WiFiInterface::get_default_instance(); |
filip_ste | 0:82908a60b720 | 129 | |
filip_ste | 3:522c779c5f29 | 130 | printf("Connecting to %s \n",MBED_CONF_APP_WIFI_SSID); |
filip_ste | 0:82908a60b720 | 131 | int ret = wifi->connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2); |
filip_ste | 2:8dacbf975c41 | 132 | //if(ret != 0){ |
filip_ste | 2:8dacbf975c41 | 133 | // printf("Greska u povezivanju"); |
filip_ste | 2:8dacbf975c41 | 134 | // return -1; |
filip_ste | 2:8dacbf975c41 | 135 | //} |
filip_ste | 3:522c779c5f29 | 136 | printf("Connected\n"); |
filip_ste | 0:82908a60b720 | 137 | |
filip_ste | 0:82908a60b720 | 138 | socket.open(wifi); |
filip_ste | 0:82908a60b720 | 139 | socket.connect(hostname,port); |
filip_ste | 0:82908a60b720 | 140 | |
filip_ste | 0:82908a60b720 | 141 | MQTTPacket_connectData data = MQTTPacket_connectData_initializer; |
filip_ste | 0:82908a60b720 | 142 | data.MQTTVersion = 3; |
filip_ste | 2:8dacbf975c41 | 143 | data.clientID.cstring = "pim-60"; |
filip_ste | 0:82908a60b720 | 144 | |
filip_ste | 0:82908a60b720 | 145 | client.connect(data); |
filip_ste | 0:82908a60b720 | 146 | client.subscribe(topic_sub, MQTT::QOS0, messageArrived); |
filip_ste | 0:82908a60b720 | 147 | |
filip_ste | 2:8dacbf975c41 | 148 | i2c_obj.frequency(400000); |
filip_ste | 0:82908a60b720 | 149 | |
filip_ste | 0:82908a60b720 | 150 | while(1) { |
filip_ste | 2:8dacbf975c41 | 151 | if (t.read() > 10) { |
filip_ste | 2:8dacbf975c41 | 152 | sendValue(); |
filip_ste | 2:8dacbf975c41 | 153 | t.reset(); |
filip_ste | 2:8dacbf975c41 | 154 | } |
filip_ste | 0:82908a60b720 | 155 | thread_sleep_for(SMALL_WAIT_MS); |
filip_ste | 3:522c779c5f29 | 156 | if(oledInit) |
filip_ste | 3:522c779c5f29 | 157 | updateOLED(); |
filip_ste | 0:82908a60b720 | 158 | client.yield(1000); |
filip_ste | 0:82908a60b720 | 159 | } |
filip_ste | 0:82908a60b720 | 160 | } |