nucleo f767zi onenet edp test

Dependencies:   cJSON_lib Common_lib EdpKit_lib

Committer:
ws1992108
Date:
Wed Apr 08 04:01:46 2020 +0000
Revision:
76:f524071998a0
Parent:
72:47ae7d8d7321
by ws

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 0:17bd84fc5087 1 #include "mbed.h"
ws1992108 76:f524071998a0 2 #include "EdpKit.h"
ws1992108 76:f524071998a0 3
ws1992108 76:f524071998a0 4 #define TCPADD "jjfaedp.hedevice.com"
ws1992108 76:f524071998a0 5 #define TCPPORT 876
ws1992108 76:f524071998a0 6 #define DEVICE_ID "10443217"
ws1992108 76:f524071998a0 7 #define API_KEY "s9H5cODRLi8xjfTp2Nw9mZaKFeU="
mbed_official 0:17bd84fc5087 8
mbed_official 5:3e952c60d705 9 // Network interface
mbed_official 49:1923a727df5b 10 NetworkInterface *net;
ws1992108 76:f524071998a0 11 TCPSocket socket;
ws1992108 76:f524071998a0 12 Thread thread_recv, thread_ping;
ws1992108 76:f524071998a0 13 DigitalOut myled1(LED1);
ws1992108 76:f524071998a0 14 DigitalOut myled2(LED2);
ws1992108 76:f524071998a0 15
ws1992108 76:f524071998a0 16
ws1992108 76:f524071998a0 17 void socket_recv()
ws1992108 76:f524071998a0 18 {
ws1992108 76:f524071998a0 19 nsapi_size_or_error_t result;
ws1992108 76:f524071998a0 20 char *cmdid;
ws1992108 76:f524071998a0 21 char *req;
ws1992108 76:f524071998a0 22 uint16 cmdid_len;
ws1992108 76:f524071998a0 23 uint32 req_len;
ws1992108 76:f524071998a0 24 uint8 type;
ws1992108 76:f524071998a0 25 RecvBuffer *recv_buf;
ws1992108 76:f524071998a0 26
ws1992108 76:f524071998a0 27
ws1992108 76:f524071998a0 28 printf("start recv thread.\n");
ws1992108 76:f524071998a0 29
ws1992108 76:f524071998a0 30 while (true) {
ws1992108 76:f524071998a0 31 recv_buf = NewBuffer();
ws1992108 76:f524071998a0 32 result = socket.recv(recv_buf->_data, 256);
ws1992108 76:f524071998a0 33 if (result < 0) {
ws1992108 76:f524071998a0 34 printf("Error! socket.recv() returned: %d\n", result);
ws1992108 76:f524071998a0 35 continue;
ws1992108 76:f524071998a0 36 }
ws1992108 76:f524071998a0 37
ws1992108 76:f524071998a0 38 recv_buf->_write_pos = result;
ws1992108 76:f524071998a0 39 ReadByte(recv_buf, &type);
ws1992108 76:f524071998a0 40
ws1992108 76:f524071998a0 41 if(type == 0xA0)
ws1992108 76:f524071998a0 42 {
ws1992108 76:f524071998a0 43 result = UnpackCmdReq(recv_buf, &cmdid, &cmdid_len, &req, &req_len);
ws1992108 76:f524071998a0 44
ws1992108 76:f524071998a0 45 if(result == 0)
ws1992108 76:f524071998a0 46 {
ws1992108 76:f524071998a0 47 printf("[%.*s]\n", req_len, req);
ws1992108 76:f524071998a0 48 if(strstr(req, "switch1"))
ws1992108 76:f524071998a0 49 {
ws1992108 76:f524071998a0 50 myled1 = req[req_len-1] - 0x30;
ws1992108 76:f524071998a0 51 }
ws1992108 76:f524071998a0 52 else if(strstr(req, "switch2"))
ws1992108 76:f524071998a0 53 {
ws1992108 76:f524071998a0 54 myled2 = req[req_len-1] - 0x30;
ws1992108 76:f524071998a0 55 }
ws1992108 76:f524071998a0 56
ws1992108 76:f524071998a0 57 }
ws1992108 76:f524071998a0 58 }
ws1992108 76:f524071998a0 59 }
ws1992108 76:f524071998a0 60 }
ws1992108 76:f524071998a0 61
ws1992108 76:f524071998a0 62 void socket_ping()
ws1992108 76:f524071998a0 63 {
ws1992108 76:f524071998a0 64 EdpPacket* send_pack;
ws1992108 76:f524071998a0 65
ws1992108 76:f524071998a0 66 while(1)
ws1992108 76:f524071998a0 67 {
ws1992108 76:f524071998a0 68 printf("ping onenet.\n");
ws1992108 76:f524071998a0 69 send_pack = PacketPing();
ws1992108 76:f524071998a0 70 socket.send(send_pack->_data,send_pack->_write_pos); //send packge to OneNet Cloud
ws1992108 76:f524071998a0 71
ws1992108 76:f524071998a0 72 wait(60);
ws1992108 76:f524071998a0 73 }
ws1992108 76:f524071998a0 74 }
ws1992108 76:f524071998a0 75
mbed_official 0:17bd84fc5087 76
mbed_official 0:17bd84fc5087 77 // Socket demo
mbed_official 5:3e952c60d705 78 int main() {
mbed_official 47:08787ef063cb 79 int remaining;
mbed_official 47:08787ef063cb 80 char *buffer = new char[256];
ws1992108 76:f524071998a0 81 EdpPacket* send_pack;
mbed_official 64:a3dc04daaa2a 82 nsapi_size_or_error_t result;
mbed_official 47:08787ef063cb 83
mbed_official 5:3e952c60d705 84 // Bring up the ethernet interface
mbed_official 49:1923a727df5b 85 printf("Mbed OS Socket example\n");
mbed_official 48:f2739ac5cb01 86
mbed_official 48:f2739ac5cb01 87 #ifdef MBED_MAJOR_VERSION
mbed_official 49:1923a727df5b 88 printf("Mbed OS version: %d.%d.%d\n\n", MBED_MAJOR_VERSION, MBED_MINOR_VERSION, MBED_PATCH_VERSION);
mbed_official 48:f2739ac5cb01 89 #endif
mbed_official 48:f2739ac5cb01 90
mbed_official 49:1923a727df5b 91 net = NetworkInterface::get_default_instance();
mbed_official 49:1923a727df5b 92
mbed_official 49:1923a727df5b 93 if (!net) {
mbed_official 49:1923a727df5b 94 printf("Error! No network inteface found.\n");
mbed_official 49:1923a727df5b 95 return 0;
mbed_official 49:1923a727df5b 96 }
mbed_official 49:1923a727df5b 97
mbed_official 64:a3dc04daaa2a 98 result = net->connect();
mbed_official 64:a3dc04daaa2a 99 if (result != 0) {
mbed_official 64:a3dc04daaa2a 100 printf("Error! net->connect() returned: %d\n", result);
mbed_official 64:a3dc04daaa2a 101 return result;
mbed_official 47:08787ef063cb 102 }
mbed_official 0:17bd84fc5087 103
mbed_official 72:47ae7d8d7321 104 // Open a socket on the network interface, and create a TCP connection to ifconfig.io
mbed_official 56:02a6401ec508 105
mbed_official 64:a3dc04daaa2a 106 result = socket.open(net);
mbed_official 64:a3dc04daaa2a 107 if (result != 0) {
mbed_official 64:a3dc04daaa2a 108 printf("Error! socket.open() returned: %d\n", result);
mbed_official 47:08787ef063cb 109 }
ws1992108 76:f524071998a0 110
ws1992108 76:f524071998a0 111 result = socket.connect(TCPADD, TCPPORT);
mbed_official 64:a3dc04daaa2a 112 if (result != 0) {
mbed_official 64:a3dc04daaa2a 113 printf("Error! socket.connect() returned: %d\n", result);
mbed_official 56:02a6401ec508 114 goto DISCONNECT;
mbed_official 47:08787ef063cb 115 }
mbed_official 47:08787ef063cb 116
ws1992108 76:f524071998a0 117 printf("now linking to OneNet...\r\n");
ws1992108 76:f524071998a0 118 send_pack = PacketConnect1(DEVICE_ID, API_KEY);
ws1992108 76:f524071998a0 119 result = socket.send(send_pack->_data, send_pack->_write_pos);
ws1992108 76:f524071998a0 120 if (result < 0) {
ws1992108 76:f524071998a0 121 printf("Error! socket.send() returned: %d\n", result);
ws1992108 76:f524071998a0 122 goto DISCONNECT;
mbed_official 40:afef93b6d854 123 }
ws1992108 76:f524071998a0 124
mbed_official 47:08787ef063cb 125 // Receieve an HTTP response and print out the response line
mbed_official 47:08787ef063cb 126 remaining = 256;
ws1992108 76:f524071998a0 127 result = socket.recv(buffer, remaining);
mbed_official 64:a3dc04daaa2a 128 if (result < 0) {
mbed_official 64:a3dc04daaa2a 129 printf("Error! socket.recv() returned: %d\n", result);
mbed_official 56:02a6401ec508 130 goto DISCONNECT;
mbed_official 47:08787ef063cb 131 }
ws1992108 76:f524071998a0 132
ws1992108 76:f524071998a0 133 if(buffer[3] != 0) {
ws1992108 76:f524071998a0 134 printf("Error!link to onenet failed!\n");
ws1992108 76:f524071998a0 135 goto DISCONNECT;
ws1992108 76:f524071998a0 136 }
ws1992108 76:f524071998a0 137
ws1992108 76:f524071998a0 138 thread_recv.start(socket_recv);
ws1992108 76:f524071998a0 139 thread_ping.start(socket_ping);
ws1992108 76:f524071998a0 140
ws1992108 76:f524071998a0 141 int number = 0;
ws1992108 76:f524071998a0 142
ws1992108 76:f524071998a0 143 while(1) {
ws1992108 76:f524071998a0 144 cJSON *json_data = cJSON_CreateObject(); //create a new json data
ws1992108 76:f524071998a0 145
ws1992108 76:f524071998a0 146 scanf("%d", &number);
ws1992108 76:f524071998a0 147
ws1992108 76:f524071998a0 148 cJSON_AddNumberToObject(json_data, "number", number); //pack data into json package
ws1992108 76:f524071998a0 149 send_pack = PacketSavedataJson(DEVICE_ID, json_data, 3); //pack send data into EDP package
ws1992108 76:f524071998a0 150 cJSON_Delete(json_data); //delete json_data, unless may cause memory leak
ws1992108 76:f524071998a0 151
ws1992108 76:f524071998a0 152 printf("send data number = %d\r\n", number);
ws1992108 76:f524071998a0 153
ws1992108 76:f524071998a0 154 /*
ws1992108 76:f524071998a0 155 for(i=0;i<send_pack->_write_pos;i++)
ws1992108 76:f524071998a0 156 printf("0X%02X ", send_pack->_data[i]);
ws1992108 76:f524071998a0 157 printf("\n");
ws1992108 76:f524071998a0 158 */
ws1992108 76:f524071998a0 159
ws1992108 76:f524071998a0 160 result = socket.send(send_pack->_data,send_pack->_write_pos); //send packge to OneNet Cloud
ws1992108 76:f524071998a0 161 if (result < 0) {
ws1992108 76:f524071998a0 162 printf("Error! socket.send() returned: %d\n", result);
ws1992108 76:f524071998a0 163 goto DISCONNECT;
ws1992108 76:f524071998a0 164 }
ws1992108 76:f524071998a0 165
ws1992108 76:f524071998a0 166 wait(3);
ws1992108 76:f524071998a0 167 }
ws1992108 76:f524071998a0 168
mbed_official 47:08787ef063cb 169 delete[] buffer;
ws1992108 76:f524071998a0 170
mbed_official 56:02a6401ec508 171 DISCONNECT:
mbed_official 0:17bd84fc5087 172 // Close the socket to return its memory and bring down the network interface
mbed_official 0:17bd84fc5087 173 socket.close();
mbed_official 0:17bd84fc5087 174
mbed_official 5:3e952c60d705 175 // Bring down the ethernet interface
mbed_official 49:1923a727df5b 176 net->disconnect();
mbed_official 0:17bd84fc5087 177 printf("Done\n");
mbed_official 0:17bd84fc5087 178 }