Fórum Root.cz

Hlavní témata => Distribuce => Téma založeno: marty 24. 12. 2017, 17:41:59

Název: Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 24. 12. 2017, 17:41:59
Ahoj, stavím internetové radio z raspberry pi zero w ke kterému mám připojený klasický 1602 LCD s i2c modulem. Přehrávání rádia chci mít řešené přes mpd jako v tomto návodu : https://andypi.co.uk/2013/09/19/andypi-lcd-with-raspyfi/

Bohužel jsem ztroskotal na nastavení zobrazení právě přehrávané skladby/rádia pomocí lcdproc a mpdlcd

Všechny potřebné ovladače mám nainstalované (respektive, postupoval jsem krok po kroku podle návodu).

Pokud zadám
Kód: [Vybrat]
sudo mpdlcd --no-syslog vyleze hláška

Kód: [Vybrat]
WARNING mpdlcd Connection failed: [Errno 111] Connection refused
WARNING mpdlcd Connection failed: [Errno 111] Connection refused
WARNING mpdlcd Connection failed: [Errno 111] Connection refused
ERROR mpdlcd Unable to connect to lcdproc localhost:13666.

Máte někdo zkušenost s tímhle programem ?

Přikládám svoje nastavení.

LCDd.conf
Kód: [Vybrat]
## This file was written by cme command.
## You can run 'cme edit lcdproc' to modify this file.
## You may also modify the content of this file with your favorite editor.

# LCDd.conf -- configuration file for the LCDproc server daemon LCDd
#
# This file contains the configuration for the LCDd server.
#
# The format is ini-file-like. It is divided into sections that start at
# markers that look like [section]. Comments are all line-based comments,
# and are lines that start with '#' or ';'.
#
# The server has a 'central' section named [server]. For the menu there is
# a section called [menu]. Further each driver has a section which
# defines how the driver acts.
#
# The drivers are activated by specifying them in a driver= line in the
# server section, like:
#
#   Driver=curses
#
# This tells LCDd to use the curses driver.
# The first driver that is loaded and is capable of output defines the
# size of the display. The default driver to use is curses.
# If the driver is specified using the -d <driver> command line option,
# the Driver= options in the config file are ignored.
#
# The drivers read their own options from the respective sections.
# Andy Pi version2 with GPIO14 and GPIO18 swapped to enable same pins for use with Raspbian


[server]
# Tells the driver to bind to the given interface
Bind=127.0.0.1
# Tells the server to load the given drivers. Multiple lines can be given.
# The name of the driver is case sensitive and determines the section
# where to look for further configuration options of the specific driver
# as well as the name of the dynamic driver module to load at runtime.
# The latter one can be changed by giving a File= directive in the
# driver specific section.
#
# The following drivers are supported:
#   bayrad, CFontz, CFontz633, CFontzPacket, curses, CwLnx, ea65,
#   EyeboxOne, g15, glcdlib, glk, hd44780, icp_a106, imon, imonlcd,
#   IOWarrior, irman, joy, lb216, lcdm001, lcterm, lirc, lis, MD8800,
#   mdm166a, ms6931, mtc_s16209x, MtxOrb, mx5000, NoritakeVFD, picolcd,
#   pyramid, sed1330, sed1520, serialPOS, serialVFD, shuttleVFD, sli,
#   stv5730, svga, t6963, text, tyan, ula200, xosd
Driver=hd44780
# Where can we find the driver modules ?
# IMPORTANT: Make sure to change this setting to reflect your
#            specific setup! Otherwise LCDd won't be able to find
#            the driver modules and will thus not be able to
#            function properly.
# NOTE: Always place a slash as last character !
DriverPath=/home/pi/lcdproc/
NextScreenKey=Right
# Listen on this specified port; defaults to 13666.
Port=13666
PrevScreenKey=Left
ReportToSyslog=yes
# If set to no, LCDd will start with screen rotation disabled. This has the
# same effect as if the ToggleRotateKey had been pressed. Rotation will start
# if the ToggleRotateKey is pressed. Note that this setting does not turn off
# priority sorting of screens. [default: on; legal: on, off]
# AutoRotate=no
# If yes, the the serverscreen will be rotated as a usual info screen. If no,
# it will be a background screen, only visible when no other screens are
# active. The special value 'blank' is similar to no, but only a blank screen
# is displayed. [default: on; legal: on, off, blank]
ServerScreen=on
# Set master backlight setting. If set to 'open' a client may control the
# backlight for its own screens (only). [default: open; legal: off, open, on]
# Backlight=open
# Set master heartbeat setting. If set to 'open' a client may control the
# heartbeat for its own screens (only). [default: open; legal: off, open, on]
# Heartbeat=open
# set title scrolling speed [default: 10; legal: 0-10]
# TitleSpeed=10
# The "...Key=" lines define what the server does with keypresses that
# don't go to any client. The ToggleRotateKey stops rotation of screens, while
# the PrevScreenKey and NextScreenKey go back / forward one screen (even if
# rotation is disabled.
# Assign the key string returned by the driver to the ...Key setting. These
# are the defaults:
ToggleRotateKey=Enter
# Sets the reporting level; defaults to 2 (warnings and errors only).
# ReportLevel=3
# Should we report to syslog instead of stderr ? [default: no; legal: yes, no]
# ReportToSyslog=yes
# User to run as.  LCDd will drop its root privileges, if any,
# and run as this user instead.
User=any
# The server will stay in the foreground if set to true.
# Foreground=no
# Hello message: each entry represents a display line; default: builtin
# Hello="  Welcome to"
# Hello="   LCDproc!"
# GoodBye message: each entry represents a display line; default: builtin
# GoodBye="Thanks for using"
# GoodBye="   LCDproc!"
# Sets the default time in seconds to displays a screen.
WaitTime=5

