Web Socket connection (MBED is client side)
Dependencies: EthernetNetIf MbedJSONValue mbed
Fork of WebSocket_test by
main.cpp@2:7b3b7d65240f, 2016-03-22 (annotated)
- Committer:
- sura0111
- Date:
- Tue Mar 22 05:17:52 2016 +0000
- Revision:
- 2:7b3b7d65240f
- Parent:
- 1:6d42db5e8ace
update 0.01
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
okini3939 | 0:236a084b1d6b | 1 | #include "mbed.h" |
okini3939 | 0:236a084b1d6b | 2 | #include "Websocket.h" |
okini3939 | 0:236a084b1d6b | 3 | #include "MbedJSONValue.h" |
okini3939 | 0:236a084b1d6b | 4 | #include "EthernetNetIf.h" |
sura0111 | 1:6d42db5e8ace | 5 | #include <string> |
okini3939 | 0:236a084b1d6b | 6 | |
sura0111 | 1:6d42db5e8ace | 7 | // Connection setup DeviceName, DeviceToConnect, Password, BaseUrl, RealURL |
sura0111 | 1:6d42db5e8ace | 8 | char* thisDevice = "client2"; |
sura0111 | 1:6d42db5e8ace | 9 | char* connectedDevice = "client1"; |
sura0111 | 1:6d42db5e8ace | 10 | char* API_KEY = "0000"; |
sura0111 | 1:6d42db5e8ace | 11 | char* BASE_URL = "ws://0.0.0.0:8001/?"; |
sura0111 | 1:6d42db5e8ace | 12 | char URL[255]; |
okini3939 | 0:236a084b1d6b | 13 | |
sura0111 | 1:6d42db5e8ace | 14 | // MBED Inputs & Outputs |
sura0111 | 1:6d42db5e8ace | 15 | DigitalOut dout(p14); //trigger signal for check |
sura0111 | 1:6d42db5e8ace | 16 | Serial pc(USBTX, USBRX); // tx, rx |
sura0111 | 1:6d42db5e8ace | 17 | AnalogIn volume(p15); //volume |
sura0111 | 1:6d42db5e8ace | 18 | // LED |
sura0111 | 1:6d42db5e8ace | 19 | PwmOut led1(LED1); |
sura0111 | 1:6d42db5e8ace | 20 | PwmOut led2(LED2); |
sura0111 | 2:7b3b7d65240f | 21 | DigitalOut led[] = {(p5),(p6),(p7), (LED3), (LED4)}; |
okini3939 | 0:236a084b1d6b | 22 | |
sura0111 | 1:6d42db5e8ace | 23 | // Ethernet variables |
okini3939 | 0:236a084b1d6b | 24 | EthernetNetIf *eth; |
okini3939 | 0:236a084b1d6b | 25 | Websocket *ws; |
okini3939 | 0:236a084b1d6b | 26 | |
sura0111 | 1:6d42db5e8ace | 27 | bool readFlag = false; |
sura0111 | 1:6d42db5e8ace | 28 | char buf[255] = {0}; |
sura0111 | 1:6d42db5e8ace | 29 | MbedJSONValue json; |
okini3939 | 0:236a084b1d6b | 30 | |
sura0111 | 1:6d42db5e8ace | 31 | // Init |
sura0111 | 1:6d42db5e8ace | 32 | void initData(void); |
sura0111 | 1:6d42db5e8ace | 33 | void initArray(unsigned int* array, int count); |
sura0111 | 1:6d42db5e8ace | 34 | // Websocket timeout |
sura0111 | 1:6d42db5e8ace | 35 | Timeout wsTout; |
sura0111 | 1:6d42db5e8ace | 36 | // WS Connection functions |
sura0111 | 1:6d42db5e8ace | 37 | void wsConnection(); |
sura0111 | 1:6d42db5e8ace | 38 | void wsflip(); |
okini3939 | 0:236a084b1d6b | 39 | |
sura0111 | 1:6d42db5e8ace | 40 | int main() { |
sura0111 | 1:6d42db5e8ace | 41 | wsConnection(); |
sura0111 | 2:7b3b7d65240f | 42 | led[3] = 1; |
sura0111 | 2:7b3b7d65240f | 43 | led[4] = 1; |
sura0111 | 1:6d42db5e8ace | 44 | while(1){ |
sura0111 | 1:6d42db5e8ace | 45 | if(readFlag){ |
sura0111 | 1:6d42db5e8ace | 46 | if(json["edata"].size()>0){ |
sura0111 | 1:6d42db5e8ace | 47 | led1 = json["edata"]["0"].get<int>()/100.0; |
sura0111 | 1:6d42db5e8ace | 48 | led2 = json["edata"]["1"].get<int>()/100.0; |
sura0111 | 1:6d42db5e8ace | 49 | }; |
sura0111 | 1:6d42db5e8ace | 50 | if(json["mdata"].size()>0){ |
sura0111 | 2:7b3b7d65240f | 51 | for(int i=0; i<3; i++){ |
sura0111 | 2:7b3b7d65240f | 52 | led[i] = json["mdata"][i].get<int>(); |
sura0111 | 2:7b3b7d65240f | 53 | } |
sura0111 | 1:6d42db5e8ace | 54 | }; |
sura0111 | 1:6d42db5e8ace | 55 | readFlag=false; |
sura0111 | 1:6d42db5e8ace | 56 | // if(json["option"].size()>0){ |
sura0111 | 1:6d42db5e8ace | 57 | // s = json["option"].serialize(); |
sura0111 | 1:6d42db5e8ace | 58 | //}; |
okini3939 | 0:236a084b1d6b | 59 | } |
okini3939 | 0:236a084b1d6b | 60 | } |
okini3939 | 0:236a084b1d6b | 61 | } |
sura0111 | 1:6d42db5e8ace | 62 | void wsConnection (){ |
sura0111 | 1:6d42db5e8ace | 63 | |
sura0111 | 1:6d42db5e8ace | 64 | // URL Setup |
sura0111 | 1:6d42db5e8ace | 65 | strcpy(URL, BASE_URL); |
sura0111 | 1:6d42db5e8ace | 66 | strcat(URL, "API_KEY="); |
sura0111 | 1:6d42db5e8ace | 67 | strcat(URL, API_KEY); |
sura0111 | 1:6d42db5e8ace | 68 | strcat(URL, "&NAME="); |
sura0111 | 1:6d42db5e8ace | 69 | strcat(URL, thisDevice); |
sura0111 | 1:6d42db5e8ace | 70 | strcat(URL, "&TO="); |
sura0111 | 1:6d42db5e8ace | 71 | strcat(URL, connectedDevice); |
sura0111 | 1:6d42db5e8ace | 72 | |
sura0111 | 1:6d42db5e8ace | 73 | //Ethernet setup |
sura0111 | 1:6d42db5e8ace | 74 | eth = new EthernetNetIf(); |
sura0111 | 1:6d42db5e8ace | 75 | EthernetErr ethErr = eth->setup(); |
sura0111 | 1:6d42db5e8ace | 76 | if(ethErr){ pc.printf("\r\nElectro-tactile display: Error %d in setup. \r\n", ethErr);} |
sura0111 | 1:6d42db5e8ace | 77 | |
sura0111 | 1:6d42db5e8ace | 78 | ws = new Websocket(URL, eth); |
sura0111 | 1:6d42db5e8ace | 79 | pc.printf("\r\nElectro-tactile display: ON\r\n"); |
sura0111 | 1:6d42db5e8ace | 80 | while(!ws->connect()) { pc.printf("Electro-tactile display: Connecting...\r\n"); wait(1);} |
sura0111 | 1:6d42db5e8ace | 81 | // Message after connection succeeded |
sura0111 | 1:6d42db5e8ace | 82 | pc.printf("Connection succeeded\r\n"); |
sura0111 | 1:6d42db5e8ace | 83 | ws->send("Electro-Tactile Display Connected"); |
sura0111 | 1:6d42db5e8ace | 84 | wsflip(); |
sura0111 | 1:6d42db5e8ace | 85 | } |
sura0111 | 1:6d42db5e8ace | 86 | void wsflip(){ |
sura0111 | 1:6d42db5e8ace | 87 | Net::poll(); |
sura0111 | 1:6d42db5e8ace | 88 | // when data received |
sura0111 | 1:6d42db5e8ace | 89 | readFlag = ws->read(buf); |
sura0111 | 1:6d42db5e8ace | 90 | parse(json, buf); |
sura0111 | 1:6d42db5e8ace | 91 | Net::poll(); |
sura0111 | 1:6d42db5e8ace | 92 | if(!ws->connected()) pc.printf("Disconnected\r\n"); |
sura0111 | 1:6d42db5e8ace | 93 | else wsTout.attach(&wsflip, 0.005); |
sura0111 | 1:6d42db5e8ace | 94 | } |
sura0111 | 1:6d42db5e8ace | 95 | void initArray(unsigned int* array, int count){ |
sura0111 | 1:6d42db5e8ace | 96 | for(int i=0; i<count; i++) { array[i]=0;} |
sura0111 | 1:6d42db5e8ace | 97 | } |