Web Socket connection (MBED is client side)

Dependencies:   EthernetNetIf MbedJSONValue mbed

Fork of WebSocket_test by Suga koubou

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?

UserRevisionLine numberNew 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 }