[hd44780]
# Set brightness of the backlight (lcd2usb only) [default: 0; legal: 0 - 1000]
# Brightness=1000
# OffBrightness=0
# If you have a switchable backlight.
Backlight=yes
Brightness=800
# For multiple combined displays: how many lines does each display have.
# Vspan=2,2 means both displays have 2 lines.
# vspan=2,2
# If you have an HD66712, a KS0073 or another 'almost HD44780-compatible',
# set this flag to get into extended mode (4-line linear).
# ExtendedMode=yes
# In extended mode, on some controllers like the ST7036 (in 3 line mode)
# the next line in DDRAM won't start 0x20 higher. [default: 0x20]
# LineAddress=0x10
# Character map to to map ISO-8859-1 to the LCD's character set
# [default: hd44780_default; legal: hd44780_default, hd44780_euro, ea_ks0073,
# sed1278f_0b, hd44780_koi8_r, hd44780_cp1251, hd44780_8859_5, upd16314 ]
# (hd44780_koi8_r, hd44780_cp1251, hd44780_8859_5 and upd16314 are possible if
# compiled with additional charmaps)
CharMap=hd44780_default
# Select what type of connection. See documentation for types.
ConnectionType=rpi
# Set the initial contrast (bwctusb and lcd2usb) [default: 500; legal: 0 - 1000]
Contrast=800
# If your display is slow and cannot keep up with the flow of data from
# LCDd, garbage can appear on the LCDd. Set this delay factor to 2 or 4
# to increase the delays. Default: 1.
# DelayMult=2
# Some displays (e.g. vdr-wakeup) need a message from the driver to that it
# is still alive. When set to a value bigger then null the character in the
# upper left corner is updated every <KeepAliveDisplay> seconds. Default: 0.
# KeepAliveDisplay=0
# If you experience occasional garbage on your display you can use this
# option as workaround. If set to a value bigger than null it forces a
# full screen refresh <RefreshDiplay> seconds. Default: 0.
# RefreshDisplay=5
# You can reduce the inserted delays by setting this to false.
# On fast PCs it is possible your LCD does not respond correctly.
# Default: true.
DelayBus=true
# Device of the serial interface [default: /dev/lcd]
Device=/dev/i2c
# If you have a keypad you can assign keystrings to the keys.
# See documentation for used terms and how to wire it.
# For example to give directly connected key 4 the string "Enter", use:
#   KeyDirect_4=Enter
# For matrix keys use the X and Y coordinates of the key:
#   KeyMatrix_1_3=Enter
KeyMatrix_4_1=Enter
KeyMatrix_4_2=Up
KeyMatrix_4_3=Down
KeyMatrix_4_4=Escape
# If you have a keypad connected.
# You may also need to configure the keypad layout further on in this file.
Keypad=no
# If you have the additional output port ("bargraph") and you want to
# be able to control it with the lcdproc OUTPUT command
OutputPort=no
# Port where the LPT is. Usual value are: 0x278, 0x378 and 0x3BC
Port=0x27
# Specifies if the last line is pixel addressable (yes) or it controls an
# underline effect (no). [default: yes; legal: yes, no]
# Lastline=yes
# Specifies the size of the LCD.
# In case of multiple combined displays, this should be the total size.
Size=16x2
# Bitrate of the serial port (0 for interface default)
Speed=0

# ScrollUpKey=Up
# ScrollDownKey=Down
[menu]
DownKey=Down
EnterKey=Enter
# You can configure what keys the menu should use. Note that the MenuKey
# will be reserved exclusively, the others work in shared mode.
# Up to six keys are supported. The MenuKey (to enter and exit the menu), the
# EnterKey (to select values) and at least one movement keys are required.
# These are the default key assignments:
MenuKey=Escape
UpKey=Up

lcdproc.conf
Kód: [Vybrat]
# LCDproc client configuration file

## general options ##
[lcdproc]
# address of the LCDd server to connect to
Server=localhost

# Port of the server to connect to
Port=13666

# set reporting level
ReportLevel=2

# report to to syslog ?
ReportToSyslog=false

# run in foreground [default: false; legal: true, false]
#Foreground=true

# PidFile location when running as daemon [default: /var/run/lcdproc.pid]
#PidFile=/var/run/lcdproc.pid

# slow down initial announcement of modes (in 1/100s)
#delay=2

# display name for the main menu [default: LCDproc HOST]
#DisplayName=lcdproc


## screen specific configuration options ##

[CPU]
# Show screen
Active=True
OnTime=1
OffTime=2
ShowInvisible=false


[Iface]
# Show screen
Active=True

# Show stats for Interface0
Interface0=eth0
# Interface alias name to display [default: <interface name>]
Alias0=LAN

# Show stats for Interface1
#Interface1=eth1
#Alias1=WAN

# Show stats for Interface2
#Interface2=eth2
#Alias2=MGMT

# for more than 3 interfaces change MAX_INTERFACES in iface.h and rebuild

# Units to display [default: byte; legal: byte, bit, packet]
unit=bit

# add screen with transferred traffic
#transfer=TRUE


[Memory]
# Show screen
Active=True


[Load]
# Show screen
Active=True
# Min Load Avg at which the backlight will be turned off [default: 0.05]
LowLoad=0.05
# Max Load Avg at which the backlight will start blinking [default: 1.3]
HighLoad=1.3


[TimeDate]
# Show screen
Active=True
# time format [default: %H:%M:%S; legal: see strftime(3)]
TimeFormat="%H:%M:%S"
# date format [default: %x; legal: see strftime(3)]
DateFormat="%x"


[About]
# Show screen
Active=false


[SMP-CPU]
# Show screen
Active=false


[OldTime]
# Show screen
Active=false
# time format [default: %H:%M:%S; legal: see strftime(3)]
TimeFormat="%H:%M:%S"
# date format [default: %x; legal: see strftime(3)]
DateFormat="%x"
# Display the title bar in two-line mode. Note that with four lines or more
# the title is always shown. [default: true; legal: true, false]
#ShowTitle=false


[BigClock]
# Show screen
Active=false


[Uptime]
# Show screen
Active=false


[Battery]
# Show screen
Active=false


[CPUGraph]
# Show screen
Active=false


[ProcSize]
# Show screen
Active=false


[Disk]
# Show screen
Active=false


[MiniClock]
# Show screen
Active=True
# time format [default: %H:%M; legal: see strftime(3)]
TimeFormat="%H:%M"


# EOF

Případně jestli máte nějaké jiné funkční řešení jak zobrazovat názvy skladeb/rádia taky je mile rád uvítám.

Děkuji za případné odpovědi a přeji krásné prožití svátků Vánočních.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: JardaP . 24. 12. 2017, 18:58:22
ERROR mpdlcd Unable to connect to lcdproc localhost:13666.

