Open thijstriemstra opened 6 years ago
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?
Yep.
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?
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?
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).
Created #75 for the config file, still need to test the suggested fix for that error.
Closed too soon, that PR shouldn't have closed this.
@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)
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):
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
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 you have a copy of this device as well right? Could you give it a try at some point?
ps. using suggested code (and not the examples) worked fine for me (only tested numerals though).
Error when trying the demo: