Petar Djuric 2018/0002

Dependencies:   mbed Adafruit_GFX 19E042PIM_MB_PINS

main.cpp

Committer:
petardjuric180002
Date:
2021-12-11
Revision:
0:a2c1c8bc2b0f

File content as of revision 0:a2c1c8bc2b0f:

#include "mb_pins.h"
#include "mbed.h"
#include "platform/mbed_thread.h"
#include "MQTTClientMbedOs.h"
#include "Adafruit_GFX.h"
#include "Adafruit_GFX_Config.h"
#include "Adafruit_SSD1306.h"
#include <cstring>
 
#define SMALL_WAIT_MS            10
 
#define BLINK_PERIOD_MS         250
 
//OLED DIMENSIONS
#define OLED_HEIGHT_PX 64
#define OLED_WIDTH_PX 128

//I2C adress
#define I2C_ADDRESS         0x3c
#define I2C_ADD_MBED    I2C_ADDRESS << 1

AnalogIn POT1(MB_POT1);
DigitalOut led2(MB_LED2);

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


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

 
void messageArrived(MQTT::MessageData& md)
{
    MQTT::Message &message = md.message;
    printf("Browser message: %.*s \r\n", message.payloadlen, (char*)message.payload);
    
    myOLED.clearDisplay();
    myOLED.printf("%.*s \r", message.payloadlen, (char*)message.payload);
    myOLED.display();
}
 

 
int main()
{
    wifi = WiFiInterface::get_default_instance();
    if(!wifi)
        {
            printf("ERROR: Nema WiFija");
            return -1;
        }
    
    printf("\n 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 \n");
        return -1;
    }
    
    printf("Success\n");
    printf("MAC: %s\n", wifi->get_mac_address());
    printf("IP: %s\n", wifi->get_ip_address());
    printf("Netmask: %s\n", wifi->get_netmask());
    printf("Gateway: %s\n", wifi->get_gateway());
    printf("RSSI: %d\n\n", wifi->get_rssi());
    
    socket.open(wifi);
    socket.connect(hostname, port);
    
    
    MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
    data.MQTTVersion = 3;
    data.clientID.cstring = "YUSUF";
    
    int rc = 0;
    if((rc = client.connect(data)) != 0)
        printf("rc from MQTT connect is %d \r\n",rc);
    
    if((rc = client.subscribe(topic_sub, MQTT::QOS2, messageArrived)) != 0)     //ovako se on subscribuje na temu
        printf("rc from MQTT subscribe is %d \r\n", rc);
       
    
    char dr[4] = {'o','l','e','d'};
    char strt[5] = {'s','t','a','r','t'};
    char stp[4] = {'s','t','o','p'};
    while(true)
    {
        led2 =! led2;
        thread_sleep_for(BLINK_PERIOD_MS);
            char buf[100];
            sprintf(buf, "rec je");
            
            
        /*    if (std::strcmp(buf, strt) == 0 && m==1) {
                sprintf(buf, "V(POT1) = %1.2f \r\n", POT1 * (3.3f));
                
                
                if (std::strcmp(buf, stp) == 0) {
                    sprintf(buf, "rec je");
                
                }  } 
      */      
            
            if (std::strcmp(buf, dr) == 0) {
                //ako jes
                myOLED.begin(); //pocetak
                i2c_obj.frequency(400000); //veca frekvencija slanja da ne bi ghostovalo
    
                 myOLED.clearDisplay();
                 myOLED.display();
                
            }
            
            message.qos = MQTT::QOS0;
            message.retained = false;
            message.dup = false;
            message.payload = (void*)buf;
            message.payloadlen = strlen(buf)+1;
            client.publish(topic_pub, message);
        
        client.yield(1000);
        
    }
}