Chce se pripojit na localhost, port 13666, asi se zamerem na nem poslouchat, ale nezdarilo se. Ten port uz ma neco otevrene. Co to je, najdete v netstat -naptu | grep :13666. Pocitam, ze uz vam tam visi jeden mpdlcd, takze druhy uz si nepustite.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 24. 12. 2017, 20:42:19
Napoprvé to LCD detekovalo, každopádně LCD pořád nic nezobrazuje.

Co sem mám poslat, aby se z toho dalo něco vyčíst ?



Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: Tomáš Bláha 24. 12. 2017, 22:19:13
A máš spuštěného LCDproc démona? Všechny ty ostatní programy, které chtějí na displeji zobrazovat, se znaží ke spuštěnému LCDproc připojit a ta chybová hláška by znamenala, ze démon neběží, tudíž není otevřený port pro komunikaci s ním. I pouhý samotný spuštěný démon zobrazuje nějaké základní info. Tedy nejprve rozběhni démona a až pak řes mpdlcd...
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 24. 12. 2017, 23:17:02
Jestli mas na mysli
Kód: [Vybrat]
service LCDd start tak mam. Opravdu ten program neznam a v dokumentaci jsem nic kloudneho nenasel.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 25. 12. 2017, 01:39:57
Trochu jsem pátral a víc se mi zamlouvá tahle metoda. V podstatě potřebuju zobrazit jeno název rádia a přehrávanou skladbu

Čili můžu použít příkaz
Kód: [Vybrat]
echo "currentsong" | nc localhost 6600 | grep -e "^Title: "
-e "^Name: "

To mi vyhodí např.

Kód: [Vybrat]
Title: ANETA LANGEROVÁ - Voda živá
Name: Radio BLANIK CZ

A teď jak ten výstup dostat přes i2c do LCD ?

Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: dustin 25. 12. 2017, 10:06:17
Poslat to po síti tomu správně nakonfigurovanému lcdproc démonovi. Který ti pravděpodobně po startu hned končí.

Běží? Koukal ses do logů? Poslouchá na portu? Chce to trochu základní diagnostiky, věci obvykle samy napoprvé nefungují.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: Tomáš Bláha 25. 12. 2017, 10:17:48
Ano, myslím LCDd start. Otázka je, jestli skutečně běží, takže ps axf|grep LCD by mělo vypsat něco jako:

Kód: [Vybrat]
2683 ?        Ss     0:00 /usr/sbin/LCDd -s 1 -f

Pokud běží, tak by měl poslouchat na portu, zkus příkaz netstat -anp|grep 13666:

Kód: [Vybrat]
tcp        0      0 localhost:13666         0.0.0.0:*               NASLOUCHÁ  2683/LCDd
tcp        0      0 localhost:13666         localhost:55712         SPOJENO     2683/LCDd
tcp        0      0 localhost:55712         localhost:13666         SPOJENO     3204/kodi.bin

Zde bys měl vidět, že LCDd naslouchá a případně jací klienti jsou k displeji připojeni. V mém případě jednak LCDd samotný, který generuje střídající se systémové informace a pak Kodi, který nahradí základní výpis za svoje informace o spuštěném videu.

Pokud nenaslouchá, je to divné. Můžeš také ověřit pomocí nmap localhost, zda je port otevřen či ne, příp. jestli není filtrován firewallem, což by na localhostu neměl.

Co se týče nápadu s nc localhost 6600, tak pokud jsem si dohledal, tak port 6600 je poskytován přehrávačem MPD, takže to seš pořád na začátku - nejprve ti musí správně fungovat LCDd, potom se k němu může připojit MPD a potom můžeš říci MPD, aby něco zobrazil. Tedy nejdříve ti musí fungovat LCDd.

Co se týče rozběhání LCDd, pak je také otázka, jestli ho máš správně nakonfigurovaný. V příkladu vidím, že používáš Driver=hd44780, potom je důležitý obsah sekce [hd44780] dále v konfiguračním souboru. Tam vidím, že máš napsáno mj. ConnectionType=rpi. Neznám tento konkrétní displej, ale když kouknu na https://andypi.co.uk/2013/09/19/andypi-lcd-with-raspyfi/ (https://andypi.co.uk/2013/09/19/andypi-lcd-with-raspyfi/) tak tam odkazují https://www.raspberrypi.org/forums/viewtopic.php?f=44&t=100066&p=723632&hilit=lcdproc%2braspberry%2b2#p723632 (https://www.raspberrypi.org/forums/viewtopic.php?f=44&t=100066&p=723632&hilit=lcdproc%2braspberry%2b2#p723632), kde se píše, že správně je ConnectionType=raspberrypi. Zkus si prosím projít všechny rady, které tam píší a obecně LCDd loguje do systémového logu, tak se podívej, co při startu říká, to je důležité.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 25. 12. 2017, 12:59:54
Ještě malinko odbočím, než se vrátím k tomuhle nefungujícímu řešení.

Mám script v pythonu, který mi funguje a zobrazuje data na LCD v pořádku.
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("Nejaky text",LCD_LINE_1)
    lcd_string("Nejaky text",LCD_LINE_2)

    time.sleep(3)
 
    # Send some more text
    lcd_string("Nejaky text",LCD_LINE_1)
    lcd_string("Nejaky text",LCD_LINE_2)

    time.sleep(3)

if __name__ == '__main__':

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

Je nějaká možnost do tohohle scriptu dostat zmíněný
Kód: [Vybrat]
echo "currentsong" | nc localhost 6600 | grep -e "^Title: "
-e "^Name: "

Tím by se to všechno vyřešilo a nemusel bych u toho sedět další dva dny.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: Tomáš Bláha 25. 12. 2017, 13:13:07
Jasně, že můžeš v Pythonu spustit externí příkaz a něco pak udělat s textovým výstupem, který yprodukuje, viz např. https://stackoverflow.com/questions/89228/calling-an-external-command-in-python (https://stackoverflow.com/questions/89228/calling-an-external-command-in-python), ale to už je takové LMGTFY, to zvládneš sám...
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 25. 12. 2017, 13:24:59
Tak tohle vypadá ještě složitější, než rozchodit to původní řešení.

