Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ht1621 demo error #72

Open
thijstriemstra opened this issue Dec 20, 2017 · 13 comments
Open

ht1621 demo error #72

thijstriemstra opened this issue Dec 20, 2017 · 13 comments
Assignees
Labels

Comments

@thijstriemstra
Copy link
Collaborator

thijstriemstra commented Dec 20, 2017

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'
@rm-hull
Copy link
Owner

rm-hull commented Dec 21, 2017

Just refreshing myself with that driver code and noticed your comment - rm-hull/luma.lcd#45 (comment)

Presume you're on python3?

@thijstriemstra
Copy link
Collaborator Author

Yep.

@rm-hull
Copy link
Owner

rm-hull commented Dec 22, 2017

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
Copy link
Owner

rm-hull commented Dec 22, 2017

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?

@thijstriemstra
Copy link
Collaborator Author

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 added a commit that referenced this issue Dec 27, 2017
@thijstriemstra
Copy link
Collaborator Author

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

@thijstriemstra thijstriemstra changed the title ht1621 conf missing ht1621 demo error Dec 27, 2017
@thijstriemstra
Copy link
Collaborator Author

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

@thijstriemstra
Copy link
Collaborator Author

thijstriemstra commented Dec 30, 2017

@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)

@rm-hull
Copy link
Owner

rm-hull commented Dec 30, 2017

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):

@thijstriemstra
Copy link
Collaborator Author

thijstriemstra commented Dec 30, 2017

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

@rm-hull
Copy link
Owner

rm-hull commented Jan 27, 2018

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?

@thijstriemstra
Copy link
Collaborator Author

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

@thijstriemstra
Copy link
Collaborator Author

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants