Aleksandar Cvetkovic 2020/0553

Dependencies:   Adafruit_GFX 19E042PIM_MB_PINS

Committer:
ac301
Date:
Mon Dec 13 20:28:34 2021 +0000
Revision:
7:91c12b4167c0
Parent:
6:b361643727ea
Child:
8:56a91e0e557e
Aleksandar Cvetkovic 2020/0553;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lukan 6:b361643727ea 1 #include "mbed.h"
filip_ste 0:82908a60b720 2 #include "mb_pins.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
filip_ste 0:82908a60b720 11
filip_ste 0:82908a60b720 12 #define SMALL_WAIT_MS 10
filip_ste 2:8dacbf975c41 13 #define VOLTAGE_SCALER 3.3f
filip_ste 0:82908a60b720 14
filip_ste 0:82908a60b720 15 //I2C adress
filip_ste 0:82908a60b720 16 #define I2C_ADDRESS 0x3c
filip_ste 0:82908a60b720 17 #define I2C_ADD_MBED I2C_ADDRESS << 1
filip_ste 0:82908a60b720 18
filip_ste 0:82908a60b720 19 //OLED DIMENSIONS
filip_ste 0:82908a60b720 20 #define OLED_HEIGHT_PX 64
filip_ste 0:82908a60b720 21 #define OLED_WIDTH_PX 128
filip_ste 0:82908a60b720 22
lukan 6:b361643727ea 23 // Pointer to a WiFi network object:
lukan 6:b361643727ea 24 WiFiInterface *wifi;
lukan 6:b361643727ea 25 // Creating TCP socket:
filip_ste 0:82908a60b720 26 TCPSocket socket;
lukan 6:b361643727ea 27 // Creating MQTT client using the TCP socket;
filip_ste 0:82908a60b720 28 MQTTClient client(&socket);
lukan 6:b361643727ea 29 // Message handler:
filip_ste 0:82908a60b720 30 MQTT::Message message;
filip_ste 0:82908a60b720 31
filip_ste 0:82908a60b720 32 I2C i2c_obj(MB_OLED_SDA, MB_OLED_SCL);
filip_ste 0:82908a60b720 33 Adafruit_SSD1306_I2c myOLED(i2c_obj, PB_5, I2C_ADD_MBED, OLED_HEIGHT_PX, OLED_WIDTH_PX);
filip_ste 0:82908a60b720 34
filip_ste 2:8dacbf975c41 35 const char* topic_sub = "subpim";
filip_ste 2:8dacbf975c41 36 const char* topic_pub = "pubpim";
lukan 6:b361643727ea 37 // HiveMQ broker connectivity information:
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 0:82908a60b720 41
filip_ste 0:82908a60b720 42 void messageArrived(MQTT::MessageData& md)
filip_ste 0:82908a60b720 43 {
lukan 6:b361643727ea 44 MQTT::Message &msg = md.message;
lukan 6:b361643727ea 45 printf("Browser message: %.*s \n", msg.payloadlen, (char*)msg.payload);
lukan 6:b361643727ea 46 message.qos = MQTT::QOS0;
lukan 6:b361643727ea 47 message.retained = false;
lukan 6:b361643727ea 48 message.dup = false;
lukan 6:b361643727ea 49 message.payload = (void*)msg.payload;
lukan 6:b361643727ea 50 message.payloadlen = msg.payloadlen + 1;
lukan 6:b361643727ea 51 client.publish(topic_pub, message);
lukan 6:b361643727ea 52 myOLED.clearDisplay();
lukan 6:b361643727ea 53 myOLED.setTextCursor(0, 0);
lukan 6:b361643727ea 54 myOLED.printf("%.*s \n", msg.payloadlen, (char*)msg.payload);
lukan 6:b361643727ea 55 myOLED.display();
filip_ste 2:8dacbf975c41 56
filip_ste 0:82908a60b720 57 }
filip_ste 0:82908a60b720 58
filip_ste 0:82908a60b720 59 int main()
filip_ste 0:82908a60b720 60 {
lukan 6:b361643727ea 61 // Create a default network interface:
filip_ste 0:82908a60b720 62 wifi = WiFiInterface::get_default_instance();
lukan 6:b361643727ea 63 if (!wifi) {
lukan 6:b361643727ea 64 printf("ERROR: No WiFiInterface found.\n");
lukan 6:b361643727ea 65 return -1;
lukan 6:b361643727ea 66 }
filip_ste 0:82908a60b720 67
lukan 6:b361643727ea 68 // Connect to the network with the parameters specified in 'mbed_app.json':
lukan 6:b361643727ea 69 printf("Connecting to %s... \n",MBED_CONF_APP_WIFI_SSID);
filip_ste 0:82908a60b720 70 int ret = wifi->connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2);
lukan 6:b361643727ea 71 if(ret != 0){
lukan 6:b361643727ea 72 printf("\nConnection error: %d\n", ret);
lukan 6:b361643727ea 73 return -1;
lukan 6:b361643727ea 74 }
lukan 6:b361643727ea 75 // Print out the information aquired:
lukan 6:b361643727ea 76 printf("Connected to %s\n", MBED_CONF_APP_WIFI_SSID);
filip_ste 0:82908a60b720 77
lukan 6:b361643727ea 78 // Open TCP socket using WiFi network interface:
filip_ste 0:82908a60b720 79 socket.open(wifi);
lukan 6:b361643727ea 80
lukan 6:b361643727ea 81 // Connect to the HiveMQ broker:
filip_ste 0:82908a60b720 82 socket.connect(hostname,port);
filip_ste 0:82908a60b720 83
lukan 6:b361643727ea 84 // Fill connect data with default values:
filip_ste 0:82908a60b720 85 MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
lukan 6:b361643727ea 86 // Change only ID and protocol version:
filip_ste 0:82908a60b720 87 data.MQTTVersion = 3;
ac301 7:91c12b4167c0 88 data.clientID.cstring = "pim-27";
filip_ste 0:82908a60b720 89
filip_ste 0:82908a60b720 90 client.connect(data);
filip_ste 0:82908a60b720 91 client.subscribe(topic_sub, MQTT::QOS0, messageArrived);
filip_ste 0:82908a60b720 92
filip_ste 2:8dacbf975c41 93 i2c_obj.frequency(400000);
filip_ste 0:82908a60b720 94
lukan 6:b361643727ea 95 myOLED.begin();
lukan 6:b361643727ea 96 myOLED.clearDisplay();
lukan 6:b361643727ea 97 myOLED.display();
filip_ste 0:82908a60b720 98 while(1) {
filip_ste 0:82908a60b720 99 thread_sleep_for(SMALL_WAIT_MS);
filip_ste 0:82908a60b720 100 client.yield(1000);
filip_ste 0:82908a60b720 101 }
filip_ste 0:82908a60b720 102 }