Vrátím se k tomu a pošlu ten výstup.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 25. 12. 2017, 13:56:01
ps axf | grep LCD
Kód: [Vybrat]
27465 pts/0    S+     0:00          |           \_ grep --color=auto LCD
Druhy prikaz nevypise nic.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: Dustin 25. 12. 2017, 14:11:11
Vzdyt ti rikame, ze ten lcdproc nebezi. Musis zjistit proc - logy, spustit jej naprimo apod.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 25. 12. 2017, 14:22:15
Kam to ukládá logy ?
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 25. 12. 2017, 14:50:57
Když zadám
Kód: [Vybrat]
sudo service lcdproc start
vyhodí

Kód: [Vybrat]
Failed to start lcdproc.service: Unit lcdproc.service not found.
Nic jiného
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: Tomáš Bláha 25. 12. 2017, 15:14:39
O kousek výše jsi psal, že spouštíš service LCDd start. LCDd je ta část, která poslouchá na portu a přijímá informace k zobrazení a lcdproc je klient, který zobrazuje systémové informace, viz man.

Logy ukládá běžným způsobem, využívá systémový logger. Já osobně bych prostě četl nějaký soubor v adresáři /var/log, ale nevím, jak přesně je to nastavené na tvojí distribuci. Pro ladění bude asi nejjednodušší spustit démona na popředí a pak tě bude na konzoli informovat o tom, co se děje a proč nepracuje, protože předpokládám skončí na nějaké chybě. Zkus příkaz: LCDd -f

Co se týče pythonu, tak netuším, proč přidání dvou řádků by mělo být tak složité, ale potíž je, že nereaguješ příliš konkrétně. Třeba ti někdo něco poradí a ty na to nezeraguješ a nebo zkusíš něco jiného. Možná se na nějakém kroku zarazíš, ale pak buď prosím konkrétní.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 25. 12. 2017, 15:28:13
Ano LCDd je spuštěný. lcdproc spustit nelze. ve /var/log nic není (co by se týkalo lcdproc)

Jestli stačí přidat dva řádky do toho scriptu, tak bych šel touhle cestou, ale absolutně nechápu, jak na to, nejsem programátor.

Jestli tedy mám být konkrétní, nevím, kam ty dva řádky napsat, tak aby se zobrazoval ten textový výstup stejně jako v terminálu.

LCDd -f ukáže akorát informace o programu.(kdo ho vytvořil apod.)
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 25. 12. 2017, 15:32:04
Nebo jestli mám poslat nějaký jiný log z /var/log ve kterém by se ty informace dali najít, stačí říct.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: Tomáš Bláha 25. 12. 2017, 15:58:00
Já bych hledal něco jako:

Kód: [Vybrat]
grep -a LCDd /var/log/messages
A když spustíč LCDd -f, tak kromě informací o autorech zůstane spuštěný, nebo se hned ukončí a vrátí do příkazové řádky?

Co se týče python skriptu, na začátek bych přidal:

Kód: [Vybrat]
import subprocess
A tam dole, kde se posílá výstup (tj. řádka s lcd_string("Nejaky text",LCD_LINE_1)), tak bych udělal místo ní něco jako:

Kód: [Vybrat]
text = subprocess.check_output('echo "currentsong" | nc localhost 6600 | grep -e "^Title: "', shell=True)
lcd_string(text,LCD_LINE_1)

Možná to bude chtít malinko poladit, já to nemůžu vyzkoušet.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 25. 12. 2017, 16:40:43
Ten první příkaz nedělá nic.

LCDd -f vypíše informace a ukončí se.

S tím scriptem už je mi to trochu jasnější, ale zkusím se ještě zeptat na nějakém python foru.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 25. 12. 2017, 16:55:32
Tohle bude potřeba nějak upravit
Kód: [Vybrat]
def lcd_string(message,line):
  # Send string to display

  message = message.ljust(LCD_WIDTH," ")

Něco jako
Kód: [Vybrat]
def lcd_string(text,line):
  # Send string to display

  text = subprocess.check_output('echo "currentsong" | nc localhost 6600 | grep -e "^Title: "', shell=True)(LCD_WIDTH," ")

Chápu to správně ?
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: Tomáš Bláha 25. 12. 2017, 17:06:33
Ne. Čti prosím pozorně! Psal jsem, abys našel místo, kde je napsáno lcd_string("Nejaky text",LCD_LINE_1). Je to cca 15 řádek před koncem souboru. Tam to upravíš - přidáš před to volání subprocess a místo "Nejaky text" napises proměnnou text.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 25. 12. 2017, 17:12:41
To jsem zkoušel. Syntax error EOL while scanning string literal

Ten můj pokus vypíše to samé
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: Tomáš Bláha 25. 12. 2017, 17:21:27
Zkus ještě:

Kód: [Vybrat]
LCDd -f -r 5 -s 0
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: Tomáš Bláha 25. 12. 2017, 17:24:32
Tak v tom pythonu máš asi nějaký překlep, pošli sem celé znění upraveného souboru...
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 25. 12. 2017, 17:39:35
LCDd -f -r 5 -s 0

Kód: [Vybrat]
LCDd version 0.5.7 starting
Built on Tue, 22 Mar 2016 19:45:10 +0100, protocol version 0.3, API version 0.5
Using Configuration File: /etc/LCDd.conf
Set report level to 5, output to stderr
LCDd 0.5.7, LCDproc Protocol 0.3
Part of the LCDproc suite
Copyright (C) 1998-2014 William Ferrell, Selene Scriven
                        and many other contributors

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

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: rpi
hd44780: Using hd44780_default charmap
can not open /dev/mem
Failed to set up gpio.
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.

Chápu to tak, že to nechce najít ovladač ? Cesta souhlasí.

Ten script jsem zkusil přepsat znovu a teď to píše
Kód: [Vybrat]
Traceback (most recent call last):
  File "/home/pi/Radio/i2clcda_pokus.py", line 98, in <module>
    main()
  File "/home/pi/Radio/i2clcda_pokus.py", line 91, in main
    lcd_string(text,LCD_LINE_1)
  File "/home/pi/Radio/i2clcda_pokus.py", line 75, in lcd_string
    message = message.ljust(LCD_WIDTH," ")
TypeError: ljust() argument 2 must be a byte string of length 1, not str

Script

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)
    # Send some test
    lcd_string(text,LCD_LINE_1)
   


