Internetové radio - Raspberry pi - problém s lcdproc

marty

Re:Internetové radio - Raspberry pi - problém s lcdproc
« Odpověď #30 kdy: 25. 12. 2017, 18:33:25 »
Tak jiný driver jsem nikde nenašel. Takže jestli je tenhle určený pro jinou desku, jako že asi jo (dalším lidem ten návod taky nefungoval) tak se budu opravdu muset vrátit k tomu pythonu. Ale podle všeho by to mělo normálně fungovat.


marty

Re:Internetové radio - Raspberry pi - problém s lcdproc
« Odpověď #31 kdy: 25. 12. 2017, 18:37:31 »
Jinak ten script pro změnu hlásí

Typeerror: 'bytes' object is not callable.

Tomáš Bláha

Re:Internetové radio - Raspberry pi - problém s lcdproc
« Odpověď #32 kdy: 25. 12. 2017, 18:47:16 »
Tj. jsi postupoval podle návodu zde? http://www.pablox.net/index.php?option=com_content&task=view&id=130&Itemid=1 Kdyžtak proběhni věci, které se tam zmiňují, jako např. rozdíl mezi první a druhou revizí desky. Druhá věc, spouštíš to pod uživatelem root? Není problém v oprávnění?

Používáš Python verze 2 nebo 3?

Tomáš Bláha

Re:Internetové radio - Raspberry pi - problém s lcdproc
« Odpověď #33 kdy: 25. 12. 2017, 18:55:03 »
Typeerror: 'bytes' object is not callable. - No když nevím, jakou změnu jsi udělal a na jakém řádku to tu chybu hlásí, tak těžko radit...

Na https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=161806 pro raspi zero doporučují
http://sourceforge.net/p/lcdproc/patches/_discuss/thread/4c659fe3/b8f3/attachment/hd44780.so, rozhodně jsou odlišné...

marty

Re:Internetové radio - Raspberry pi - problém s lcdproc
« Odpověď #34 kdy: 25. 12. 2017, 19:01:36 »
Nn, postupoval jsem podle návodu, který jsem zmínil v prvním příspěvku.

Tenhle návod jsem sice neviděl, nicméně to, co je v něm popsáno, jsem už zkoušel, bez úspěchu.

Mám revizi č.2.

Pod rootem mám spouštět co ? Teď nechápu

Python verze 2.7.13


marty

Re:Internetové radio - Raspberry pi - problém s lcdproc
« Odpověď #35 kdy: 25. 12. 2017, 19:03:00 »
Typeerror: 'bytes' object is not callable. - No když nevím, jakou změnu jsi udělal a na jakém řádku to tu chybu hlásí, tak těžko radit...

Přísahám, že jsem na to nesáhnul. Leda, že by přes to přeběhla kočka.

Tomáš Bláha

Re:Internetové radio - Raspberry pi - problém s lcdproc
« Odpověď #36 kdy: 25. 12. 2017, 19:08:51 »
No v Pythonu nejsem moc kovanej, možná zkusit níže uvedené, mě to takovou chybu nehlásí.
Kód: [Vybrat]
message = message.ljust(LCD_WIDTH,' '.encode('utf-8'))
Spouštět jsem měl na mysli ten LCDd -f -r 5 -s 0, zkrátka přemýšlím, proč říká, že Failed to set up gpio. Zkusil jsi tu odlišnou verzi hd44780.so dát do /home/pi/hd44780.so? Změní se něco? Ptám se proto, že to byl první návod, který na mě vypadnul, když jsem hledal hd44780 raspberry pi zero

Python chyba - proto se ptám, kterou verzí pythonu to spouštíš, nemohlo se stát, že to pouštíš někdy pod dvojkou a někdy pod trojkou? Jsou tam nějaké odlišnosti, třeba v trojce jsou nativní unicode řetězce. Já Python používám hodně málo, tak si jistý nejsem.

marty

Re:Internetové radio - Raspberry pi - problém s lcdproc
« Odpověď #37 kdy: 25. 12. 2017, 19:19:56 »
S tím novým ovladačem to hlásí
Kód: [Vybrat]
Server running in foreground
Listening for queries on 127.0.0.1:13666
screenlist_init()
driver_load(name="hd44780", filename="/home/pi/hd44780.so")
HD44780: using ConnectionType: raspberrypi
hd44780: Using hd44780_default charmap
check_board_rev: This board is not recognized as a Raspberry Pi! Found:BCM2835
Driver [hd44780] init failed, return code -1
Module /home/pi/hd44780.so could not be loaded
Could not load driver hd44780
There is no output driver
Critical error while initializing, abort.

