Realtime graphs using Plotly and websockets
As you already know, In our blog we use the websocket protocol intensively, It's a fast and easy way to send data from WiFi connected micro-controllers (such as the ESP8266) to the Browser without anything in between.
Here are some projects with code samples where websockets were used:
Today I'll share with you an example of how you can use Plotly to visualize real-time data in your browser
Here is how it looks like:

Here is the code : ploty websocket example
The HTML code creates a websocket (You'll need to change this to the ESP8266 IP and port)
ws = new WebSocket("ws://esp_ip:port/")
After the connection is established, it creates a loop of requesting data from the server
request_data_interval = window.setInterval(requestData, 50);
Then, it parses the json data and creates the graph in the place I asked him to
```
ws.onmessage = function (evt)
{
var received_msg = evt.data;
data = JSON.parse(evt.data);
var my_plot = {
x: data.x,
y: data.y,
type: 'scatter',
};
Plotly.newPlot('sine-graph', [my_plot]);
};
```
In order to test this I've used a python library called pywebsocket
I've created a websocket handler named send_graph
All it does is create a sine-wave graph with lots of samples
``` x = np.arange(0,np.pi*10,0.1).tolist() y = np.sin(x).tolist() ```
And every time the user requests the graph data we send a sliding window of the graph
```
graph_to_send = json.dumps({
'x':x[counter:counter+graph_size],
'y':y[counter:counter+graph_size]
})
```
and that's it :)
In order to try the pywebsocket library for yourself you should download it and install using your python. Then, copy the send_graph_wsh.py file in the repository to the pywebsocket/example/ folder and then run the next lines:
cd pywebsocket/mod_pywebsocket
python standalone.py -p 9998 -w ../example/
If you open the plot_graphs_from_websocket.html using your browser you'll see the results - and that's it :)