if __name__ == '__main__':

  try:
    main()
  except KeyboardInterrupt:
    pass
  finally:
    lcd_byte(0x01, LCD_CMD)
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: Tomáš Bláha 25. 12. 2017, 17:56:39
No vida - Failed to set up gpio. Na https://www.raspberrypi.org/forums/viewtopic.php?t=100066 (https://www.raspberrypi.org/forums/viewtopic.php?t=100066) zmiňovali nějaké nutné úpravy:

Citace
Find where GPIO_BASE is defined and change the value from 0x20xxxxxx to 0x3Fxxxxxx for the Pi2.

Takže pro začátek by bylo potřeba vědět, jaké přesně raspberry máš, třeba to je právě ta změna, kterou musíš udělat. A kompiloval sis ten driver hd44780 sám, tj. máš někde jeho zdrojáky?

Chyba s ljust() na řádku 75 vypadá, jako by v těch uvozovkách bylo něco jiného, než jedna mezera. Prosím důkladně zkontroluj, že mezi uvozovkami je jen jediný bajt a sice mezera s ASCII kódem 32, tj. že tam není nějaká unicode mezera nebo třeba tabelátor nebo dvě mezery atp. Vymaž obsah a napiš znovu, ono při kopírování se leckdy může připlést lecjaký bordel.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: Tomáš Bláha 25. 12. 2017, 18:01:10
Jo a nějaké to time.sleep(3) bych ve zdrojáku nechal, jinak to bude příliš zatěžovat systém.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 25. 12. 2017, 18:02:56
Ten driver jsem stáhnul odsud https://www.dropbox.com/s/ww2zt0nah0o43f9/hd44780.so čili zdrojáky nemám.

Podle toho návodu je právě pro mojí HW revizi. Jedná se o raspberry pi zero w

Zbytek dodám později.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 25. 12. 2017, 18:09:55
Je tam opravdu jen jedna mezera, navíc zrovna s tímhle řádkem jsem stejně nic nedělal a předtím to tuhle chybu neházelo.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 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.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 25. 12. 2017, 18:37:31
Jinak ten script pro změnu hlásí

