2020/0214 Isidora Milivojevic

Dependencies:   Adafruit_GFX 19E042PIM_MB_PINS

main.cpp

Committer:
soconstruct
Date:
2021-12-11
Revision:
0:f74d93dfa17f

File content as of revision 0:f74d93dfa17f:

//MQTT i mbed biblioteke
#include "mb_pins.h"
#include "mbed.h"
#include "platform/mbed_thread.h"
#include "MQTTClientMbedOs.h"
//Biblioteke za OLED
#include "Adafruit_GFX.h"
#include "Adafruit_GFX_Config.h"
#include "Adafruit_SSD1306.h"
//Opste biblioteke
#include <string.h>
//I2C makroi
#define I2C_ADDRESS         0x3c
#define I2C_ADD_MBED    I2C_ADDRESS << 1
#define OLED_HEIGHT_PX 64
#define OLED_WIDTH_PX 128

#define WAIT_MS 10

TCPSocket socket;
MQTTClient client(&socket);
MQTT::Message message;
WiFiInterface *wifi;
 
I2C i2c_obj(MB_OLED_SDA, MB_OLED_SCL);
Adafruit_SSD1306_I2c oled(i2c_obj, PB_5, I2C_ADD_MBED, OLED_HEIGHT_PX, OLED_WIDTH_PX);
AnalogIn pot1(MB_POT1);

char* topic_sub = "pubpim";
char* topic_pub = "subpim";
const char* hostname = "broker.hivemq.com";
int port = 1883;

void messageArrived(MQTT::MessageData& md)
{
    MQTT::Message &message = md.message;
    printf("Browser message: %.*s \n", message.payloadlen, (char*)message.payload);
    
    oled.clearDisplay();
    oled.setTextCursor(0, 0);
    oled.printf("%.*s \r", message.payloadlen, (char*)message.payload);
    oled.display();
    oled.clearDisplay();
    oled.display();
}
 
void pot1Mess(MQTT::MessageData& md){
    char buf(100);
    printf(buf, "V(POT1) = %1.2f \r\n", pot1*(3.3f));
    message.qos = MQTT::QOS0;
    message.retained = false;
    message.dup = false;
    message.payload = (void *)buf;
    message.payloadlen = strlen(buf) + 1;
    client.publish(topic_pub, message);
}

void oledPrint(MQTT::MessageData& md){
    oled.clearDisplay();
    oled.setTextCursor(0, 0);
    oled.printf("%.*s \r", message.payloadlen, (char*)message.payload);
    oled.display();   
}

int main(){
    wifi = WiFiInterface::get_default_instance();
    
    printf("Connecting to %s... \n",MBED_CONF_APP_WIFI_SSID);
    int ret = wifi->connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2);
    if(ret != 0){
        printf("Greska u povezivanju");
        return -1;
    }
    printf("Success!\n");
    
    socket.open(wifi);
    socket.connect(hostname,port);
    
    MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
    data.MQTTVersion = 3;
    data.clientID.cstring = "pim-12";
 
    client.connect(data);
    client.subscribe(topic_sub, MQTT::QOS0, messageArrived);
    
    while(true) {
        thread_sleep_for(WAIT_MS);
        client.yield(1000);
    }
    
    char* startMess = "start";
    char* stopMess = "stop";
    char* oledMess = "oled";
    
    while(!strcmp((char*)message.payload, startMess)){
        client.subscribe(topic_sub, MQTT::QOS0, pot1Mess());
        if(!strcmp((char*)message.payload, stopMess)){
               break;
        }
    }
    
    if(!strcmp((char*)message.payload, oledMess)){
        oled.begin();
        i2c_obj.frequency(400000);
        client.subscribe(topic_sub, MQTT::QOS0, oledPrint);
    }
    
    
    
}