EthW5500+STM32

Dependencies:   MQTT WIZnet_Library mbed

Fork of EthW5500 by YX ZHANG

ETHW5500.cpp

Committer:
AlexQian
Date:
2018-04-20
Revision:
3:54ad271708ff
Parent:
2:566a6b762cdf
Child:
4:10f83daba9ea

File content as of revision 3:54ad271708ff:

#include "ETHW5500.h"

//W5500接线 mosi,miso,sclk,cs,reset
WIZnetInterface wiz(PA_7,PA_6,PA_5,PB_6,PC_7);

void meta_report(MClient& client, const char *topic, 
                    const char* payload = NULL, size_t payload_len = 0, 
                    bool retain = false, MQTT::QoS qos = MQTT::QOS1){
    int ret = client.publish(topic, (void*)payload, payload_len, qos, retain);
    printf("client.publish()=%d\r\n",ret);
}
void messageArrived(MQTT::MessageData& md)
{
    MQTT::Message &message = md.message;
    char buf[64];
    int value, len = sizeof(buf)-1;
    if(message.payloadlen < len)
        len = message.payloadlen;
    memcpy(buf, message.payload, len);
    buf[len] = '\0';
    sscanf(buf, "%d", &value);
    printf("received %d\r\n", value);
}
MQTTSocket sock;
MClient client(sock);
int Eth_Init(uint8_t *mac_addr)
{
    int ret;
    wiz.init(mac_addr);
    printf("DHCP...\r\n");
    wiz.connect();
    printf("IP: %s\r\n", wiz.getIPAddress());
    return ret;
    
}
int Eth_ConnectToSer(char *URL)
{
    int ret;
    int timecount=1;
    ret = sock.connect(URL,1883);
    //printf("%d-th Server connetion attemp\n",timecount);
    while(ret!=0){
        timecount++;
        //printf("%d-th Server connetion attemp\n",timecount);
        ret = sock.connect(URL,1883);
        if(timecount>20){
            printf("failed to connet Server,Please Check out and Reset\n");
            return 1;
        }
    }
    printf("sock.connect()=%d\r\n",ret);
    
    ret = client.connect();
    if(ret != 0){
        printf("MQTT connect failed\r\n");
        return 1;
    }
    printf("client.connect()=%d\r\n",ret);
    return ret;
    
}

int Eth_Subscribe(const char* ns,const char *NODE_NAME, const char* type)
{
    int ret;
    char topic[64];
    sprintf(topic, "/%s/%s/%s", ns, NODE_NAME, type);
    //printf("topic=%s\r\n",topic);
    ret = client.subscribe(topic, MQTT::QOS1, messageArrived);    
    printf("sock.subscribe()=%d\r\n",ret);
    return ret;
}
void Eth_Report(const char* ns,const char *NODE_NAME, const char* type,const char* payload = NULL, size_t payload_len = 0, 
                    bool retain = false)
{
    char topic[64];
    sprintf(topic, "/%s/%s/%s", ns, NODE_NAME, type);
    //printf("topic=%s\r\n",topic);
    meta_report(client, topic,payload,payload_len,retain);
}