Typeerror: 'bytes' object is not callable.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: Tomáš Bláha 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 (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?
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: Tomáš Bláha 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 (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 (http://sourceforge.net/p/lcdproc/patches/_discuss/thread/4c659fe3/b8f3/attachment/hd44780.so), rozhodně jsou odlišné...
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 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
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 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.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: Tomáš Bláha 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.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 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.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 25. 12. 2017, 19:27:11
Jinak zkoušel jsem connection type =rpi/raspberrypi - nemá vliv.

Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: Tomáš Bláha 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í.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 25. 12. 2017, 19:40:26
Nebo jinak, můžeš sem hodit ten tvůj soubor ? jen pro jistotu.

gpio zkusím
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 25. 12. 2017, 19:46:44
unknown connection type  :-\

Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 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: "
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: Tomáš Bláha 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)
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 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ď ?
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: Tomáš Bláha 25. 12. 2017, 20:17:54
Mimochodem, kdyby tě zlobil jenom ten ljust, tak ten řádek můžeš zaremovat, jen doplňuje mezery na konec. To s tím 'bytes' object is not callable bude asi pro python 3, tak na to zapomeň.

No vidíš, správné řešení je to, které jsme ani já ani ty do teď nikde nezahlídli :-) No tak teď zkus to, čím jsi toto diskusní vlákno začal, program mpdlcd by už neměl hlásit, že connection refused, ne?
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: dustin 25. 12. 2017, 20:50:56
Z toho currentsong ti leze česká diakritika. Opravdu to LCD podporuje české znaky?

Pro zobrazování utf8 ascii fontem používám v pythonu 3 knihovnu unidecode - převede unicode do docela čitelného ascii.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 25. 12. 2017, 20:54:49
Takže zpátky na začátek

mpdlcd

Kód: [Vybrat]
INFO mpdlcd.lcdrunner LCD screen is 16x2
INFO mpdlcd.lcdrunner MPD screen added to lcdproc.
INFO mpdlcd.mpdwrapper Connecting to MPD server at localhost:6600
INFO mpd Calling MPD connect('localhost', 6600, timeout=None)
INFO mpdlcd.lcdrunner Starting update loop.

Kód: [Vybrat]
sudo netstat -anp | grep 13666tcp        0      0 127.0.0.1:13666         0.0.0.0:*               LISTEN      795/LCDd           
tcp        0      0 127.0.0.1:13666         127.0.0.1:44528         ESTABLISHED 795/LCDd           
tcp        0      0 127.0.0.1:44528         127.0.0.1:13666         ESTABLISHED 803/python   

LCD stále bliká. Jsou vidět plné segmenty na prvním řádku.

No to s tím fontem mi vůbec nedošlo. Těžko to bude podporovat :(
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 25. 12. 2017, 20:58:53
Z toho currentsong ti leze česká diakritika. Opravdu to LCD podporuje české znaky?

Pro zobrazování utf8 ascii fontem používám v pythonu 3 knihovnu unidecode - převede unicode do docela čitelného ascii.

Mimochodem, když nevím ani jak nastavit aby to zobrazovalo cokoliv, těžko si budu hrát s nějakejma knihovnama  :D
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: dustin 25. 12. 2017, 21:05:55
Pak nechápu, proč se ptáš na tohle. Zobrazuje ti ten python ascii text správně? Pokud ano, zavolej ten currentsong, zkonverzuj výsledek přes unidecode do ascii a pošli to jako ten string. Detaily už si musíš vymyslet sám. A doporučuji se nepatlat s pythonem 2, budeš navíc řešit datový typ ascii string vs. unicode string.

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: "
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 25. 12. 2017, 21:08:48
Ptám se na to, protože kdyby se tady našel někdo, kdo pythonu rozumí, tak mi řekne, co tam má napsat a můžu to vlákno uzavřít. Pro zkušeného programátora je to určitě otázka pár minut. Já nejsem programátor a už tři dny nespím kvůli nějakému debilnímu lcdproc, mpdlcd atd.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 25. 12. 2017, 21:21:38
Pak nechápu, proč se ptáš na tohle. Zobrazuje ti ten python ascii text správně? Pokud ano, zavolej ten currentsong, zkonverzuj výsledek přes unidecode do ascii a pošli to jako ten string. Detaily už si musíš vymyslet sám. A doporučuji se nepatlat s pythonem 2, budeš navíc řešit datový typ ascii string vs. unicode string.

Ano ascii text zobrazuje správně. jak mám zavolat currentsong (co mám kam napsat?)
Jak mám zkonverzovat výsledek(co mám kam napsat?)

Já chtěl pro manželku rádio, ne dva roky studovat programovací jazyk.

Jde to napsat nějak srozumitelně ?
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 26. 12. 2017, 13:55:34
Nikdo mi nemůže poradit ?
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 26. 12. 2017, 14:11:54
Našel jsem ještě tohle.
Kód: [Vybrat]
# -*- coding: utf-8 -*-
# Original code found at:
# https://gist.github.com/DenisFromHR/cc863375a6e19dce359d

"""
Compiled, mashed and generally mutilated 2014-2015 by Denis Pleic
Made available under GNU GENERAL PUBLIC LICENSE

# Modified Python I2C library for Raspberry Pi
# as found on http://www.recantha.co.uk/blog/?p=4849
# Joined existing 'i2c_lib.py' and 'lcddriver.py' into a single library
# added bits and pieces from various sources
# By DenisFromHR (Denis Pleic)
# 2015-02-10, ver 0.1

"""

# i2c bus (0 -- original Pi, 1 -- Rev 2 Pi)
I2CBUS = 0

# LCD Address
ADDRESS = 0x27

import smbus
from time import sleep

class i2c_device:
   def __init__(self, addr, port=I2CBUS):
      self.addr = addr
      self.bus = smbus.SMBus(port)

# Write a single command
   def write_cmd(self, cmd):
      self.bus.write_byte(self.addr, cmd)
      sleep(0.0001)

# Write a command and argument
   def write_cmd_arg(self, cmd, data):
      self.bus.write_byte_data(self.addr, cmd, data)
      sleep(0.0001)

# Write a block of data
   def write_block_data(self, cmd, data):
      self.bus.write_block_data(self.addr, cmd, data)
      sleep(0.0001)

# Read a single byte
   def read(self):
      return self.bus.read_byte(self.addr)

# Read
   def read_data(self, cmd):
      return self.bus.read_byte_data(self.addr, cmd)

# Read a block of data
   def read_block_data(self, cmd):
      return self.bus.read_block_data(self.addr, cmd)


# commands
LCD_CLEARDISPLAY = 0x01
LCD_RETURNHOME = 0x02
LCD_ENTRYMODESET = 0x04
LCD_DISPLAYCONTROL = 0x08
LCD_CURSORSHIFT = 0x10
LCD_FUNCTIONSET = 0x20
LCD_SETCGRAMADDR = 0x40
LCD_SETDDRAMADDR = 0x80

# flags for display entry mode
LCD_ENTRYRIGHT = 0x00
LCD_ENTRYLEFT = 0x02
LCD_ENTRYSHIFTINCREMENT = 0x01
LCD_ENTRYSHIFTDECREMENT = 0x00

# flags for display on/off control
LCD_DISPLAYON = 0x04
LCD_DISPLAYOFF = 0x00
LCD_CURSORON = 0x02
LCD_CURSOROFF = 0x00
LCD_BLINKON = 0x01
LCD_BLINKOFF = 0x00

# flags for display/cursor shift
LCD_DISPLAYMOVE = 0x08
LCD_CURSORMOVE = 0x00
LCD_MOVERIGHT = 0x04
LCD_MOVELEFT = 0x00

# flags for function set
LCD_8BITMODE = 0x10
LCD_4BITMODE = 0x00
LCD_2LINE = 0x08
LCD_1LINE = 0x00
LCD_5x10DOTS = 0x04
LCD_5x8DOTS = 0x00

# flags for backlight control
LCD_BACKLIGHT = 0x08
LCD_NOBACKLIGHT = 0x00

En = 0b00000100 # Enable bit
Rw = 0b00000010 # Read/Write bit
Rs = 0b00000001 # Register select bit

class lcd:
   #initializes objects and lcd
   def __init__(self):
      self.lcd_device = i2c_device(ADDRESS)

      self.lcd_write(0x03)
      self.lcd_write(0x03)
      self.lcd_write(0x03)
      self.lcd_write(0x02)

      self.lcd_write(LCD_FUNCTIONSET | LCD_2LINE | LCD_5x8DOTS | LCD_4BITMODE)
      self.lcd_write(LCD_DISPLAYCONTROL | LCD_DISPLAYON)
      self.lcd_write(LCD_CLEARDISPLAY)
      self.lcd_write(LCD_ENTRYMODESET | LCD_ENTRYLEFT)
      sleep(0.2)


   # clocks EN to latch command
   def lcd_strobe(self, data):
      self.lcd_device.write_cmd(data | En | LCD_BACKLIGHT)
      sleep(.0005)
      self.lcd_device.write_cmd(((data & ~En) | LCD_BACKLIGHT))
      sleep(.0001)

   def lcd_write_four_bits(self, data):
      self.lcd_device.write_cmd(data | LCD_BACKLIGHT)
      self.lcd_strobe(data)

   # write a command to lcd
   def lcd_write(self, cmd, mode=0):
      self.lcd_write_four_bits(mode | (cmd & 0xF0))
      self.lcd_write_four_bits(mode | ((cmd << 4) & 0xF0))

   # write a character to lcd (or character rom) 0x09: backlight | RS=DR<
   # works!
   def lcd_write_char(self, charvalue, mode=1):
      self.lcd_write_four_bits(mode | (charvalue & 0xF0))
      self.lcd_write_four_bits(mode | ((charvalue << 4) & 0xF0))
 
   # put string function with optional char positioning
   def lcd_display_string(self, string, line=1, pos=0):
    if line == 1:
      pos_new = pos
    elif line == 2:
      pos_new = 0x40 + pos
    elif line == 3:
      pos_new = 0x14 + pos
    elif line == 4:
      pos_new = 0x54 + pos

    self.lcd_write(0x80 + pos_new)

    for char in string:
      self.lcd_write(ord(char), Rs)

   # clear lcd and set to home
   def lcd_clear(self):
      self.lcd_write(LCD_CLEARDISPLAY)
      self.lcd_write(LCD_RETURNHOME)

   # define backlight on/off (lcd.backlight(1); off= lcd.backlight(0)
   def backlight(self, state): # for state, 1 = on, 0 = off
      if state == 1:
         self.lcd_device.write_cmd(LCD_BACKLIGHT)
      elif state == 0:
         self.lcd_device.write_cmd(LCD_NOBACKLIGHT)

   # add custom characters (0 - 7)
   def lcd_load_custom_chars(self, fontdata):
      self.lcd_write(0x40);
      for char in fontdata:
         for line in char:
            self.lcd_write_char(line)         
         

Kód: [Vybrat]
import I2C_LCD_driver
import time
mylcd = I2C_LCD_driver.lcd()


while True:
    mylcd.lcd_display_string("Time: %s" %time.strftime("%H:%M:%S"), 1)
   
    mylcd.lcd_display_string("Date: %s" %time.strftime("%m/%d/%Y"), 2)
   

Jak do toho dostat ten příkaz
Kód: [Vybrat]
echo "currentsong" | nc localhost 6600 | grep -e "^Title: " -e "^Name: " ?
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: Jose D 26. 12. 2017, 15:31:56
Já chtěl pro manželku rádio
kup si nějakou hamu, kupoval jsem to taky na vánoce, a dobrý.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 26. 12. 2017, 15:33:51
Já chtěl pro manželku rádio
kup si nějakou hamu, kupoval jsem to taky na vánoce, a dobrý.
Ty seš ale debil. Tohle si nech na fejsbůček.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 26. 12. 2017, 16:11:50
Zkusil jsem ještě tu Tomášovu metodu
Kód: [Vybrat]
import I2C_LCD_driver
import time
import subprocess
mylcd = I2C_LCD_driver.lcd()


while True:
    text = subprocess.check_output('echo "currentsong" | nc localhost 6600 | grep -e "^Title: "', shell=True)
    mylcd.lcd_display_string(text, 1)
   
    mylcd.lcd_display_string("Date: %s" %time.strftime("%m/%d/%Y"), 2)

To mi vyhodí chybu
Kód: [Vybrat]
Traceback (most recent call last):
  File "/home/pi/write.py", line 9, in <module>
    mylcd.lcd_display_string(text, 1)
  File "/home/pi/I2C_LCD_driver.py", line 159, in lcd_display_string
    self.lcd_write(ord(char), Rs)
TypeError: ord() expected string of length 1, but int found
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: . 26. 12. 2017, 17:17:53
Já chtěl pro manželku rádio
kup si nějakou hamu, kupoval jsem to taky na vánoce, a dobrý.
Ty seš ale debil. Tohle si nech na fejsbůček.
Naopak, to byla nejlepší rada, co tady zatím zazněla.

Koupil jsem si starý auto, nejede, vůbec tomu nerozumím, ale mám kladívko a kleště. Poraďte mi, kam mám bouchnout, aby se to rozjelo. (heslo: lopata)
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 26. 12. 2017, 17:26:29
Jsem snad na foru, normálně jsem se zeptal. Odpověď už hledám 4 dny. Jediný kdo mi poradil byl tomáš. A vy dva zmizte zpátky na fejsbůček. Nejem na vaše výlevy zvědavej.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 26. 12. 2017, 17:50:07
Přes 3000 zhlédnutí a jen jeden člověk, co byl ochotný poradit. Dva debílkové bez kamarádů, co si myslí, že se dá naučit programovat za 4 dny. To je bilance.

Klidně to admine zavři.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: dustin 26. 12. 2017, 19:02:13
Ono to chce trochu přemýšlet, pohrát si s tím a ne hned kopat kolem sebe. Když něco neumím, snažím se to naučit, pokud to potřebuju. Není to až tak složité.

Víš, co leze z check_output? Kdyby ses podíval dokumentace, viděl bys "return its output as a byte string". Víš, co má lézt do lcd_display_string? Díval ses do zdrojáku https://gist.github.com/vay3t/8b0577acfdb27a78101ed16dd78ecba1#file-i2c_lcd_driver-py-L148 ? Přímo ti to píše, kde je chyba - jednotlivý prvek v proměnné text očekává jednoprvkový string. Ale co tam pouštíš ty? Pole bajtů. Tedy jeden prvek je bajt = číslo - přesně co ti píše, na něm ord nepustíš https://docs.python.org/2/library/functions.html#ord .

Takže potřebuješ to byte array zkonvertovat do stringu. Hoď si do googlu, jak to v pythonu zkonvertovat, je to triviální. A použij při hledání python 2, ať se ti to netříská s pythonem 3 (nevím, zda je tam rozdíl, ale pro jistotu, tak už to u pythonu bohužel chodí). https://stackoverflow.com/questions/606191/convert-bytes-to-a-string/38102444 https://stackoverflow.com/questions/2502833/store-output-of-subprocess-popen-call-in-a-string

A dobře ti radím, abys na ten string před předáním lcd aplikoval ten unidecode, jinak ti to vyhnije na češtině a budeš zase řešit nějaké kraviny. Podívej se na příkaz pip, tím si jej můžeš nainstalovat.

Užívej si krásy jazyka s neuvedenými typy, pro začátečníka opravdová radost...
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 26. 12. 2017, 19:24:16
Včak to celou dobu dělám, hledám na googlu řešení, co mám jinýho dělat, když je tu milion programátorů a jediný co ti nápíšou, je že si mám koupit rádio v tescu bo co.

Co bys jim na to řekl ty ? Děkuju ?

Takže tohle ('echo "currentsong" | nc localhost 6600 | grep -e "^Title: "', shell=True)

se má převést ?


Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: dustin 26. 12. 2017, 19:30:14
Ani ses nepodíval na ty stackoverflow linky, kde je to přesně tohle řešené https://stackoverflow.com/questions/2502833/store-output-of-subprocess-popen-call-in-a-string#comment53530956_2502883 . Nejsem chůva, snaž se trochu sám, máš mozek stejně jako ostatní.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 26. 12. 2017, 19:36:23
Já na to koukal. Ale vidím to prvně v životě no.

Takže takhle ?
Kód: [Vybrat]
subprocess.check_output('echo "currentsong" | nc localhost 6600 | grep -e "^Title: "', shell=True).decode("utf-8")
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 26. 12. 2017, 19:55:59
Takhle to funguje. Ale chtělo by to odstranit to
Kód: [Vybrat]
Name: abych viděl jenom název stanice.

Když to vymažu hlásí

Kód: [Vybrat]
returned non-zero exit status 1
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 26. 12. 2017, 20:05:30
A další věc strašně dlouho to načítá ten název. Dá se to nějak doladit ?
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 26. 12. 2017, 21:13:56
Tak po googlování jsem to vymyslel jinak.

Kód: [Vybrat]
import I2C_LCD_driver
import time
import subprocess
mylcd = I2C_LCD_driver.lcd()


while True:
    text = subprocess.check_output('mpc | head -n 1 | cut -c1-16', shell=True).decode("utf-8")
    mylcd.lcd_display_string(text, 2)
   
    mylcd.lcd_display_string("Date: %s" %time.strftime("%m/%d/%Y"), 1)
   

Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: Jose D 26. 12. 2017, 21:24:04
hledám na googlu řešení
no to je právě slepá ulička. Buď máš ochotu se na to kouknout, a naučit se princip, a nebo naslepo budeš copypastovat nějaký věci z internetů, a nepoběží ti to nikdy - pak je prostě lepší rádio z obchodu.
Otázka je jen, kdy ti nějaký troll nahodí příkaz, který ti to celý brickne a budeš mít hotovo.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 26. 12. 2017, 21:54:03
Ty to nechápeš. Proč bych se měl kvůli tomu, že někdo dal na internet nefunkční návod, (podle kterého by celá ta věc trvala 5 minut) měl učit dva nebo tři roky programovat ?

Od toho ty návody jsou ne ? Aby to i laik pochopil. Je Vás tady jak psů, všichni tomu hrozně rozumíte, ale poradit to ne.

Těm třem zúčastněným mockrát děkuji.

Je to skoro funkční. Akorát ta čeština. Ale jelikož 90% názvů těch rádií nemá diakritiku, tak na to asi kašlu.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: dustin 26. 12. 2017, 22:35:24
Stačí trochu přemýšlet, roky učení na to nepotřebuješ. A nekopat kolem sebe, to se na tebe každý vybodne.

Ad čeština - řekl jsem ti, jak na to. Pokud nejsi schopný nainstalovat modul unidecode pomocí nástroje pip (googluješ, tak si vygoogluj, jak se pip používá, návodů a ukázek je spoustu) a triviálně ten string obalit metodou unidecode, pak ti opravdu není pomoci.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: dustin 26. 12. 2017, 22:38:57
Ještě se podívej na zátěž tvého CPU, zda náhodou při tom spuštěném skriptu nejede naplno. Pokud ano, zkus použít mozek a přijít na to, čím by to mohlo být.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 26. 12. 2017, 22:50:01
Nekopu kolem sebe, jenom nemám rád arogantní pitomce.

Těm co mi pomohli jsem poděkoval, těm, co žádnou snahu pomoct neměli a ješte měli blbý kecy jsem vynadal. Všechno je, jak má být.

Netvrdím, že to neumím nainstalovat, ještě jsem to nezkoušel, protože to pro mě nebyla priorita. Všechno popořadě.
Hlavně, že to funguje. Tohle už je detail.

Cpu jede max na 40-50 %
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: dustin 26. 12. 2017, 22:57:25
Jediný arogantní jsi tu ty. Neumíš nic a jenom si stěžuješ. Ostatní neměli jenom neměli trpělivost. A vůbec se jim nedivím.

Možná, kdybys tu smyčku netočil neustále dokola bez jakéhokoliv čekání, měl bys load řádově nižší. Jedno jádro CPU ti nejede na 100% jenom proto, že I2C komunikace s displejem chvilinku trvá.
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 26. 12. 2017, 23:07:13
No tak to mám dost. Já si stěžuju ? Já jsem chtěl poradit na foru, které je k tomu určené.

Příklad :
Otázka : Ahoj, jak se prosím dělá to a to, děkuji
Odpověď : Ser na to, nic neumíš, radši nic nedělej.

Jenom takové zamyšlení, kdo z těch dvou je arogantní ? Nápověda, já rozhodně ne.

Takže si sím chtěl říct, že tam mám dát zpátky time.sleep ?
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: Tomáš Bláha 27. 12. 2017, 09:44:33
Určitě tam dej time.sleep třeba s těmi třemi sekundami (nebo i méně), ale je důležité, aby program neběžel v nekonečné smyčce stylem "co to dá" a nevyžíral výkon zbytečně jen pro sebe. Co by bylo ještě určitě dobré se podívat, že na tom raspberry nic neloguje šíleně často do logů. Ony ty paměťové kartičky, které se tam používají, nemají zrovna průmslovou odolnost a časté zápisy jim úplně nesvědčí.

Co se týče návodů na internetu, tak k nim se musí přistupovat trochu s opatrností - ono je hodně verzí těch různých raspberry, hodně různých displejů, hodně různých verzí softwaru k tomu a leckdy se něco mírně změní nebo návod neřekne přesně, s jakou verzí čeho pracoval, takže pak člověk naráží na různé problémy. Na druhou stranu to k tomu patří, získáš nějaké zkušenosti. Pro zasmání: http://geek-and-poke.com/geekandpoke/2016/11/27/good-questions (http://geek-and-poke.com/geekandpoke/2016/11/27/good-questions)

Co se týče Pythonu, tak mě tam nejvíc zarazil ten problém s ljust, to jsem nedokázal nijak zopakovat a poradit, bylo v tom něco, co jsem na dálku nedokázal poznat, to mě trochu vykolejilo. Co se týče češtiny a unicode, zkus to někdy rozběhat pod trojkovým pythonem. Dost možná ho tam i máš a spouští se příkazem "python3". Ve dvojce byla práce s unicode dost šílená. Ve trojce by pak mohlo fungovat jednoduché a snadno pochopitelné message = message.replace("á", "a") atd.

Co se týče trolů na rootu, s tím se musí počítat. Však to také byla výjimka, že jsem tu něco psal, zaujalo mě téma. Ale obvykle to nemá moc smysl :-)
Název: Re:Internetové radio - Raspberry pi - problém s lcdproc
Přispěvatel: marty 27. 12. 2017, 13:07:22
To s těmi zápisy je dobrá poznámka, určitě už to někdo řešil, kouknu na to.

Jenom technická, mám to řešit pře unicode, nebo unidecode ?

Vtip je dobrej, já teda zásadně kopíruju odpověď, která má nejvíc plusů, ale trochu se v tom vidím no.