Aleksandar Cvetkovic 2020/0553
Dependencies: Adafruit_GFX 19E042PIM_MB_PINS
main.cpp@6:b361643727ea, 2021-12-13 (annotated)
- Committer:
- lukan
- Date:
- Mon Dec 13 14:14:22 2021 +0000
- Revision:
- 6:b361643727ea
- Parent:
- 5:b4c6bef81c0b
- Child:
- 7:91c12b4167c0
Luka Ristic 2020/0331
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lukan | 6:b361643727ea | 1 | /* |
lukan | 6:b361643727ea | 2 | * Program implements MQTT client on a NUCLEO-L476RG board |
lukan | 6:b361643727ea | 3 | * using arm mbed-mqtt library and ESP-WROOM-02 WiFi modem. |
lukan | 6:b361643727ea | 4 | * |
lukan | 6:b361643727ea | 5 | * University of Belgrade - School of Electrical Engineering |
lukan | 6:b361643727ea | 6 | * Department of Electronics |
lukan | 6:b361643727ea | 7 | * Bulevar Kralja Aleksandra 73, 11120 Belgrade, Serbia |
lukan | 6:b361643727ea | 8 | * |
lukan | 6:b361643727ea | 9 | * November 2021. |
lukan | 6:b361643727ea | 10 | * |
lukan | 6:b361643727ea | 11 | */ |
lukan | 6:b361643727ea | 12 | |
lukan | 6:b361643727ea | 13 | #include "mbed.h" |
filip_ste | 0:82908a60b720 | 14 | #include "mb_pins.h" |
filip_ste | 0:82908a60b720 | 15 | #include "platform/mbed_thread.h" |
filip_ste | 0:82908a60b720 | 16 | #include "MQTTClientMbedOs.h" |
filip_ste | 0:82908a60b720 | 17 | |
filip_ste | 0:82908a60b720 | 18 | #include "Adafruit_GFX.h" |
filip_ste | 0:82908a60b720 | 19 | #include "Adafruit_GFX_Config.h" |
filip_ste | 0:82908a60b720 | 20 | #include "Adafruit_SSD1306.h" |
filip_ste | 0:82908a60b720 | 21 | |
filip_ste | 2:8dacbf975c41 | 22 | |
filip_ste | 0:82908a60b720 | 23 | |
filip_ste | 0:82908a60b720 | 24 | #define SMALL_WAIT_MS 10 |
filip_ste | 2:8dacbf975c41 | 25 | #define VOLTAGE_SCALER 3.3f |
filip_ste | 0:82908a60b720 | 26 | |
filip_ste | 0:82908a60b720 | 27 | //I2C adress |
filip_ste | 0:82908a60b720 | 28 | #define I2C_ADDRESS 0x3c |
filip_ste | 0:82908a60b720 | 29 | #define I2C_ADD_MBED I2C_ADDRESS << 1 |
filip_ste | 0:82908a60b720 | 30 | |
filip_ste | 0:82908a60b720 | 31 | //OLED DIMENSIONS |
filip_ste | 0:82908a60b720 | 32 | #define OLED_HEIGHT_PX 64 |
filip_ste | 0:82908a60b720 | 33 | #define OLED_WIDTH_PX 128 |
filip_ste | 0:82908a60b720 | 34 | |
lukan | 6:b361643727ea | 35 | // Pointer to a WiFi network object: |
lukan | 6:b361643727ea | 36 | WiFiInterface *wifi; |
lukan | 6:b361643727ea | 37 | // Creating TCP socket: |
filip_ste | 0:82908a60b720 | 38 | TCPSocket socket; |
lukan | 6:b361643727ea | 39 | // Creating MQTT client using the TCP socket; |
filip_ste | 0:82908a60b720 | 40 | MQTTClient client(&socket); |
lukan | 6:b361643727ea | 41 | // Message handler: |
filip_ste | 0:82908a60b720 | 42 | MQTT::Message message; |
filip_ste | 0:82908a60b720 | 43 | |
filip_ste | 0:82908a60b720 | 44 | I2C i2c_obj(MB_OLED_SDA, MB_OLED_SCL); |
filip_ste | 0:82908a60b720 | 45 | Adafruit_SSD1306_I2c myOLED(i2c_obj, PB_5, I2C_ADD_MBED, OLED_HEIGHT_PX, OLED_WIDTH_PX); |
filip_ste | 0:82908a60b720 | 46 | |
filip_ste | 2:8dacbf975c41 | 47 | const char* topic_sub = "subpim"; |
filip_ste | 2:8dacbf975c41 | 48 | const char* topic_pub = "pubpim"; |
lukan | 6:b361643727ea | 49 | // HiveMQ broker connectivity information: |
filip_ste | 0:82908a60b720 | 50 | const char* hostname = "broker.hivemq.com"; |
filip_ste | 5:b4c6bef81c0b | 51 | const int port = 1883; |
filip_ste | 0:82908a60b720 | 52 | |
filip_ste | 0:82908a60b720 | 53 | |
filip_ste | 0:82908a60b720 | 54 | void messageArrived(MQTT::MessageData& md) |
filip_ste | 0:82908a60b720 | 55 | { |
lukan | 6:b361643727ea | 56 | MQTT::Message &msg = md.message; |
lukan | 6:b361643727ea | 57 | printf("Browser message: %.*s \n", msg.payloadlen, (char*)msg.payload); |
lukan | 6:b361643727ea | 58 | message.qos = MQTT::QOS0; |
lukan | 6:b361643727ea | 59 | message.retained = false; |
lukan | 6:b361643727ea | 60 | message.dup = false; |
lukan | 6:b361643727ea | 61 | message.payload = (void*)msg.payload; |
lukan | 6:b361643727ea | 62 | message.payloadlen = msg.payloadlen + 1; |
lukan | 6:b361643727ea | 63 | client.publish(topic_pub, message); |
lukan | 6:b361643727ea | 64 | myOLED.clearDisplay(); |
lukan | 6:b361643727ea | 65 | myOLED.setTextCursor(0, 0); |
lukan | 6:b361643727ea | 66 | myOLED.printf("%.*s \n", msg.payloadlen, (char*)msg.payload); |
lukan | 6:b361643727ea | 67 | myOLED.display(); |
filip_ste | 2:8dacbf975c41 | 68 | |
filip_ste | 0:82908a60b720 | 69 | } |
filip_ste | 0:82908a60b720 | 70 | |
filip_ste | 0:82908a60b720 | 71 | int main() |
filip_ste | 0:82908a60b720 | 72 | { |
lukan | 6:b361643727ea | 73 | // Create a default network interface: |
filip_ste | 0:82908a60b720 | 74 | wifi = WiFiInterface::get_default_instance(); |
lukan | 6:b361643727ea | 75 | if (!wifi) { |
lukan | 6:b361643727ea | 76 | printf("ERROR: No WiFiInterface found.\n"); |
lukan | 6:b361643727ea | 77 | return -1; |
lukan | 6:b361643727ea | 78 | } |
filip_ste | 0:82908a60b720 | 79 | |
lukan | 6:b361643727ea | 80 | // Connect to the network with the parameters specified in 'mbed_app.json': |
lukan | 6:b361643727ea | 81 | printf("Connecting to %s... \n",MBED_CONF_APP_WIFI_SSID); |
filip_ste | 0:82908a60b720 | 82 | int ret = wifi->connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2); |
lukan | 6:b361643727ea | 83 | if(ret != 0){ |
lukan | 6:b361643727ea | 84 | printf("\nConnection error: %d\n", ret); |
lukan | 6:b361643727ea | 85 | return -1; |
lukan | 6:b361643727ea | 86 | } |
lukan | 6:b361643727ea | 87 | // Print out the information aquired: |
lukan | 6:b361643727ea | 88 | printf("Connected to %s\n", MBED_CONF_APP_WIFI_SSID); |
filip_ste | 0:82908a60b720 | 89 | |
lukan | 6:b361643727ea | 90 | // Open TCP socket using WiFi network interface: |
filip_ste | 0:82908a60b720 | 91 | socket.open(wifi); |
lukan | 6:b361643727ea | 92 | |
lukan | 6:b361643727ea | 93 | // Connect to the HiveMQ broker: |
filip_ste | 0:82908a60b720 | 94 | socket.connect(hostname,port); |
filip_ste | 0:82908a60b720 | 95 | |
lukan | 6:b361643727ea | 96 | // Fill connect data with default values: |
filip_ste | 0:82908a60b720 | 97 | MQTTPacket_connectData data = MQTTPacket_connectData_initializer; |
lukan | 6:b361643727ea | 98 | // Change only ID and protocol version: |
filip_ste | 0:82908a60b720 | 99 | data.MQTTVersion = 3; |
lukan | 6:b361643727ea | 100 | data.clientID.cstring = "pim-09"; |
filip_ste | 0:82908a60b720 | 101 | |
filip_ste | 0:82908a60b720 | 102 | client.connect(data); |
filip_ste | 0:82908a60b720 | 103 | client.subscribe(topic_sub, MQTT::QOS0, messageArrived); |
filip_ste | 0:82908a60b720 | 104 | |
filip_ste | 2:8dacbf975c41 | 105 | i2c_obj.frequency(400000); |
filip_ste | 0:82908a60b720 | 106 | |
lukan | 6:b361643727ea | 107 | myOLED.begin(); |
lukan | 6:b361643727ea | 108 | myOLED.clearDisplay(); |
lukan | 6:b361643727ea | 109 | myOLED.display(); |
filip_ste | 0:82908a60b720 | 110 | while(1) { |
filip_ste | 0:82908a60b720 | 111 | thread_sleep_for(SMALL_WAIT_MS); |
filip_ste | 0:82908a60b720 | 112 | client.yield(1000); |
filip_ste | 0:82908a60b720 | 113 | } |
filip_ste | 0:82908a60b720 | 114 | } |