luma.examples icon indicating copy to clipboard operation
luma.examples copied to clipboard

ht1621 demo error

Open thijstriemstra opened this issue 8 years ago • 13 comments

Error when trying the demo:

$ python examples/sevensegment_demo.py -d ht1621
/home/rpitest/pi-test/luma.core/luma/core/interface/serial.py:164: RuntimeWarning: This channel is already in use, continuing anyway.  Use GPIO.setwarnings(False) to disable warnings.
  self._gpio.setup(pin, self._gpio.OUT)
Traceback (most recent call last):
  File "luma.examples/examples/sevensegment_demo.py", line 115, in <module>
    main()
  File "luma.examples/examples/sevensegment_demo.py", line 70, in main
    device = get_device()
  File "/home/rpitest/pi-test/luma.examples/examples/demo_opts.py", line 61, in get_device
    device = cmdline.create_device(args)
  File "/home/rpitest/pi-test/luma.core/luma/core/cmdline.py", line 176, in create_device
    device = Device(spi, **vars(args))
TypeError: __init__() got multiple values for argument 'gpio'

thijstriemstra avatar Dec 20 '17 17:12 thijstriemstra

Just refreshing myself with that driver code and noticed your comment - https://github.com/rm-hull/luma.lcd/pull/45#issuecomment-296324693

Presume you're on python3?

rm-hull avatar Dec 21 '17 22:12 rm-hull

Yep.

thijstriemstra avatar Dec 22 '17 09:12 thijstriemstra

So it looks like the ht1621 doesn't quite conform to the same interface as the other drivers, and because gpio is marked as a positional argument, but it looks like the cmdline parser passes it as a keyword argument, hence the error you reported.

Presumably if you write a simple test program as described in https://luma-lcd.readthedocs.io/en/latest/python-usage.html#seven-segment-drivers, the driver works?

I think one possible 'fix' for this would be to change the constructor to be:

    def __init__(self, serial_interface=None, width=6, rotate=0, WR=11, DAT=10, CS=8, **kwargs):
        super(ht1621, self).__init__(luma.lcd.const.ht1621, noop())
        self.capabilities(width, 8, rotate)
        self.segment_mapper = dot_muncher
        self._gpio = kwargs.get('gpio') or self.__rpi_gpio__()

This should be compatible with the cmdline/demo-opts and continue to work for direct invocation, but I'm not in a position to test this at the moment, could you try it?

rm-hull avatar Dec 22 '17 23:12 rm-hull

As to your other comment, in the headline about a missing config: as everything is defaulted in the constructor, the only thing a config file would contain is:

-d ht1621

We can add it if you like?

rm-hull avatar Dec 22 '17 23:12 rm-hull

Presumably if you write a simple test program as described in https://luma-lcd.readthedocs.io/en/latest/python-usage.html#seven-segment-drivers, the driver works?

Yep!

but I'm not in a position to test this at the moment, could you try it?

Same here, but will do.

We can add it if you like?

Sound good (for newbies).

thijstriemstra avatar Dec 23 '17 13:12 thijstriemstra

Created #75 for the config file, still need to test the suggested fix for that error.

thijstriemstra avatar Dec 27 '17 16:12 thijstriemstra

Closed too soon, that PR shouldn't have closed this.

thijstriemstra avatar Dec 27 '17 18:12 thijstriemstra

@rm-hull tried your fix and getting the same error:

$ python examples/sevensegment_demo.py -d ht1621
Version: luma.lcd 1.0.3 (luma.core 1.2.1)
Display: ht1621
Interface: i2c
Dimensions: 128 x 64
------------------------------------------------------------
/home/rpitest/pi-test/luma.core/luma/core/interface/serial.py:164: RuntimeWarning: This channel is already in use, continuing anyway.  Use GPIO.setwarnings(False) to disable warnings.
  self._gpio.setup(pin, self._gpio.OUT)
Traceback (most recent call last):
  File "examples/sevensegment_demo.py", line 121, in <module>
    main()
  File "examples/sevensegment_demo.py", line 71, in main
    device = get_device()
  File "/home/rpitest/pi-test/luma.examples/examples/demo_opts.py", line 63, in get_device
    device = cmdline.create_device(args)
  File "/home/rpitest/pi-test/luma.core/luma/core/cmdline.py", line 176, in create_device
    device = Device(spi, **vars(args))
TypeError: __init__() got multiple values for argument 'gpio'

the traceback also doesn't refer to luma.lcd specifically, hence the fix doesn't work?

patch I used:

diff --git a/luma/lcd/device.py b/luma/lcd/device.py
index a9f518a..b80df97 100644
--- a/luma/lcd/device.py
+++ b/luma/lcd/device.py
@@ -270,7 +270,7 @@ class ht1621(device):
         super(ht1621, self).__init__(luma.lcd.const.ht1621, noop())
         self.capabilities(width, 8, rotate)
         self.segment_mapper = dot_muncher
-        self._gpio = gpio or self.__rpi_gpio__()
+        self._gpio = kwargs.get('gpio') or self.__rpi_gpio__()
 
         self._WR = self._configure(WR)
         self._DAT = self._configure(DAT)

thijstriemstra avatar Dec 30 '17 20:12 thijstriemstra

Also the constructor in the suggested fix different:

-def __init__(self, gpio=None, width=6, rotate=0, WR=11, DAT=10, CS=8, **kwargs):
+def __init__(self, serial_interface=None, width=6, rotate=0, WR=11, DAT=10, CS=8, **kwargs):

rm-hull avatar Dec 30 '17 21:12 rm-hull

ah! let me check.

That got rid of the error but the demo prints weird characters..

$ python examples/sevensegment_demo.py -d ht1621
Version: luma.lcd 1.0.3 (luma.core 1.2.1)
Display: ht1621
Interface: i2c
Dimensions: 128 x 64
------------------------------------------------------------
/home/rpitest/pi-test/luma.core/luma/core/interface/serial.py:164: RuntimeWarning: This channel is already in use, continuing anyway.  Use GPIO.setwarnings(False) to disable warnings.
  self._gpio.setup(pin, self._gpio.OUT)
/home/rpitest/pi-test/luma.lcd/luma/lcd/aux.py:36: RuntimeWarning: This channel is already in use, continuing anyway.  Use GPIO.setwarnings(False) to disable warnings.
  self._gpio.setup(self._gpio_LIGHT, self._gpio.OUT)
Simple text...
Digit slicing

thijstriemstra avatar Dec 30 '17 21:12 thijstriemstra

If the demo is printing weird characters then that implies the segments on your board are wired up differently, and that we need a different segment mapper that that provided: https://github.com/rm-hull/luma.lcd/blob/master/luma/lcd/segment_mapper.py

I remember having to implement a translation layer for the NeoSegments (see https://github.com/rm-hull/luma.led_matrix/blob/master/luma/led_matrix/device.py#L512-L538) - maybe we need something similar here?

rm-hull avatar Jan 27 '18 16:01 rm-hull

@rm-hull you have a copy of this device as well right? Could you give it a try at some point?

thijstriemstra avatar Jan 27 '18 18:01 thijstriemstra

ps. using suggested code (and not the examples) worked fine for me (only tested numerals though).

thijstriemstra avatar Jan 27 '18 18:01 thijstriemstra