From f104b5fb888c23007054fc074843cdad15520a37 Mon Sep 17 00:00:00 2001 From: Anton Tetov <anton@tetov.se> Date: Sun, 12 Jun 2022 12:49:14 +0200 Subject: [PATCH] gripper commands over farmbot added --- src/client.py | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/src/client.py b/src/client.py index fbb44f6..22f3460 100755 --- a/src/client.py +++ b/src/client.py @@ -13,6 +13,7 @@ MAX_X = 2400 MAX_Y = 1200 MAX_Z = 469 # TODO test this one! + def coord(x, y, z): return {"kind": "coordinate", "args": {"x": x, "y": y, "z": z}} # 返回json 嵌套对象 @@ -24,6 +25,50 @@ def move_request(x, y, z): "offset": coord(0, 0, 0), "speed": 100}}]} +def read_pin_request(pin_number, pin_mode="digital"): + modes = {"digital": 0, "analog": 1} + + if pin_mode != "digital": + raise NotImplementedError() + + return {"kind": "rpc_request", + "args": {"label": ""}, + "body": [{"kind": "read_pin" + "args": { + "label": "pin" + str(pin_number), + "pin_mode": modes[pin_mode] or (modes["digital"]), + "pin_number": pin_number + } + +def write_pin_request(pin_number, pin_value, pin_mode="digital"): + modes = {"digital": 0, "analog": 1} + + if pin_mode != "digital": + raise NotImplementedError() + + return {"kind": "rpc_request", + "args": {"label": ""}, + "body": [{"kind": "write_pin", + "args": { + "pin_mode": modes[pin_mode] or (modes["digital"]), + "pin_number": pin_number, + "pin_value": pin_value + } + } + ] + } + +def toggle_pin_request(pin_number) + return {"kind": "rpc_request", + "args": {"label": ""}, + "body": [{"kind": "toggle_pin", + "args": { + "pin_number": pin_number, + } + } + ] + } + def take_photo_request(): return {"kind": "rpc_request", "args": {"label": ""}, #label空着是为了在blocking_request中填上uuid,唯一识别码 @@ -75,6 +120,18 @@ class FarmbotClient(object): status_ok = self._blocking_request(take_photo_request()) logging.info("TAKE_PHOTO [%s]", status_ok) + def read_pin(self, pin_number, pin_mode="digital"): + status_ok = self._blocking_request(read_pin_request(pin_number, pin_mode=pin_mode)) + logging.info(f"READ PIN (pin_number: {pin_number}) [{status_ok}]") + + def write_pin(self, pin_number, pin_value, pin_mode="digital"): + status_ok = self._blocking_request(write_pin_request(pin_number, pin_value, pin_mode=pin_mode)) + logging.info(f"WRITE PIN (pin_number: {pin_number}, pin_value: {pin_value}) [{status_ok}]") + + def toggle_pin(self, pin_number): + status_ok = self._blocking_request(toggle_pin_request(pin_number)) + logging.info(f"TOGGLE PIN (pin_number: {pin_number}) [{status_ok}]") + def _blocking_request(self, request, retries_remaining=3): if retries_remaining==0: logging.error("< blocking request [%s] OUT OF RETRIES", request) #尝试3次,然后在日志中记录错误 -- GitLab