Skip to content

Instantly share code, notes, and snippets.

@dloman
Created September 30, 2015 08:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save dloman/1c02ac26a57f90216093 to your computer and use it in GitHub Desktop.
Save dloman/1c02ac26a57f90216093 to your computer and use it in GitHub Desktop.
This takes data from random input or from a temperature server and sends it to a bokeh plot server
import argparse
import numpy as np
import serial
import time
from bokeh.plotting import figure, output_server, cursession, show
from Instrulab import Instrulab
output_server("Temperature Plot")
# plot class
class AnalogPlot:
# constr
def __init__(self, strPort, maxLength):
# open serial port
#self.instrument = Instrulab(strPort)
self.maxLength = maxLength
self.plot = figure(plot_width=1200, plot_height=300)
self.plot.line([1,2,3], [1,2,3], color="#0000FF", name='probe0')
self.plot.line([1,2,3], [1,2,3], color="#FF0000", name='probe1')
self.plot.line([1,2,3], [1,-2,3], color="#00FF00", name='probe2')
self.plot.line([1,2,3], [1,2,-33], color="#880088", name='probe3')
show(self.plot)
self.numberOfPlots = 4
self.dataSources = []
self.time = 0.0
for i in range(self.numberOfPlots):
renderer = self.plot.select(dict(name="probe"+str(i)))
self.dataSources.append(renderer[0].data_source)
# add data
def add(self, data):
assert(len(data) == self.numberOfPlots)
for index, dataSource in enumerate(self.dataSources):
dataSource.data["x"] = np.arange(self.time)
dataSource.data["y"] += [data[index]]
cursession().store_objects(dataSource)
# update plot
def update(self):
#data = self.instrument.getData()
data = 10 * np.random.randn(self.numberOfPlots)
self.add(data)
self.time += 1
# main() function
def main():
# create parser
parser = argparse.ArgumentParser(description="LDR serial")
# add expected arguments
#parser.add_argument('--port', dest='port', required=True)
# parse args
args = parser.parse_args()
strPort = '/dev/tty.USA19H141P1.1'
#strPort = args.port
#print('reading from serial port %s...' % strPort)
# plot parameters
analogPlot = AnalogPlot(strPort, 100)
print('plotting data...')
while True:
try:
analogPlot.update()
time.sleep(.5)
except KeyboardInterrupt:
print('exiting.')
exit()
# call main
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment