![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
nucleo f767zi onenet edp test
Dependencies: cJSON_lib Common_lib EdpKit_lib
main.cpp@76:f524071998a0, 2020-04-08 (annotated)
- 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?
User | Revision | Line number | New 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 | } |