From 58fa23b0ebaee67d65ed3516675fce06e7abf152 Mon Sep 17 00:00:00 2001 From: tpollina Date: Thu, 30 Jan 2020 19:42:39 -0800 Subject: [PATCH] Create mqtt_pump_focus_image.py --- scripts/mqtt_pump_focus_image.py | 178 +++++++++++++++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 scripts/mqtt_pump_focus_image.py diff --git a/scripts/mqtt_pump_focus_image.py b/scripts/mqtt_pump_focus_image.py new file mode 100644 index 0000000..3fafff8 --- /dev/null +++ b/scripts/mqtt_pump_focus_image.py @@ -0,0 +1,178 @@ +import paho.mqtt.client as mqtt +from picamera import PiCamera +from datetime import datetime, timedelta +import os +from adafruit_motor import stepper +from adafruit_motorkit import MotorKit +from time import sleep + +################################################################################ +kit = MotorKit() +pump_stepper = kit.stepper1 +pump_stepper.release() +focus_stepper = kit.stepper2 +focus_stepper.release() + +################################################################################ + +camera = PiCamera() +camera.resolution = (3280, 2464) +camera.iso = 60 +sleep(3) +camera.shutter_speed = 100 +camera.exposure_mode = 'off' +g = camera.awb_gains +camera.awb_mode = 'off' +camera.awb_gains = g +nb_frame=200 + +################################################################################ +message = '' +topic = '' +count='' + +################################################################################ + +def on_connect(client, userdata, flags, rc): + print("Connected! - " + str(rc)) + client.subscribe("actuator/#") + +def on_subscribe(client, obj, mid, granted_qos): + print("Subscribed! - "+str(mid)+" "+str(granted_qos)) + +def on_message(client, userdata, msg): + print(msg.topic+" "+str(msg.qos)+" "+str(msg.payload)) + global message + global topic + global count + message=str(msg.payload.decode()) + topic=msg.topic.split("/")[1] + count=0 + +def on_log(client, obj, level, string): + print(string) + +################################################################################ +client = mqtt.Client() +client.connect("127.0.0.1",1883,60) +client.on_connect = on_connect +client.on_subscribe = on_subscribe +client.on_message = on_message +client.on_log = on_log +client.loop_start() + +################################################################################ +while True: + +################################################################################ + if (topic=="pump"): + + direction=message.split(" ")[0] + flowrate=message.split(" ")[1] + volume=message.split(" ")[2] + nb_step=int(volume)*507 + duration=(int(volume)*60)/float(flowrate) + delay=(duration/nb_step)-0.005 + client.publish("receiver/pump", "Start"); + + while True: + count+=1 + print(count,nb_step) + print("pump_stepper.onestep(direction=+action+, style=stepper.DOUBLE") + sleep(delay) + + if topic!="pump": + pump_stepper.release() + print("The pump has been interrompted.") + client.publish("receiver/pump", "Interrompted"); + break + + if count>nb_step: + pump_stepper.release() + print("The pumping is done.") + topic="wait" + client.publish("receiver/pump", "Done"); + break + +################################################################################ + + elif (topic=="focus"): + + direction=message.split(" ")[0] + nb_step=int(message.split(" ")[1]) + client.publish("receiver/focus", "Start"); + + while True: + count+=1 + print(count,nb_step) + print("stage.onestep(direction=+action+, style=stepper.microstep") + sleep(0.001) + + if topic!="focus": + pump_focus.release() + print("The stage has been interrompted.") + client.publish("receiver/focus", "Interrompted"); + break + + if count>nb_step: + pump_focus.release() + print("The focusing is done.") + topic="wait" + client.publish("receiver/focus", "Done"); + break + +################################################################################ + + elif (topic=="image"): + + delay=int(message.split(" ")[0]) + volume_before=int(message.split(" ")[1]) + nb_frame=int(message.split(" ")[2]) + wait_duration=int(message.split(" ")[3]) + path=str(message.split(" ")[4]) + + #sleep a duration before to start + sleep(delay) + + client.publish("receiver/image", "Start"); + + #flushing before to begin + nb_step=int(volume)*507 + + for i in range(nb_step): + print("pump_stepper.onestep(direction=+action+, style=stepper.DOUBLE") + time.sleep(0.01) + + directory = os.path.join(path, "PlanktonScope") + os.makedirs(directory, exist_ok=True) + + + path_date = os.path.join(directory, datetime.now().strftime("%m_%d_%Y")) + os.makedirs(path_date, exist_ok=True) + + path_hour = os.path.join(path_date,datetime.now().strftime("%H")) + os.makedirs(path_hour, exist_ok=True) + + while True: + count+=1 + print(count,nb_frame) + + filename = os.path.join(path_hour,datetime.now().strftime("%M_%S_%f")+".jpg") + camera.capture(filename) + print("pump_stepper.onestep(direction=+action+, style=stepper.DOUBLE") + + if topic!="image": + pump_focus.release() + print("The imaging has been interrompted.") + client.publish("receiver/image", "Interrompted"); + break + + if count>nb_frame: + print("The imaging is done.") + topic="wait" + client.publish("receiver/image", "Done"); + break + + else: + print("Waiting") + sleep(1)