client

Dependencies:   DISCO_L475VG_IOT01A_wifi mbed stm-spirit1-rf-driver

main.cpp

Committer:
apate131
Date:
2017-09-25
Revision:
4:40e6ed9dbfaf
Parent:
2:9a54ede37c7e

File content as of revision 4:40e6ed9dbfaf:

#include "mbed.h"
#include <string>

#include "wifi.h"

#include "MQTTmbed.h"
#include "MQTTClient.h"
#include "MQTT_wifi.h"

#include "SimpleSpirit1.h"


/* Private defines -----------------------------------------------------------*/
#define WIFI_WRITE_TIMEOUT 10000
#define WIFI_READ_TIMEOUT  10000
#define CONNECTION_TRIAL_MAX          10


/* Private typedef------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
Serial pc(SERIAL_TX, SERIAL_RX);
uint8_t RemoteIP[] = {MBED_CONF_APP_SERVER_IP_1,MBED_CONF_APP_SERVER_IP_2,MBED_CONF_APP_SERVER_IP_3, MBED_CONF_APP_SERVER_IP_4};
uint8_t RxData [500];
char* modulename;
uint8_t TxData[] = "STM32 : Hello!\n";
uint16_t RxLen;
uint8_t  MAC_Addr[6];
uint8_t  IP_Addr[4];

void messageArrived(MQTT::MessageData& md)
{
    MQTT::Message &message = md.message;
    printf("message recieved\r\n");
}

static volatile bool tx_done_flag = false;
static void callback_func(int event)
{
    if (event == SimpleSpirit1::TX_DONE) {
        tx_done_flag = true;
    }
}

int main()
{


    pc.baud(115200);

    /*Initialize  WIFI module */
    if(WIFI_Init() ==  WIFI_STATUS_OK) {

        printf("> WIFI Module Initialized.\r\n");
        if(WIFI_GetMAC_Address(MAC_Addr) == WIFI_STATUS_OK) {
            printf("> es-wifi module MAC Address : %X:%X:%X:%X:%X:%X\r\n",
                   MAC_Addr[0],
                   MAC_Addr[1],
                   MAC_Addr[2],
                   MAC_Addr[3],
                   MAC_Addr[4],
                   MAC_Addr[5]);
        } else {
            printf("> ERROR : CANNOT get MAC address\r\n");
        }

        if( WIFI_Connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, WIFI_ECN_WPA2_PSK) == WIFI_STATUS_OK) {
            printf("> es-wifi module connected \r\n");
            if(WIFI_GetIP_Address(IP_Addr) == WIFI_STATUS_OK) {
                printf("> es-wifi module got IP Address : %d.%d.%d.%d\r\n",
                       IP_Addr[0],
                       IP_Addr[1],
                       IP_Addr[2],
                       IP_Addr[3]);

                printf("> Trying to connect to Server: %d.%d.%d.%d:8002 ...\r\n",
                       RemoteIP[0],
                       RemoteIP[1],
                       RemoteIP[2],
                       RemoteIP[3]);


                uint8_t  colca_addr[4];
                WIFI_GetHostAddress("colcaweb01.duckdns.org", colca_addr);

                printf("---- Colca IP address : %d.%d.%d.%d\r\n",
                       colca_addr[0],
                       colca_addr[1],
                       colca_addr[2],
                       colca_addr[3]);

                MQTT_wifi wf;
                int rc;
                printf("rc from connect:%d\r\n", rc);
                MQTT::Client<MQTT_wifi, Countdown> client(wf);
                wf.connect("colcaweb01.duckdns.org", 1883);

                MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
                data.MQTTVersion = 3;
                data.clientID.cstring = "test-client";
                data.username.cstring = "test-user";
                data.password.cstring = "Tall5Duck";
                data.cleansession = 1;
                if ((rc = client.connect(data)) != 0)
                    printf("rc from MQTT connect is %d\r\n", rc);


                SimpleSpirit1 &subghz = SimpleSpirit1::CreateInstance(PC_12, PC_11, PC_10, PE_5, PB_5, PB_15);
                subghz.attach_irq_callback(callback_func);
                subghz.on();

                while(true) {

                    
                    char buf[SPIRIT1_MAX_PAYLOAD];
                    int size = subghz.read(buf, 25);
                    buf[size] = '\0';


                    rc = client.yield(5000);
                    if (rc) {
                        printf("Problem with client.yeild()\r\n");
                        client.connect(data);
                    } else {
                        printf("Still connected\r\n");
                    }

                    if (!strncmp(buf, "complete message", 16)) {
                        MQTT::Message message;
                        char msg_buf[100];
                        sprintf(msg_buf, buf);
                        message.qos = MQTT::QOS2;
                        message.retained = false;
                        message.dup = false;
                        message.payload = (void*)msg_buf;
                        message.payloadlen = strlen(msg_buf)+1;
                        client.publish("test/st/range", message);
                        printf("Received subghz message, sent mqtt message\r\n");
                        
                    }
                }
            } else {
                printf("> ERROR : es-wifi module CANNOT get IP address\n");
            }
        } else {
            printf("> ERROR : es-wifi module NOT connected\n");
        }
    } else {
        printf("> ERROR : WIFI Module cannot be initialized.\n");
    }
}