EthW5500+STM32
Dependencies: MQTT WIZnet_Library mbed
Fork of EthW5500 by
Revision 2:566a6b762cdf, committed 2018-04-19
- Comitter:
- AlexQian
- Date:
- Thu Apr 19 13:57:24 2018 +0000
- Parent:
- 1:9689429a0a29
- Child:
- 3:54ad271708ff
- Commit message:
- packed;
Changed in this revision
--- /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); } } }