Jinou verzi pythonu, než tu zmiňovanou tam nemám.

A jestli to spuštím pod rootem nebo ne, nemá vliv.

marty

Re:Internetové radio - Raspberry pi - problém s lcdproc
« Odpověď #38 kdy: 25. 12. 2017, 19:27:11 »
Jinak zkoušel jsem connection type =rpi/raspberrypi - nemá vliv.


Tomáš Bláha

Re:Internetové radio - Raspberry pi - problém s lcdproc
« Odpověď #39 kdy: 25. 12. 2017, 19:37:22 »
Zkusil jsem to pod dvojkou i trojkou a žádnou podobnou chybovou hlášku nedostávám. Samozřejmě nemám hardware, tak to nemůžu pustit celé, ale stejně nic podobného se mi nestává. Kdybys to nevyřešil tak můžeš soubor zazipovat, aby se zachoval na bajt beze změny a někde ho vystavit a přiložit i přesný traceback od pythonu.

Na https://github.com/lcdproc/lcdproc/issues/86 jsem našel zmínku, že to nefunguje a že se má u Zero použít ConnectionType=gpio v konfiguraci LCDd. Je to takové hádání.

marty

Re:Internetové radio - Raspberry pi - problém s lcdproc
« Odpověď #40 kdy: 25. 12. 2017, 19:40:26 »
Nebo jinak, můžeš sem hodit ten tvůj soubor ? jen pro jistotu.

gpio zkusím

marty

Re:Internetové radio - Raspberry pi - problém s lcdproc
« Odpověď #41 kdy: 25. 12. 2017, 19:46:44 »
unknown connection type  :-\


marty

Re:Internetové radio - Raspberry pi - problém s lcdproc
« Odpověď #42 kdy: 25. 12. 2017, 20:00:35 »
Kdyby se tady náhodou objevil někdo, pro koho je python hračka, potřebuju do tohohle scriptu

Kód: [Vybrat]
import smbus
import time

# Define some device parameters
I2C_ADDR  = 0x27 # I2C device address, if any error, change this address to 0x3f
LCD_WIDTH = 16   # Maximum characters per line

# Define some device constants
LCD_CHR = 1 # Mode - Sending data
LCD_CMD = 0 # Mode - Sending command

LCD_LINE_1 = 0x80 # LCD RAM address for the 1st line
LCD_LINE_2 = 0xC0 # LCD RAM address for the 2nd line
LCD_LINE_3 = 0x94 # LCD RAM address for the 3rd line
LCD_LINE_4 = 0xD4 # LCD RAM address for the 4th line

LCD_BACKLIGHT  = 0x08  # On
#LCD_BACKLIGHT = 0x00  # Off

ENABLE = 0b00000100 # Enable bit

# Timing constants
E_PULSE = 0.0005
E_DELAY = 0.0005

#Open I2C interface
#bus = smbus.SMBus(0)  # Rev 1 Pi uses 0
bus = smbus.SMBus(1) # Rev 2 Pi uses 1

def lcd_init():
  # Initialise display
  lcd_byte(0x33,LCD_CMD) # 110011 Initialise
  lcd_byte(0x32,LCD_CMD) # 110010 Initialise
  lcd_byte(0x06,LCD_CMD) # 000110 Cursor move direction
  lcd_byte(0x0C,LCD_CMD) # 001100 Display On,Cursor Off, Blink Off
  lcd_byte(0x28,LCD_CMD) # 101000 Data length, number of lines, font size
  lcd_byte(0x01,LCD_CMD) # 000001 Clear display
  time.sleep(E_DELAY)

def lcd_byte(bits, mode):
  # Send byte to data pins
  # bits = the data
  # mode = 1 for data
  #        0 for command

  bits_high = mode | (bits & 0xF0) | LCD_BACKLIGHT
  bits_low = mode | ((bits<<4) & 0xF0) | LCD_BACKLIGHT

  # High bits
  bus.write_byte(I2C_ADDR, bits_high)
  lcd_toggle_enable(bits_high)

  # Low bits
  bus.write_byte(I2C_ADDR, bits_low)
  lcd_toggle_enable(bits_low)

def lcd_toggle_enable(bits):
  # Toggle enable
  time.sleep(E_DELAY)
  bus.write_byte(I2C_ADDR, (bits | ENABLE))
  time.sleep(E_PULSE)
  bus.write_byte(I2C_ADDR,(bits & ~ENABLE))
  time.sleep(E_DELAY)

def lcd_string(message,line):
  # Send string to display

  message = message.ljust(LCD_WIDTH," ")

  lcd_byte(line, LCD_CMD)

  for i in range(LCD_WIDTH):
    lcd_byte(ord(message[i]),LCD_CHR)

