From f493d6615e89b3793a39ac2672e76912c1bf2d61 Mon Sep 17 00:00:00 2001 From: anecdata <16617689+anecdata@users.noreply.github.com> Date: Sun, 13 Oct 2019 14:13:18 -0500 Subject: [PATCH 1/8] Add _SET_DIGITAL_READ_CMD command handler type and set_digital_read command handler. --- adafruit_esp32spi/adafruit_esp32spi.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/adafruit_esp32spi/adafruit_esp32spi.py b/adafruit_esp32spi/adafruit_esp32spi.py index 377c186..bb05485 100644 --- a/adafruit_esp32spi/adafruit_esp32spi.py +++ b/adafruit_esp32spi/adafruit_esp32spi.py @@ -100,6 +100,7 @@ _SET_PIN_MODE_CMD = const(0x50) _SET_DIGITAL_WRITE_CMD = const(0x51) _SET_ANALOG_WRITE_CMD = const(0x52) +_SET_DIGITAL_READ_CMD = const(0x53) _START_CMD = const(0xE0) _END_CMD = const(0xEE) @@ -779,6 +780,16 @@ def set_analog_write(self, pin, analog_value): if resp[0][0] != 1: raise RuntimeError("Failed to write to pin") + def set_digital_read(self, pin): + """ + Get the digital input value of pin. + + :param int pin: ESP32 GPIO pin to read from. + """ + resp = self._send_command_get_response(_SET_DIGITAL_READ_CMD, + ((pin,),))[0] + return resp[0] + def get_time(self): """The current unix timestamp""" if self.status == WL_CONNECTED: From 2eb122fc56482bb25b59ce990091f54d06c7b65e Mon Sep 17 00:00:00 2001 From: anecdata <16617689+anecdata@users.noreply.github.com> Date: Sun, 13 Oct 2019 21:33:09 -0500 Subject: [PATCH 2/8] Add _SET_ANALOG_READ_CMD command handler type and set_analog_read command handler. --- adafruit_esp32spi/adafruit_esp32spi.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/adafruit_esp32spi/adafruit_esp32spi.py b/adafruit_esp32spi/adafruit_esp32spi.py index bb05485..ffd0671 100644 --- a/adafruit_esp32spi/adafruit_esp32spi.py +++ b/adafruit_esp32spi/adafruit_esp32spi.py @@ -101,6 +101,7 @@ _SET_DIGITAL_WRITE_CMD = const(0x51) _SET_ANALOG_WRITE_CMD = const(0x52) _SET_DIGITAL_READ_CMD = const(0x53) +_SET_ANALOG_READ_CMD = const(0x54) _START_CMD = const(0xE0) _END_CMD = const(0xEE) @@ -790,6 +791,19 @@ def set_digital_read(self, pin): ((pin,),))[0] return resp[0] + def set_analog_read(self, pin): + """ + Get the analog input value of pin. + + :param int pin: ESP32 GPIO pin to read from. + """ + resp = self._send_command_get_response(_SET_ANALOG_READ_CMD, + ((pin,),))[0] + resp_a = struct.unpack(' Date: Thu, 17 Oct 2019 00:15:54 -0500 Subject: [PATCH 3/8] Digital: return boolean instead of 0 or 1. Analog: scaled return from 12-bit to 0-65535. --- adafruit_esp32spi/adafruit_esp32spi.py | 29 +++++++++++++++++++------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/adafruit_esp32spi/adafruit_esp32spi.py b/adafruit_esp32spi/adafruit_esp32spi.py index ffd0671..25dd0cb 100644 --- a/adafruit_esp32spi/adafruit_esp32spi.py +++ b/adafruit_esp32spi/adafruit_esp32spi.py @@ -133,6 +133,11 @@ WL_AP_LISTENING = const(7) WL_AP_CONNECTED = const(8) WL_AP_FAILED = const(9) + +ADC_ATTEN_DB_0 = const(0) +ADC_ATTEN_DB_2_5 = const(1) +ADC_ATTEN_DB_6 = const(2) +ADC_ATTEN_DB_11 = const(3) # pylint: enable=bad-whitespace class ESP_SPIcontrol: # pylint: disable=too-many-public-methods, too-many-instance-attributes @@ -783,26 +788,34 @@ def set_analog_write(self, pin, analog_value): def set_digital_read(self, pin): """ - Get the digital input value of pin. + Get the digital input value of pin. Returns the boolean value of the pin. :param int pin: ESP32 GPIO pin to read from. """ resp = self._send_command_get_response(_SET_DIGITAL_READ_CMD, ((pin,),))[0] - return resp[0] + if resp[0] == 0: + return False + elif resp[0] == 1: + return True + else: + raise ValueError("_SET_DIGITAL_READ response error", resp_[0]) - def set_analog_read(self, pin): + def set_analog_read(self, pin, atten=ADC_ATTEN_DB_11): """ - Get the analog input value of pin. + Get the analog input value of pin. Returns an int between 0 and 65536. :param int pin: ESP32 GPIO pin to read from. + :param int atten: attenuation constant """ resp = self._send_command_get_response(_SET_ANALOG_READ_CMD, - ((pin,),))[0] + ((pin,), (atten,))) resp_a = struct.unpack(' Date: Thu, 17 Oct 2019 01:23:27 -0500 Subject: [PATCH 4/8] Trying to fix pylint error. --- adafruit_esp32spi/adafruit_esp32spi.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/adafruit_esp32spi/adafruit_esp32spi.py b/adafruit_esp32spi/adafruit_esp32spi.py index 25dd0cb..3fbc50b 100644 --- a/adafruit_esp32spi/adafruit_esp32spi.py +++ b/adafruit_esp32spi/adafruit_esp32spi.py @@ -810,12 +810,12 @@ def set_analog_read(self, pin, atten=ADC_ATTEN_DB_11): """ resp = self._send_command_get_response(_SET_ANALOG_READ_CMD, ((pin,), (atten,))) - resp_a = struct.unpack(' Date: Thu, 17 Oct 2019 01:27:19 -0500 Subject: [PATCH 5/8] Fix typo. --- adafruit_esp32spi/adafruit_esp32spi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adafruit_esp32spi/adafruit_esp32spi.py b/adafruit_esp32spi/adafruit_esp32spi.py index 3fbc50b..34620f5 100644 --- a/adafruit_esp32spi/adafruit_esp32spi.py +++ b/adafruit_esp32spi/adafruit_esp32spi.py @@ -799,7 +799,7 @@ def set_digital_read(self, pin): elif resp[0] == 1: return True else: - raise ValueError("_SET_DIGITAL_READ response error", resp_[0]) + raise ValueError("_SET_DIGITAL_READ response error", resp[0]) def set_analog_read(self, pin, atten=ADC_ATTEN_DB_11): """ From bbf02122d71d9cb06a5f6403fb33ca14a7e6d551 Mon Sep 17 00:00:00 2001 From: anecdata <16617689+anecdata@users.noreply.github.com> Date: Thu, 17 Oct 2019 10:44:33 -0500 Subject: [PATCH 6/8] Error message more specific. --- adafruit_esp32spi/adafruit_esp32spi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adafruit_esp32spi/adafruit_esp32spi.py b/adafruit_esp32spi/adafruit_esp32spi.py index 34620f5..45fe738 100644 --- a/adafruit_esp32spi/adafruit_esp32spi.py +++ b/adafruit_esp32spi/adafruit_esp32spi.py @@ -812,7 +812,7 @@ def set_analog_read(self, pin, atten=ADC_ATTEN_DB_11): ((pin,), (atten,))) resp_analog = struct.unpack(' Date: Thu, 17 Oct 2019 11:09:05 -0500 Subject: [PATCH 7/8] Error message more specific. --- adafruit_esp32spi/adafruit_esp32spi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adafruit_esp32spi/adafruit_esp32spi.py b/adafruit_esp32spi/adafruit_esp32spi.py index 45fe738..47cea70 100644 --- a/adafruit_esp32spi/adafruit_esp32spi.py +++ b/adafruit_esp32spi/adafruit_esp32spi.py @@ -799,7 +799,7 @@ def set_digital_read(self, pin): elif resp[0] == 1: return True else: - raise ValueError("_SET_DIGITAL_READ response error", resp[0]) + raise ValueError("_SET_DIGITAL_READ response error: response is not boolean", resp[0]) def set_analog_read(self, pin, atten=ADC_ATTEN_DB_11): """ From ecb6eaa4b08c58dd2bf290ed5acac973d57d4efc Mon Sep 17 00:00:00 2001 From: anecdata <16617689+anecdata@users.noreply.github.com> Date: Thu, 17 Oct 2019 11:29:19 -0500 Subject: [PATCH 8/8] Check for compatible fw version. --- adafruit_esp32spi/adafruit_esp32spi.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/adafruit_esp32spi/adafruit_esp32spi.py b/adafruit_esp32spi/adafruit_esp32spi.py index 47cea70..da174f1 100644 --- a/adafruit_esp32spi/adafruit_esp32spi.py +++ b/adafruit_esp32spi/adafruit_esp32spi.py @@ -792,6 +792,10 @@ def set_digital_read(self, pin): :param int pin: ESP32 GPIO pin to read from. """ + # Verify nina-fw => 1.5.0 + fw_semver_maj = bytes(self.firmware_version).decode("utf-8")[2] + assert int(fw_semver_maj) >= 5, "Please update nina-fw to 1.5.0 or above." + resp = self._send_command_get_response(_SET_DIGITAL_READ_CMD, ((pin,),))[0] if resp[0] == 0: @@ -808,6 +812,10 @@ def set_analog_read(self, pin, atten=ADC_ATTEN_DB_11): :param int pin: ESP32 GPIO pin to read from. :param int atten: attenuation constant """ + # Verify nina-fw => 1.5.0 + fw_semver_maj = bytes(self.firmware_version).decode("utf-8")[2] + assert int(fw_semver_maj) >= 5, "Please update nina-fw to 1.5.0 or above." + resp = self._send_command_get_response(_SET_ANALOG_READ_CMD, ((pin,), (atten,))) resp_analog = struct.unpack('