EthW5500+STM32

Dependencies:   MQTT WIZnet_Library mbed

Fork of EthW5500 by YX ZHANG

Files at this revision

API Documentation at this revision

Comitter:
AlexQian
Date:
Thu Apr 19 13:57:24 2018 +0000
Parent:
1:9689429a0a29
Child:
3:54ad271708ff
Commit message:
packed;

Changed in this revision

ETHW5500.cpp Show annotated file Show diff for this revision Revisions of this file
ETHW5500.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ETHW5500.cpp	Thu Apr 19 13:57:24 2018 +0000
@@ -0,0 +1,76 @@
+#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());
+    
+    int timecount=1;
+    ret = sock.connect("tdxls-iot.xicp.net",1883);
+    //printf("%d-th Server connetion attemp\n",timecount);
+    while(ret!=0){
+        timecount++;
+        //printf("%d-th Server connetion attemp\n",timecount);
+        ret = sock.connect("tdxls-iot.xicp.net",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);
+}
+
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ETHW5500.h	Thu Apr 19 13:57:24 2018 +0000
@@ -0,0 +1,12 @@
+#ifndef ETHW5500_H
+#define ETHW5500_H
+#include "mbed.h"
+#include "WIZnetInterface.h"
+#include "MQTTSocket.h"
+#include "MQTTClient.h"
+typedef MQTT::Client<MQTTSocket,Countdown> MClient;
+int Eth_Init(uint8_t *mar_addr);
+int Eth_Subscribe(const char* ns,const char *NODE_NAME, const char* type);
+void Eth_Report(const char* ns,const char *NODE_NAME, const char* type,const char* payload , size_t payload_len , 
+                    bool retain );
+#endif
\ No newline at end of file
--- a/main.cpp	Fri Aug 25 15:46:28 2017 +0000
+++ b/main.cpp	Thu Apr 19 13:57:24 2018 +0000
@@ -2,85 +2,37 @@
 #include "WIZnetInterface.h"
 #include "MQTTSocket.h"
 #include "MQTTClient.h"
+#include "ETHW5500.h"
 
 DigitalIn BTN(PC_13);
- //W5500接线 mosi,miso,sclk,cs,reset
-WIZnetInterface wiz(PA_7,PA_6,PA_5,PB_6,PC_7);
 //节点名称任取
-#define NODE_NAME "n_12345"
+char *NODE_NAME="n_12345";
  //接在同一子网下的设备MAC地址必须不同
 uint8_t mac_addr[6]={0x50,0x51,0x50,0x00,0x00,0x01};
 
-typedef MQTT::Client<MQTTSocket,Countdown> MClient;
-void meta_report(MClient& client, const char* ns, const char* type, 
-                    const char* payload = NULL, size_t payload_len = 0, 
-                    bool retain = false, MQTT::QoS qos = MQTT::QOS1){
-    char topic[64];
-    sprintf(topic, "/%s/" NODE_NAME "/%s", ns, type);
-    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);
-}
- 
 int main() {
-    int ret;
-    wiz.init(mac_addr);
-    printf("DHCP...\r\n");
-    wiz.connect();
-    printf("IP: %s\r\n", wiz.getIPAddress());
-    
-    MQTTSocket sock;
-    MClient client(sock);
-    
-    ret = sock.connect("tdxls-iot.xicp.net",1883);
-    if(ret != 0){
-        printf("failed to connect to TCP server\r\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);
     
     const char* actuators = "switch,int\n";
     const char* sensors = "analog,mV\n";
-
-    ret = client.subscribe("/control/" NODE_NAME "/switch", MQTT::QOS1, messageArrived);    
-    printf("sock.subscribe()=%d\r\n",ret);
-
-    //节点上线消息
-    meta_report(client, "events","online");
-    //报告所有可接受的控制指令
-    meta_report(client, "capability","control", actuators, strlen(actuators), true);
-    //报告所有的传感器
-    meta_report(client, "capability","values", sensors, strlen(sensors), true);
+    
+    Eth_Init(mac_addr);//初始化
+    
+    Eth_Subscribe("control",NODE_NAME,"switch");//订阅服务器信息
     
-    bool btn = 0;
+    Eth_Report("event",NODE_NAME,"online",NULL,0,false);//报告节点状态
+    Eth_Report("capability",NODE_NAME,"control",actuators,strlen(actuators),true);//报告传感器参数
+    Eth_Report("capability",NODE_NAME,"values",sensors,strlen(sensors),true);
+    bool btn = 0;//报告GPIO电平
     while(1){
         bool newBTN = BTN;
         if(newBTN != btn){
             char buf[16];
             int value = newBTN ? 3300 : 0;
             sprintf(buf, "%d mV", value);
-            meta_report(client, "values","analog",buf,strlen(buf),true);
+            Eth_Report("values",NODE_NAME,"analog",buf,strlen(buf),true);
             btn = newBTN;
         }else{
-            client.yield(100);
+            wait(0.1);
         }
     }
 }