def main():
  # Main program block

  # Initialise display
  lcd_init()

  while True:

    # Send some test
    lcd_string("Nazev stanice",LCD_LINE_1)
    lcd_string("Nazev interpreta",LCD_LINE_2)

    time.sleep(3)

if __name__ == '__main__':

  try:
    main()
  except KeyboardInterrupt:
    pass
  finally:
    lcd_byte(0x01, LCD_CMD)

Zakomponovat místo zobrazování toho obyčejného textu tenhle výstup
Kód: [Vybrat]
echo "currentsong" | nc localhost 6600 | grep -e "^Title: " -e "^Name: "

Tomáš Bláha

Re:Internetové radio - Raspberry pi - problém s lcdproc
« Odpověď #43 kdy: 25. 12. 2017, 20:01:56 »
Tak můžu, ale je v něm zaremované všechno kolem odesílání dat. Spouštím to v pythonu 2 i 3 a nic to nepše, tj. funguje - žádná chybová hláška.
Kód: [Vybrat]
#import smbus
import time
import subprocess
# Define some device parameters
I2C_ADDR  = 0x27 # I2C device address, if any error, change this address to 0x3f
LCD_WIDTH = 16   # Maximum characters per line

# Define some device constants
LCD_CHR = 1 # Mode - Sending data
LCD_CMD = 0 # Mode - Sending command

LCD_LINE_1 = 0x80 # LCD RAM address for the 1st line
LCD_LINE_2 = 0xC0 # LCD RAM address for the 2nd line
LCD_LINE_3 = 0x94 # LCD RAM address for the 3rd line
LCD_LINE_4 = 0xD4 # LCD RAM address for the 4th line

LCD_BACKLIGHT  = 0x08  # On
#LCD_BACKLIGHT = 0x00  # Off

ENABLE = 0b00000100 # Enable bit

# Timing constants
E_PULSE = 0.0005
E_DELAY = 0.0005

#Open I2C interface
#bus = smbus.SMBus(0)  # Rev 1 Pi uses 0
#bus = smbus.SMBus(1) # Rev 2 Pi uses 1

def lcd_init():
  # Initialise display
  lcd_byte(0x33,LCD_CMD) # 110011 Initialise
  lcd_byte(0x32,LCD_CMD) # 110010 Initialise
  lcd_byte(0x06,LCD_CMD) # 000110 Cursor move direction
  lcd_byte(0x0C,LCD_CMD) # 001100 Display On,Cursor Off, Blink Off
  lcd_byte(0x28,LCD_CMD) # 101000 Data length, number of lines, font size
  lcd_byte(0x01,LCD_CMD) # 000001 Clear display
  time.sleep(E_DELAY)

def lcd_byte(bits, mode):
  # Send byte to data pins
  # bits = the data
  # mode = 1 for data
  #        0 for command

  bits_high = mode | (bits & 0xF0) | LCD_BACKLIGHT
  bits_low = mode | ((bits<<4) & 0xF0) | LCD_BACKLIGHT

  # High bits
  #bus.write_byte(I2C_ADDR, bits_high)
  lcd_toggle_enable(bits_high)

  # Low bits
  #bus.write_byte(I2C_ADDR, bits_low)
  lcd_toggle_enable(bits_low)

def lcd_toggle_enable(bits):
  # Toggle enable
  time.sleep(E_DELAY)
  #bus.write_byte(I2C_ADDR, (bits | ENABLE))
  time.sleep(E_PULSE)
  #bus.write_byte(I2C_ADDR,(bits & ~ENABLE))
  time.sleep(E_DELAY)

def lcd_string(message,line):
  # Send string to display

  message = message.ljust(LCD_WIDTH," ")

  lcd_byte(line, LCD_CMD)

  for i in range(LCD_WIDTH):
    lcd_byte(ord(message[i]),LCD_CHR)

def main():
  # Main program block

  # Initialise display
  lcd_init()

  while True:
    #text = subprocess.check_output('echo "currentsong" | nc localhost 6600 | grep -e "^Title: "', shell=True)
    text = "bla"
    # Send some test
    lcd_string(text,LCD_LINE_1)
   


if __name__ == '__main__':

  try:
    main()
  except KeyboardInterrupt:
    pass
  finally:
    lcd_byte(0x01, LCD_CMD)

marty

Re:Internetové radio - Raspberry pi - problém s lcdproc
« Odpověď #44 kdy: 25. 12. 2017, 20:11:12 »
Jaj, tak connection type musí být i2c. Takže tohle vyřešené. Driver naloadoval a LCD bliká jak o život.

Co teď ?