RaspDac Tutoriel Affichage sur Raspberry V2 + I-sabre V3

Ici on parle de Raspberry PI, Sparky, Odroid... avec des solutions comme Squeezelite, MPD, Max2Play... ainsi que leur DAC et accessoires dédiés
Répondre
All4linux
Messages : 35
Inscription : sam. 09 avr. 2016 08:30

RaspDac Tutoriel Affichage sur Raspberry V2 + I-sabre V3

Message par All4linux » ven. 15 avr. 2016 10:40

Bonjour,

Après avoir résolu la partie bouton, voici la résolution de la partie affichage de notre boitier

http://www.audiophonics.fr/fr/appareils ... 10369.html" onclick="window.open(this.href);return false;

Image

Pour ce qui est du tutoriel, Je me suis basé sur celui effectué par Nicko :

viewtopic.php?f=4&t=1492#p5642" onclick="window.open(this.href);return false;

Il y a cependant des modifications a effectuer et c'est la raison pour laquelle je reprends le tutoriel depuis le début

Ce tutoriel est basé sur une version de Volumio 1.55, mais peut a priori fonctionner sur d'autres distributions fonctionnant avec le serveur musical MPD.

Donc pré requis :

Raspberry PI 2 avec I-sabre V3
Ecran Winstar OLED 16x2
Volumio 1.55 (Voir tutoriel d'installation Volumio)
Logiciel Putty (pour accéder au RPI en ligne de commande)


Connexion Raspberry pi 2 -> Winstar OLED pour le script python utilisé.

Image

Une fois volumio 1.55 installé, allumez le PI tout en l'ayant connecté à votre réseau.
Son adresse IP est affiché sur la sortie HDMI du PI, vous pouvez également trouver son IP sous windows en ligne de commande :

Code : Tout sélectionner

Menu démarrer -> tapez "cmd" puis entrée -> tapez "ping volumio" -> 192.168.0.xx
Connexion au Pi :

Il faut maintenant vous y connecter avec putty.
Vous pouvez entrer l'ip que vous aurez trouvé, ou entrer volumio directement.

Image

Login : root
Password : volumio


Installation de la librairy Rpi.GPIO :

Permet au script python d'adresser directement les pins et donc l'écran.

Téléchargement dans le dossier /home/pi

Code : Tout sélectionner

wget -O /home/pi/python-rpi.gpio_0.5.11-1_armhf.deb https://archive.raspberrypi.org/debian/pool/main/r/rpi.gpio/python-rpi.gpio_0.5.11-1_armhf.deb

Installer le package :

Code : Tout sélectionner

cd /home/pi/
dpkg  -i python-rpi.gpio_0.5.11-1_armhf.deb
Rpi.GPIO est maintenant installé.

Installation des scripts python nécessaire à l'affichage des caractères sur l'écran OLED dans le dossier /home/pi :

Code : Tout sélectionner

sudo nano /home/pi/RaspDacDisplay.py
Le script python RaspDacDisplay.py utilisé pour retranscrire les caractères sur l'affichage (compréhension à valider par Admin)
import Winstar_GraphicOLED
import moment
import time
import json
import logging
from mpd import MPDClient
import telnetlib
import RPi.GPIO as GPIO
import Queue
from threading import Thread
import sys


ARTIST_TIME = 4.0 # Amount of time to display Artist name (in seconds)
TITLE_TIME = 4.0 # Amount of time to display the Title (in seconds)
HESITATION_TIME = 2.5 # Amount of time to hesistate before scrolling (in seconds)

# The Winstar display shipped with the RaspDac is capable of two lines of display
# when the 5x8 font is used. This code assumes that is what you will be using.
# The display logic would need significant rework to support a different number
# of display lines!

DISPLAY_WIDTH = 16 # the character width of the display
DISPLAY_HEIGHT = 2 # the number of lines on the display

# This is where the log file will be written
LOGFILE='/var/log/RaspDacDisplay.log'

# Adjust this setting to localize the time display to your region
TIMEZONE="Europe/Paris"


class RaspDac_Display:


def __init__(self):
logging.info("RaspDac_Display Initializing")

# Initilize the connections to the music Daemons. Currently supporting
# MPD and SPOP (for Spotify)

ATTEMPTS=10
# Will try to connect multiple times

for i in range (1,ATTEMPTS):
self.client = MPDClient()

try:
# Connect to the MPD daemon
self.client.connect("localhost", 6600)
break
except:
logging.warning("Connection to MPD service attempt " + str(i) + " failed")
time.sleep(2)
else:
# After the alloted number of attempts did not succeed in connecting
logging.critical("Unable to connect to MPD service")

# Passing Exception on to calling routine which will likely exit
raise





def status(self):
# Try MPD daemon first
m_status = self.client.status()
m_currentsong = self.client.currentsong()

# Get the MPD player state and act accordingly
state = m_status.get('state')
if state == "play":
artist = m_currentsong.get('artist')
name = m_currentsong.get('name')

# Trying to have something to display. If artist is empty, try the
# name field instead.
if artist is None:
artist = name
title = m_currentsong.get('title')

(current, duration) = (m_status.get('time').split(":"))

# since we are returning the info as a JSON formatted return, convert
# any None's into reasonable values
if artist is None: artist = ""
if title is None: title = ""
if current is None: current = 0
if duration is None: duration = 0
return { 'state':state, 'artist':artist, 'title':title, 'current':current, 'duration': duration }
else :


return { 'state':"stop" }


def Display(q, l, c):
# q - Queue to receive updates from
# l - number of lines in display
# c - number of columns in display

lines = []
columns = []

lcd = Winstar_GraphicOLED.Winstar_GraphicOLED()
lcd.oledReset()
lcd.home()
lcd.clear()

lcd.message("RaspDac\nStarting")
time.sleep(2)

for i in range (0, l):
lines.append("")
columns.append(0)

# Get first display update off of the queue
item = q.get()
q.task_done()

lcd.home()
lcd.clear()

for i in range(len(item)):
lines = item
lcd.setCursor(0,i)
lcd.message( lines[0:c] )

prev_time = time.time()

while True:
short_lines=True

# Smooth animation
if time.time() - prev_time < .05:
time.sleep(.05-(time.time()-prev_time))
try:
# Determine if any lines have been udpated and if yes display them
for i in range(len(item)):
# Check if line is longer than display
if len(item)>c:
short_lines = False

# Check if line has been updated
if lines != item:
# Create a line to print that is at least as long as the existing line
# This is to erase any extraneous characters on the display
buf = item.ljust(len(lines))

# Reset cursor to beginning of changed line and then display the change
lcd.setCursor(0,i)
lcd.message(buf[0:c])

# Update the local line data and reset the column position for the line
lines = item
columns[i] = 0

# If lines all fit on display then we can wait for new input
if short_lines:
item=q.get()
q.task_done()
else:
# Update all long lines
for i in range(len(lines)):
if len(lines[i])>c:
buf = "{0:s} {1:s}".format(lines[i],lines[i][0:DISPLAY_WIDTH-1])
#buf = lines[i]+" "+lines[i][0:c]

columns[i] = columns[i]+1
if columns[i] > len(buf)-c:
columns[i]=0

lcd.setCursor(0,i)

# Print the portion of the string that is currently visible
lcd.message(buf[columns[i]:columns[i]+c])
# Since we have to continue updating the display, check for a new update but don't block
item=q.get_nowait()
q.task_done()


prev_time = time.time()
except Queue.Empty:
prev_time = time.time()
pass


if __name__ == '__main__':
logging.basicConfig(format='%(asctime)s:%(levelname)s:%(message)s', filename=LOGFILE, level=logging.INFO)
logging.info("RaspDac Display Startup")

try:
rd = RaspDac_Display()
except:
#e = sys.exc_info()[0]
#logging.critical("Received exception: %s" % e)
logging.critical("Unable to initialize RaspDac Display. Exiting...")
sys.exit(0)

try:

q = Queue.Queue()
dm = Thread(target=Display, args=(q,DISPLAY_HEIGHT,DISPLAY_WIDTH))
dm.setDaemon(True)
dm.start()

display_mode = "ARTIST"
beenplaying = True
currentArtist = ""
currentTitle = ""
cpos = ""

ctime = ""
hesitate = False
hesitation_etime = 0
display_etime = 0


while True:
current_time = moment.utcnow().timezone(TIMEZONE).format("h:m A").strip()

cstatus = rd.status()
state = cstatus.get('state')

if state != "play":
if beenplaying:
beenplaying = False
currentArtist = ""
currentTitle = ""
logging.info("Ready " + current_time)
q.put(["Ready",current_time])


# Only update display time if the time has changed
if current_time != ctime:
logging.info("Ready " + current_time)
q.put(["Ready", current_time])
ctime = current_time

time.sleep(1)

else:
title = cstatus.get('title')
artist = cstatus.get('artist')
playing_song = artist + ": " + title

current = cstatus.get("current")
duration = cstatus.get("duration")

# if duration is not available, then suppress its display
if int(duration) > 0:
timepos = time.strftime("%M:%S", time.gmtime(int(current))) + "/" + time.strftime("%M:%S", time.gmtime(int(duration)))
else:
timepos = time.strftime("%M:%S", time.gmtime(int(current)))

update_needed = False
if (beenplaying == False) or (currentTitle != title) or (currentArtist != artist):
beenplaying = True
currentTitle = title
currentArtist = artist
logging.info(current_time + " (local): " + playing_song)
display_mode = "ARTIST"
display_etime = time.time()+ARTIST_TIME
if (len(str(artist))>DISPLAY_WIDTH):
hesitation_etime = time.time()+HESITATION_TIME
hesitate=True
display = artist[0:DISPLAY_WIDTH]
elif (len(str(artist)) > 0):
display = artist
else:
display_etime = 0 # force artist display to be skipped if the field is empty
update_needed = True
else:
# Only update display if the time position has changed
if timepos != cpos:
update_needed = True
cpos = timepos

if (hesitation_etime < time.time() and hesitate):
update_needed = True
hesitate = False
if display_mode == "ARTIST":
display = artist
else:
display = title


if display_etime < time.time():
update_needed = True
if display_mode == "ARTIST":
display_etime = time.time() + TITLE_TIME
if len(str(title)) > 0:
display_mode = "TITLE"
display = title
else:
display_etime = time.time() + ARTIST_TIME
if len(str(artist)) > 0:
display_mode = "ARTIST"
display = artist

if len(str(artist)) == 0 and len(str(title)) == 0:
# if neither artist and title contain values
display = "No song info"

if (len(display)>DISPLAY_WIDTH):
hesitate = True
hesitation_etime = time.time() + HESITATION_TIME
display = display[0:DISPLAY_WIDTH]

# Only update if one of the display items has changed
if update_needed:
# add new display items to display queue
q.put([display, timepos])
update_needed = False

time.sleep(.25)


except KeyboardInterrupt:
pass

finally:
q.put(["Goodbye!",""])
logging.info("Goodbye!")
rd.client.disconnect()
rd.spotclient.write("bye\n")
rd.spotclient.close()
time.sleep(2)
q.put(["",""])
time.sleep(1)
GPIO.cleanup()


Et le fichier python Winstar_GraphicOLED.py nécessaire à la gestion de l'affichage (compréhension à valider par Admin)

Code : Tout sélectionner

sudo nano /home/pi/Winstar_GraphicOLED.py
#!/usr/bin/python
# coding: UTF-8

# Winstar WEG010032ALPP5N00000 Graphic OLED and WS0010 OLED driver code for
# Raspberry Pi GPIO library. Some code originally found at
# http://forums.adafruit.com/viewtopic.ph" onclick="window.open(this.href);return false; ... 15#p163445
# Based on http://www.rpiblog.com/2012/11/interfac" onclick="window.open(this.href);return false; ... ry-pi.html
# Massive respec to UHCLEM in that post for getting me on the right track.
#
# Timing & initialisation issues resolved with help of LCD Initialization guide
# http://web.alfredstate.edu/weimandn/lcd" onclick="window.open(this.href);return false; ... index.html
# I also found this helpful http://www.8051projects.net/lcd-interfa" onclick="window.open(this.href);return false; ... mmands.php
#
# Find the latest version of this file at https://gist.github.com/lardconcepts/4947360/" onclick="window.open(this.href);return false;
# Fork and comment but I'd REALLY appreciate getting the graphics mode working.
# I'm trying to achieve "full height" letters, 32 pixels high. Anyone?
#
# based on code from lrvick and LiquidCrystal
# lrvic - https://github.com/lrvick/raspi-hd44780" onclick="window.open(this.href);return false; ... hd44780.py
# LiquidCrystal - https://github.com/arduino/Arduino/blob" onclick="window.open(this.href);return false; ... rystal.cpp
#
# For Winstar WEG1xxxxxx OLED displays, I've wired it up as follows:
# OLED PN | FUNCT | GPIO | P1 pin | Audiophonics pin
# 4 RS 25 22 26
# 5 R/W 18 12 N/A (tied to GND)
# 6 E 24 18 24
# 11 D4 23 16 22
# 12 D5 17 11 18
# 13 D6 21 13 16
# 14 D7 22 15 10
# 15 CS1 9 21 N/A
# 16 CS2 1 5 N/A
#
# Handy Binary to Hex converter
# 0x0 = 0000 0x1 = 0001 0x2 = 0010 0x3 = 0011 0x4 = 0100 0x5 = 0101
# 0x6 = 0110 0x7 = 0111 0x8 = 1000 0x9 = 1001 0xa = 1010 0xb = 1011
# 0xc = 1100 0xd = 1101 0xe = 1110 0xf = 1111
#
# For some reason, with the Winstar in 4-bit mode, the command needs 0x00 before
# the real command. For example, shift whole display right is 0001,1100 = 0x01,0x0c
# So you prefix with 0x00 and, in the next command, combine the two 4-groups into 0x1c eg:
# lcd.write4bits(0x00)
# lcd.write4bits(0x1c)
#
# PS - Adafruit WebIDE FTMFW! http://learn.adafruit.com/webide/" onclick="window.open(this.href);return false;


import RPi.GPIO as GPIO
import time

class Winstar_GraphicOLED:

# 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

# 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_5x10s = 0x04
LCD_5x8DOTS = 0x00

character_translation = [ 0,0,0,0,0,0,0,0,0,0, #0
0,0,0,0,0,0,0,0,0,0, #10
0,0,0,0,0,0,0,0,0,0, #20
0,0,32,33,34,35,36,37,38,39, #30
40,41,42,43,44,45,46,47,48,49, #40
50,51,52,53,54,55,56,57,58,59, #50
60,61,62,63,64,65,66,67,68,69, #60
70,71,72,73,74,75,76,77,78,79, #70
80,81,82,83,84,85,86,87,88,89, #80
90,91,92,93,94,95,96,97,98,99, #90
100,101,102,103,104,105,106,107,108,109, #100
110,111,112,113,114,115,116,117,118,119, #110
120,121,122,123,124,125,126,0,0,0, #120
0,0,0,0,0,0,0,0,0,0, #130
0,0,0,0,0,0,0,0,0,0, #140
0,0,0,0,0,0,0,0,0,0, #150
32,33,204,179,198,32,32,176,209,221, #160
32,215,32,32,220,32,210,177,32,32, #170
211,200,188,32,32,32,210,216,227,226, #180
229,143,152,152,65,203,153,65,175,196, #190
145,146,144,147,73,73,73,73,194,166, #200
136,137,135,206,79,88,201,129,130,128, #210
131,89,254,195,156,157,155,205,158,97, #220
32,196,149,150,148,151,162,163,161,164, #230
111,167,140,141,139,207,142,214,192,133, #240
134,132,117,121,250,202 ] #250

def __init__(self):
self.numlines=2


def oledReset(self, pin_rs=7, pin_e=8, pins_db=[25, 24, 23, 15]):
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
#GPIO.cleanup()
pins_db1 = [25, 24, 23, 15, 8, 7]
for pin in pins_db1:
GPIO.setup(pin, GPIO.OUT, initial=GPIO.LOW)

self.pin_rs = pin_rs
self.pin_e = pin_e
self.pins_db = pins_db

GPIO.setup(self.pin_e, GPIO.OUT)
GPIO.setup(self.pin_rs, GPIO.OUT)

GPIO.output(self.pin_rs, False)
GPIO.output(self.pin_e, False)

for pin in self.pins_db:
GPIO.setup(pin, GPIO.OUT)

# initialization sequence taken from audiophonics.fr site
# there is a good writeup on the HD44780 at Wikipedia
# https://en.wikipedia.org/wiki/Hitachi_H" onclick="window.open(this.href);return false; ... controller

#self.delayMicroseconds(10000)

# Assuming that the display may already be in 4 bit mode
# send five 0000 instructions to resync the display
# NOTE: There is a resync function that is included later but is
# not being used here due to the need to place the display in
# 8 bit mode temporarily
for i in range(1,5):
self.writeonly4bits(0x00, False)

self.delayMicroseconds(1000)

# Now place in 8 bit mode so that we start from a known state
# issuing function set twice in case we are in 4 bit mode
self.writeonly4bits(0x03, False)
self.writeonly4bits(0x03, False)

self.delayMicroseconds(1000)

# placing display in 4 bit mode
self.writeonly4bits(0x02, False)
self.delayMicroseconds(1000)

# From this point forward, we need to use write4bits function which
# implements the two stage write that 4 bit mode requires

self.write4bits(0x08, False) # Turn display off
self.write4bits(0x29, False) # Function set for 4 bits, 2 lines, 5x8 font, Western European font table
self.write4bits(0x06, False) # Entry Mode set to increment and no shift
self.write4bits(0x17, False) # Set to char mode and turn on power
self.write4bits(0x01, False) # Clear display and reset cursor
self.write4bits(0x0c, False) # Turn on display


def home(self):

self.write4bits(self.LCD_RETURNHOME) # set cursor position to zero
self.delayMicroseconds(2000) # this command takes a long time!


def clear(self):
self.write4bits(self.LCD_CLEARDISPLAY) # command to clear display
self.delayMicroseconds(2000) # 2000 microsecond sleep, clearing the display takes a long time


def setCursor(self, col, row):

self.row_offsets = [ 0x00, 0x40, 0x14, 0x54 ]

if (row > self.numlines):
row = self.numlines - 1 # we count rows starting w/0

self.write4bits(self.LCD_SETDDRAMADDR | (col + self.row_offsets[row]))


def noDisplay(self):
''' Turn the display off (quickly) '''

self.displaycontrol &= ~self.LCD_DISPLAYON
self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)


def display(self):
''' Turn the display on (quickly) '''

self.displaycontrol |= self.LCD_DISPLAYON
self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)


def noCursor(self):
''' Turns the underline cursor on/off '''

self.displaycontrol &= ~self.LCD_CURSORON
self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)


def cursor(self):
''' Cursor On '''

self.displaycontrol |= self.LCD_CURSORON
self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)


def noBlink(self):
''' Turn on and off the blinking cursor '''

self.displaycontrol &= ~self.LCD_BLINKON
self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)


def DisplayLeft(self):
''' These commands scroll the display without changing the RAM '''

self.write4bits(self.LCD_CURSORSHIFT | self.LCD_DISPLAYMOVE | self.LCD_MOVELEFT)


def scrollDisplayRight(self):
''' These commands scroll the display without changing the RAM '''

self.write4bits(self.LCD_CURSORSHIFT | self.LCD_DISPLAYMOVE | self.LCD_MOVERIGHT);


def leftToRight(self):
''' This is for text that flows Left to Right '''

self.displaymode |= self.LCD_ENTRYLEFT
self.write4bits(self.LCD_ENTRYMODESET | self.displaymode);


def rightToLeft(self):
''' This is for text that flows Right to Left '''
self.displaymode &= ~self.LCD_ENTRYLEFT
self.write4bits(self.LCD_ENTRYMODESET | self.displaymode)


def autoscroll(self):
''' This will 'right justify' text from the cursor '''

self.displaymode |= self.LCD_ENTRYSHIFTINCREMENT
self.write4bits(self.LCD_ENTRYMODESET | self.displaymode)


def noAutoscroll(self):
''' This will 'left justify' text from the cursor '''

self.displaymode &= ~self.LCD_ENTRYSHIFTINCREMENT
self.write4bits(self.LCD_ENTRYMODESET | self.displaymode)


def writeonly4bits(self, bits, char_mode=False):
if bits > 15: return

#self.delayMicroseconds(1000)
bits = bin(bits)[2:].zfill(4)

GPIO.output(self.pin_rs, char_mode)

for pin in self.pins_db:
GPIO.output(pin, False)

for i in range(4):
if bits == "1":
GPIO.output(self.pins_db[::-1], True)
self.pulseEnable()


def write4bits(self, bits, char_mode=False):
''' Send command to LCD '''

#self.delayMicroseconds(1000) # 1000 microsecond sleep

bits = bin(bits)[2:].zfill(8)

GPIO.output(self.pin_rs, char_mode)

for pin in self.pins_db:
GPIO.output(pin, False)

for i in range(4):
if bits == "1":
GPIO.output(self.pins_db[::-1], True)

self.pulseEnable()

for pin in self.pins_db:
GPIO.output(pin, False)

for i in range(4, 8):
if bits == "1":
GPIO.output(self.pins_db[::-1], True)

self.pulseEnable()
# self.delayMicroseconds(1000)
#self.waitForReady()
#self.delayMicroseconds(5)


def resyncDisplay(self):
# Per the last page (pg 24) of OLED doc located at
# http://www.picaxe.com/docs/oled.pdf" onclick="window.open(this.href);return false;
# To resync the display send 5 0000's and then
# two function sets for 4 bit mode 0010
# The display should now be resynced to be ready to accept a new cmd

for i in range(1,5):
self.writeonly4bits(0x0, False)
self.write4bits(0x02, False)



def delayMicroseconds(self, microseconds):
seconds = microseconds / 1000000.0 # divide microseconds by 1 million for seconds
time.sleep(seconds)


def pulseEnable(self):
# the pulse timing in the 16x2_oled_volumio 2.py file is 1000/500
# the pulse timing in the original version of this file is 10/10
# with a 100 post time for setting

GPIO.output(self.pin_e, False)
self.delayMicroseconds(.1) # 1 microsecond pause - enable pulse must be > 450ns
GPIO.output(self.pin_e, True)
self.delayMicroseconds(.1) # 1 microsecond pause - enable pulse must be > 450ns
#time.sleep(0.000000001)
GPIO.output(self.pin_e, False)
#self.delayMicroseconds(10) # commands need > 37us to settle


def message(self, text):
''' Send string to LCD. Newline wraps to second line'''

for char in text:
if char == '\n':
self.write4bits(0xC0) # next line

else:
#time.sleep(.000001)

# Translate incoming character into correct value for European charset
# and then send it to display. Use space if character is out of range.
c = ord(char)
if c > 255: c = 32
self.write4bits(self.character_translation[c], True)


if __name__ == '__main__':

try:

lcd = Winstar_GraphicOLED()
lcd.oledReset()
lcd.home()
lcd.clear()

lcd.message("Winstar OLED\nPi Powered")
time.sleep(4)

lcd.home()
lcd.clear()

accent_min = u"àáâãäçèéëêìíî \nïòóôöøùúûüþÿ"
#for char in accent_min: print char, ord(char)
lcd.message(accent_min)
time.sleep(5)

lcd.home()
lcd.clear()

accent_maj = u"ÀÁÂÆÇÈÉÊËÌÍÎÐ \nÑÒÓÔÕÙÚÛÜÝÞß"
#for char in accent_maj: print char, ord(char)
lcd.message(accent_maj)

time.sleep(5)
lcd.home()
lcd.clear()

except KeyboardInterrupt:
pass

finally:
lcd.home()
lcd.clear()
lcd.message("Goodbye!")
time.sleep(2)
lcd.home()
lcd.clear()
GPIO.cleanup()


Ajouter une ligne dans le fichier rc.local pour que nos scripts se lance au démarrage de notre DAC :

Code : Tout sélectionner

sudo nano /etc/rc.local
Ajouter avant la dernière ligne "exit 0" le texte suivant :

Code : Tout sélectionner

python /home/pi/RaspDacDisplay.py
Sortir et enregistrer les modifications en tapant : "CTRL + X" puis "Y" puis "entrée"

Désormais le script démarrera automatiquement avec Volumio.

Avatar de l’utilisateur
Cram28
Messages : 62
Inscription : dim. 29 nov. 2015 13:41

Re: RaspDac Tutoriel Affichage sur Raspberry V2 + I-sabre V3

Message par Cram28 » ven. 15 avr. 2016 11:17

Merci!
Voilà qui va m'inspirer pour un tuto "RuneAudio"
@+

All4linux
Messages : 35
Inscription : sam. 09 avr. 2016 08:30

Re: RaspDac Tutoriel Affichage sur Raspberry V2 + I-sabre V3

Message par All4linux » ven. 15 avr. 2016 12:28

Bonjour,

Je viens de m'apercevoir que ces fichiers ne gèrent pas les problèmes d'accent.

Je ferai évoluer le tuto quand j'aurai mis la main sur la procédure.

Bonne journée.

Avatar de l’utilisateur
Cram28
Messages : 62
Inscription : dim. 29 nov. 2015 13:41

Re: RaspDac Tutoriel Affichage sur Raspberry V2 + I-sabre V3

Message par Cram28 » ven. 15 avr. 2016 12:49

C'est qu'est ce que je dis: C'est pas la dernière version... :wink:

Avatar de l’utilisateur
rikardo1979
Messages : 157
Inscription : sam. 09 avr. 2016 08:39
Localisation : UK
Contact :

Re: RaspDac Tutoriel Affichage sur Raspberry V2 + I-sabre V3

Message par rikardo1979 » sam. 16 avr. 2016 05:24

are you sure about your OLED wiring? As It did not work at all. Two more pins have to be connected and in different order

Like this
Image
~~~~>>>Please always follow rules and read before you post<<<~~~~

Avatar de l’utilisateur
Nicko
Administrateur - Site Admin
Messages : 443
Inscription : mer. 26 juil. 2006 12:21
Localisation : Bordeaux
Contact :

Re: RaspDac Tutoriel Affichage sur Raspberry V2 + I-sabre V3

Message par Nicko » lun. 18 avr. 2016 12:06

Cram28 a écrit :Merci!
Voilà qui va m'inspirer pour un tuto "RuneAudio"
@+
Dhrone a fait une procédure sur github
https://github.com/dhrone/Raspdac-Display#for-runeaudio" onclick="window.open(this.href);return false;

Je n'ai pas encore testé :)

Avatar de l’utilisateur
Cram28
Messages : 62
Inscription : dim. 29 nov. 2015 13:41

Re: RaspDac Tutoriel Affichage sur Raspberry V2 + I-sabre V3

Message par Cram28 » lun. 18 avr. 2016 19:30

QUOI !!!
Et il n'a rien dit ... (ou je n'ai pas vu :oops: )

Bon, je vais voir s'il propose la même chose (j'avais quasiment fini..., même le logo était prêt )
RuneAudi2.png
RD2RA
RuneAudi2.png (19.11 Kio) Consulté 4700 fois
Pour la peine, dhrone, je traduis pas ...! :D :D :D

Merci !!

Avatar de l’utilisateur
Nicko
Administrateur - Site Admin
Messages : 443
Inscription : mer. 26 juil. 2006 12:21
Localisation : Bordeaux
Contact :

Re: RaspDac Tutoriel Affichage sur Raspberry V2 + I-sabre V3

Message par Nicko » mar. 19 avr. 2016 17:08

C'est pour ca que je le poste, car je n'était pas sur qu'il ai communiqué dessus.

Merci pour ton aide Cram28, je compatis car je sais combien comment c'est long de faire un tuto :)

Avatar de l’utilisateur
Cram28
Messages : 62
Inscription : dim. 29 nov. 2015 13:41

Re: RaspDac Tutoriel Affichage sur Raspberry V2 + I-sabre V3

Message par Cram28 » mer. 20 avr. 2016 11:12

Bonjour,

Merci à Dhrone pour l'enrichissement de la procédure pour Rune-Audio !

Je me permets quelques retours ci-dessous sur la mise à jour et la procédure donnée.

RuneAudio - Confusion sur les versions
Je récupère pour ma part une version 0.4beta et pas 0.3: RuneAudio_rpi2_rp3_0.4-beta_20160321_2GB.img ...
(https://sourceforge.net/projects/runeau ... p_redirect" onclick="window.open(this.href);return false;)

Au login ssh, j'ai néanmoins une version d'OS en 0.3 beta:

Code : Tout sélectionner

  ===============  RuneOS distribution  ===============
    ____                      _             _ _       
   |  _ \ _   _ _ __   ___   / \  _   _  __| (_) ___  
   | |_) | | | | '_ \ / _ \ / _ \| | | |/ _` | |/ _ \ 
   |  _ <| |_| | | | |  __// ___ \ |_| | (_| | | (_) |
   |_| \_\\__,_|_| |_|\___/_/   \_\__,_|\__,_|_|\___/ 
                                                      
  ================  www.runeaudio.com  ================
  RuneOs: 0.3-beta
  RuneUI: 1.3-beta
  Hw-env: RaspberryPi 2
Va comprendre; c'est pas limpide ...

Sur cette version, les étapes 4.C-D et E ne fonctionnent pas ...
* l'étape << 4.C. "wget https://bootstrap.pypa.io/ez_setup.py" onclick="window.open(this.href);return false; -O - | python2" >> fait des choses...
* L'étape <<4.D. "pacman -Ss python2-pip" >> retourne :

Code : Tout sélectionner

  extra/python2-pip 8.1.0-1
    The PyPA recommended tool for installing Python packages"
et s’arrête là, et du coup le suite ne fonctionne pas ...

Je suis revenu à la bonne vienne méthode:
J'ai réalisé:
* Création d'un répertoire de travail

Code : Tout sélectionner

[root@runeaudio]# mkdir /home/raspdac
[root@runeaudio]# cd /home/raspdac
* Récupération du script python d'installation de pip

Code : Tout sélectionner

[root@runeaudio raspdac]# wget https://bootstrap.pypa.io/get-pip.py
* Installation de pip et des outils (l'interpréteur python se lance avec 'python2' sur cette distribution Rune/ArchLinux

Code : Tout sélectionner

[root@runeaudio raspdac]# python2 get-pip.py
* Et maintenant, on peut installer les packages nécessaires au fonctionnement de RaspDac-Display:

Code : Tout sélectionner

[root@runeaudio raspdac]# pip install moment
[root@runeaudio raspdac]# pip install python-mpd2
Remarques mineures sur RaspDac-Display.py

La commande ''git clone https://github.com/dhrone/RaspDac_Display''" onclick="window.open(this.href);return false; demande usr/psw ... mais il y a la possibilité 'donwload zip', on est sauvé ;).

La ligne de récupération de l'@IP du RaspDac fonctionne, mais je la trouve compliquée ... :) (ligne 317):

Code : Tout sélectionner

current_ip = commands.getoutput("hostname -i").strip() 
semble pouvoir être commune sur Volumio/Raspbian ET sur RuneAudio/ArchLinux aussi...(i minuscule plutôt que I majuscule)

Par ailleurs, il est possible de positionner l'affichage Hostname (Nom donné au RaspDac):

Code : Tout sélectionner

current_ip = commands.getoutput("hostname -f").strip()
On peut en effet nommer son raspdac (je sais pas moi, "farandole"...): C'est plus sympa que x.y.z.t ... :)
Dans le même esprit, ce serait sympa aussi de pouvoir afficher l'heure au format 12h AM/PM actuel ou 24h, au choix (j'avoue ne pas avoir trouvé le bon format :( ).
NB: N'oubliez pas de mettre à jour Winstar_GraphicOLED.py en fonction de votre version (lignes entre 52 et 70 à commenter/decommenter pour les pin GPIO ...)

Service et shutdown
Le script /var/www/command/rune_shutdown:
- n'est remplacé que si on est équipé de la gestion d'alim ?
- est-il pertinent d'ajouter l'arrêt du service écran oled avec ''systemctl stop oled'' ? Pour tenter d'afficher "GoodBye" ? (pour ceux qui n'ont pas la gestion d'alimentation, on voit ce message, on appuie sur le bouton pour couper le jus...). J'ai l'impression que çà supposerait des modifications.

Merci pour vos avis.

dhrone
Messages : 39
Inscription : sam. 27 févr. 2016 20:51

Re: RaspDac Tutoriel Affichage sur Raspberry V2 + I-sabre V3

Message par dhrone » jeu. 21 avr. 2016 15:03

@Cram28,

Thank you for the detailed comments and apologizes for not coordinating with you better. I had not realized that you were working on a tutorial for Runeaudio. I look forward to collaborating with you on this moving forward.

I had the chance to perform a walkthrough of the write-up yesterday morning and discovered several of the issues you noted. I've corrected what I found and the changed version of the instructions are up on the github site. Here's some additional comments on what you shared with me.

The Runeaudio site is not clear on what version you will receive when you download their distribution. The site lists the version as v0.3-beta but the actual download references v0.4-beta in the filename. I can confirm that the MD5 sum a072179a40613a5cbb277cc33d1ace9c is the version of the image I used to create the instructions.

When I did my detailed walkthrough yesterday, the repair of the distutils system was not needed so I have removed that step in the instructions. I'm wondering though if I should include it as an optional step if the pip2 commands fail as they did when I did my original installation of the image. In either case, the instruction to install python2-pip was flawed. It should have read

Code : Tout sélectionner

pacman -Sy python2-pip
I like your idea of creating a working directory and will add that to the instructions.

I would caution against the use of pip to install Python2 packages. This version of ArchLinux considers python3 as the default python version even though the Runeaudio distribution only has python2 installed. Because of this, it is safer to use the pip2 command to ensure that you are specifically installing the packages into the python2 system.

Code : Tout sélectionner

pip2 install moment
pip2 install python-mpd2
I did not realize that git clone required an account on github. Your solution to that problem is great. The only change I made was to download the gzipped version of the repository.

Code : Tout sélectionner

wget https://github/dhrone/Raspdac-Display/archive/master.tar.gz
tar xvf master.tar.gz
I also noted the problem with hostname -i but don't think that hostname -f is the right answer. I have instead used a technique which I believe should always produce the ip address of the interface that is current the preferred route to the internet. So the line in RaspDac_Display.py now reads:

Code : Tout sélectionner

current_ip = commands.getoutput("ip -4 route get 1 | head -1 | cut -d' ' -f8 | tr -d '\n'").strip()
I will look into adding an option to display in 12 or 24 hour format. I will also add one that allows you to specify a different name on start-up.

Great point on the rune_shutdown command. It should only be changed if the system requires power management. I will move the related instructions to that section. I will also look into including the oled in the shutdown routines so that it displays the goodbye message and blanks the display before the system shuts down.

Thanks again for your review. Do think think it would be a good idea to create a French version of the instructions? I am unable to but perhaps you might consider it?

Best regards,
Dhrone

dhrone
Messages : 39
Inscription : sam. 27 févr. 2016 20:51

Re: RaspDac Tutoriel Affichage sur Raspberry V2 + I-sabre V3

Message par dhrone » dim. 24 avr. 2016 15:01

@Cram28

I made the additional changes. These include...
* Updating the instructions and performing another complete walk through
* Added 12 and 24 hour support. Change TIME24HOUR to True or False.
* Added a configuration variable to make it easy to change the start-up message. Change STARTUP_MSG to whatever you like. Place a \n to add a second line ('e.g. "Raspdac\nStarting").
* Now handling SIGTERM so that the Goodbye messages is displayed before program exits

Best regards,
Dhrone

-----

[Traduction automatique en français]

@ Cram28

Je fis les changements supplémentaires. Ceux-ci inclus...
* Mise à jour des instructions et effectuer une autre promenade complète à travers
* Ajout de 12 et 24 heures de soutien. Changer TIME24HOUR à True ou False.
* Ajout d'une variable de configuration pour le rendre facile de changer le message de démarrage. Changer STARTUP_MSG à ce que vous voulez. Placez un \ n d'ajouter une deuxième ligne ('par exemple "Raspdac \ nStarting").
* Maintenant, la manipulation SIGTERM de sorte que les messages Adieu sont affichées avant les sorties du programme

Meilleures salutations,
Dhrone

Avatar de l’utilisateur
Cram28
Messages : 62
Inscription : dim. 29 nov. 2015 13:41

Re: RaspDac Tutoriel Affichage sur Raspberry V2 + I-sabre V3

Message par Cram28 » dim. 24 avr. 2016 17:02

Bonjour dhrone,

Super, merci. Je vais récupérer celà.

Je te propose - tardivement - une traduction de ton fichier readme ci-dessous: Du coup elle est déjà fausse... :D
Essaie de refaire un translate pour voir si cela te convient...

<<traduction>>
Hello drone
Great, thank you. I'll get it.
I propose - late - translation of your readme file below: So it is already wrong ...: D
Try to make another translate to see if it suits you ...

=== README en français ===
"Raspdac-Display", un programme d'affichage alternatif pour le Raspdac d'AudioPhonics et l'écran Winstar OLED 16x2.

Le RaspDac est un lecteur audio de flux numériques qui s'appuie sur le Raspberry Pi et le DAC Sabre ES9023 et qui supporte l'exécution de logiciels de diffusion de musique, comme Volumio ou Rune-Audio. Le RaspDac dispose en option du composant WEH001602A Winstar OLED comme dispositif d'affichage.

Ce projet - développé en langage python - est un programme de gestion de l'écran, en alternative à celui proposé par AudioPhonics, fournisseur du RaspDac (cela implique donc que l'option d'affichage OLED a été retenue...).

Installation

1. Pour la distribution "Volumio" (v1.55)

Ces instructions s'appliquent à la version v1.55 de la distribution Volumio; on suppose que l'écran OLED Winstar a été connecté au Raspberry Pi 2 selon les instructions fournies par AudioPhonics sur le forum viewtopic.php?f=4&t=1492.
Si vous avez câblé l'écran de façon différente, assurez-vous d'ajuster les affectations des broches GPIO en conséquence.

Remarque: l'affectation des broches pour les versions V2 et V3 du RaspDac est déjà définie au début du fichier ''Winstar_GraphicOLED.py'' (à partir ligne 52).

Placez les fichiers ''RaspDacDisplay.py'' et ''Winstar_GraphicOLED.py'' dans un répertoire de votre choix (par exemple ''/home/pi'').
Pour automatiser l’exécution du programme au démarrage du RaspDac, il faut ajouter à la fin du fichier ''/etc/rc.local'' l'instruction indiquée ci-dessous.
Pour s'assurer d'exécuter l'affichage lorsque le RaspDac est complètement démarré, c'est une bonne idée de mettre en place une temporisation avant le lancement de l'affichage. L'exemple indiqué ici permet de "patienter" 20 secondes.

Code : Tout sélectionner

   /etc/rc.local
   #!/bin/sh -e
   #
   # rc.local
   #
   # This script is executed at the end of each multiuser runlevel.
   # Make sure that the script will "exit 0" on success or any other
   # value on error.
   #
   # In order to enable or disable this script just change the execution
   # bits.
   #
   # By default this script does nothing.
   /var/www/command/player_wdog.sh startup & > /dev/null 2>&1

   (sleep 20; python /home/pi/RaspDacDisplay.py) &
   exit 0
=> Instructions complémentaires:
* ''RaspDacDisplay.py'' dispose d'un fichier journal, qu'il alimente par défaut dans le le fichier de log ''/var/log/RaspDacDisplay.log''.
* Il y a plusieurs variables fixées au début du programme dans le fichier ''RaspDacDisplay.py'', que vous pouvez modifier/ajuster pour un comportement différent. Celles-ci sont:
ARTIST_TIME - Définit le délai en secondes de bascule dans l'affichage entre nom de l'artiste et le nom du morceau
TITLE_TIME - Dans l'autre sens, définit le délai en secondes de bascule dans l'affichage entre le nom du morceau et celui de l'artiste
HESITATION_TIME - Cette variable s'applique au mécanisme de défiment/scrolling. Il s'agit du délai en secondes appliqué entre l'affichage fixe et le début du défilement des noms d'artiste ou de morceau, dont la longueur est supérieure aux 16 caractères par ligne de l'écran.
(cà, c'est un peu alambiqué ...)
TIMEZONE - Définit le fuseau horaire utilisé pour afficher l'heure courante. Les valeurs possibles peuvent être trouvées dans le répertoire ''/usr/share/zoneinfo''. Exemples:
La ville de New York. TIMEZONE = "US / Eastern"
San Francisco. TIMEZONE = "US / Pacifique"
Paris. TIMEZONE = "Europe / Paris"

* Le programme repose sur deux paquets de python qui ne sont pas installés par défaut sur la distribution Volumio v1.55. Il s'agit des paquets ''moment'' et ''python-MPD2''. Ils est plus commode des les installer à l'aide du Gestionnaire de paquets Python (Outils ''PIP''). ''PIP'' n'est pas installé nativement non plus, vous pouvez l'ajouter à l'aide de la commande suivante:

Code : Tout sélectionner

apt-get install python-setuptools && easy_install pip
Cette opération réalisée, vous pouvez installer ''moment'' et ''python-MPD2'' avec les commandes suivantes:

Code : Tout sélectionner

pip installer moment 
pip installer python-MPD2
Utilisation: L'instruction ci-dessous, à partir du répertoire du programme, démarre le RaspDacDisplay comme un processus d'arrière-plan (en dehors du démarrage automatique)

Usage

Code : Tout sélectionner

 ./python RaspDacDisplay.py &

2. Pour la distribution "Rune-Audio" (v..3Beta)

Ces instructions s'appliquent à la version v0.3 beta de la distribution Rune-Audio; on suppose que l'écran OLED Winstar a été connecté au Raspberry (Pi 2 ou Pi 3) selon les instructions fournies par AudioPhonics sur le forum "viewtopic.php?f=4&t=1492".
Si vous avez câblé l'écran de façon différente, assurez-vous d'ajuster les affectations des broches GPIO en conséquence.

Remarque: l'affectation des broches pour les versions V2 et V3 du RaspDac est déjà définie au début du fichier ''Winstar_GraphicOLED.py'' (à partir ligne 52).

Plusieurs adaptations sont nécessaires sur cette distribution de Rune-Audio pour rendre le RaspDac pleinement opérationnel. Une description de ces adaptations est proposée étape par étape ci-dessous.
Veuillez noter que ce jeu d'instructions est appliqué ici avec un RaspBerry Pi 3 et l'image v0.3 beta (hachage MD5 a072179a40613a5cbb277cc33d1ace9c); les manipulations proposées ne seront peut-être plus nécessaires dans des versions à venir.

Etape 1.
Téléchargez et installez l'image sur votre carte SD? Pour cela, suivez les instructions données dans la documentation de Rune-Audio sur http://www.runeaudio.com/documentation/" onclick="window.open(this.href);return false;

Les étapes suivantes nécessitent que votre Raspdac soit sous tension, avec un accès internet et que vous y soyez connectés sur le compte ''root'.
Rune-Audio supporte nativement le protocole SSH; le compte ''root'' a le mot de passe ''rune'' par défaut.

Etape 2.
Pour que soit reconnu le DAC ES9023, il faut dé-commenter une ligne du fichier ''/boot/config.txt''. Utiliser l'éditeur de texte de votre choix, nano ou vi par exemple

Code : Tout sélectionner

nano /boot/config.txt
Placez le curseur au début de la ligne contenant ''# dtoverlay = hifiberry-dac'', supprimez le ''#'' pour activer la ligne, enregistrez le fichier et quittez. Cette ligne est la 46. ''CTRL+X + Y'' permet d'enregistrer vos modifications sous ''nano'')

Code : Tout sélectionner

  # Uncomment one of these lines to enable an audio interface
  dtoverlay=hifiberry-dac
  #dtoverlay=hifiberry-dacplus
  #dtoverlay=hifiberry-digi
  #dtoverlay=hifiberry-amp
  #dtoverlay=iqaudio-dac
Etape 3.
Cette étape est facultative. La distribution Rune-Audio installe une partition Linux pour son fonctionnement qui occupe 2Go sur la carte microSD. L'espace éventuellement restant est perdu. Pour étendre la partition Rune-Audio à la totalité de l'espace disponible, suivez les instructions données là: http://www.runeaudio.com/documentation/ ... tition-sd/" onclick="window.open(this.href);return false; .
Vous devrez probablement redémarrer votre RaspDac après ces modifications de partition et suite aux commandes ''fdisk'' et ''resize2fs''.

Etape 4.
Télécharger les dernières modifications disponibles de l'interface web de Rune-Audio, au moyen des commandes suivantes:

Code : Tout sélectionner

    cd / var / www
    git pull
Etape 5.
Télécharger et installer les paquets python nécessaires au fonctionnement du programme RaspDac-Display.
Pour ce faire, plusieurs opérations:

A. Mise à jour du référentiel des versions de logiciels, packages et autres librairies du système (ArchLinux).
Cette opération est nécessaire pour synchroniser les versions de référence entre le système RaspDac et les dépôts officiels ArchLinux / Raspberry. On s'assure ainsi que c'est bien la dernière version disponible d'un paquet qui sera sélectionnée pour installation.
La commande est la suivante:

Code : Tout sélectionner

         pacman -Syu

        :: Synchronizing package databases...
        core                                               209.7 KiB  1049K/s 00:00 [###########################################] 100%
        extra                                                2.3 MiB  1168K/s 00:02 [###########################################] 100%
        community                                            3.7 MiB  8.37M/s 00:00 [###########################################] 100%
        alarm is up to date
        aur is up to date
        :: Starting full system upgrade...
        resolving dependencies...
        looking for conflicting packages...

        Packages (80) adwaita-icon-theme-3.20-1  alsa-lib-1.1.1-1  alsa-utils-1.1.1-1  at-spi2-atk-2.20.1-1  at-spi2-core-2.20.1-1
                     atk-2.20.0-1  bluez-5.39-1  bluez-utils-5.39-1  boost-libs-1.60.0-4  ca-certificates-mozilla-3.23-3
                     cmake-3.5.1-1  colord-1.3.2-1  curl-7.48.0-1  dconf-0.26.0-1  device-mapper-2.02.149-1  dhcpcd-6.10.2-1
                     elfutils-0.166-1  expat-2.1.1-1  fontconfig-2.11.95-1  gcr-3.20.0-1  gdk-pixbuf2-2.34.0-1  git-2.8.0-1
                     glib-networking-2.48.0-1  glib2-2.48.0-1  gnutls-3.4.11-1  graphite-1:1.3.8-1  groff-1.22.3-6
                     gsettings-desktop-schemas-3.20.0-1  gst-plugins-base-libs-1.8.0-1  gstreamer-1.8.0-1
                     gtk-update-icon-cache-3.20.3-1  gtk3-3.20.3-1  harfbuzz-1.2.6-1  harfbuzz-icu-1.2.6-1  icu-57.1-1
                     inputproto-2.3.2-1  iproute2-4.4.0-1  iw-4.3-1  json-glib-1.2.0-1  jsoncpp-1.7.2-1  libdrm-2.4.67-2
                     libelf-0.166-1  libgusb-0.2.9-1  libmm-glib-1.4.14-1  libnl-3.2.27-1  libnm-glib-1.0.12-1  libpng-1.6.21-1.1
                     librsvg-2:2.40.15-1  libsecret-0.18.5-1  libsoup-2.54.0.1-1  libtasn1-4.8-1  libva-1.7.0-1  libwbclient-4.4.2-1
                     libxkbcommon-0.6.1-1  libxml2-2.9.3+14+gd5bd2a9-1  linux-raspberrypi-4.4.7-2  mesa-11.2.0-1.2
                     mesa-libgl-11.2.0-1.2  nss-3.23-3  ntfs-3g-2016.2.22-1  pacman-mirrorlist-20160319-1  pango-1.40.1-1
                     python2-2.7.11-3  raspberrypi-firmware-20160412-1  raspberrypi-firmware-bootloader-20160412-1
                     raspberrypi-firmware-bootloader-x-20160412-1  raspberrypi-firmware-examples-20160412-1
                     raspberrypi-firmware-tools-20160412-1  s-nail-14.8.8-1  shared-mime-info-1.6-1  smbclient-4.4.2-1
                     sqlite-3.12.1-1  sudo-1.8.16-1  tzdata-2016c-1  vala-0.32.0-1  wayland-protocols-1.3-1  webkitgtk-2.4.11-1
                     xorg-server-1.18.3-1  xorg-server-common-1.18.3-1  xorg-xinit-1.3.4-4

        Total Download Size:   151.36 MiB
        Total Installed Size:  571.61 MiB
        Net Upgrade Size:        3.50 MiB

        :: Proceed with installation? [Y/n] 
Je vous recommande de NE PAS procéder à l'installation comme dans mon système, elle semblait le déstabiliser. YMMV (???).


B. Ajouter la librairies ''WiringPi''. Ce composant logiciel est utilisé dans la fonction de gestion d'alimentation du RaspDAC pour le DAC en v3.
Vous pouvez ignorer cette opération si vous êtes en v2.

Code : Tout sélectionner

 pacman -Sy wiringpi

C. Installez le gestionnaire de paquets Python (Outils ''PIP'') pour python2.

Code : Tout sélectionner

    pacman -Sy python2-pip
D. Installez les paquets ''moment'' et ''python-MPD2''.

Code : Tout sélectionner

    PIP2 installer instant
    PIP2 installer python-MPD2
Il est possible que vous ayez un message d'erreur lors de l'exécution des commandes ''PIP2'', vous devrez peut-être réparer l'installation distutils. Cela peut être fait en installant explicitement ez_setup.py.

Code : Tout sélectionner

    wget https://bootstrap.pypa.io/ez_setup.py -O - | python2

Etape 6.
Télécharger la dernière version du logiciel RaspDac_Display sur github

Code : Tout sélectionner

mkdir /home/raspdac
cd /home/raspdac
wget https://github.com/dhrone/Raspdac-Display/archive/master.tar.gz
tar xvf master.tar.gz
cd /home/raspdac/Raspdac-Display-master/
==> A cette étape, c'est le moment de suivre les "instructions complémentaires" ci-dessous, si vous le souhaitez..

Etrape 7.
Placez les fichiers dans leurs répertoires appropriés et enregistrez le service avec ''systemctl'' pour permettre le lancement au démarrage
Toutes ces commandes doivent être émises à partir du répertoire ''/home/raspdac/Raspdac-Display-master/'' créé à l'étape précédente.

A. fichiers pour l'affichage

Code : Tout sélectionner

        cp oled.service /usr/lib/systemd/system/
        cp RaspDacDisplay.py /usr/local/bin/
        cp Winstar_GraphicOLD.py /usr/local/bin/
        systemctl enable oled.service
B. Fichiers pour la fonction de gestion de l'alimentation (DAC v3 uniquement)
Attention: On remplace ici la version officielle de Rune-Audio de la commande ''rune_shutdown''. Si vous essayez de d'installer la dernière version de l'interface web de Rune-Audio (RuneAudio UI depuis github), vous aurez un échec, à moins d'annuler d'abord la modification.

Code : Tout sélectionner

        cp sds.service /usr/lib/systemd/system/
        cp sds.sh /usr/local/bin/
        cp rune_shutdown /var/www/command/
        chmod +x /usr/local/bin/sds.sh
        chmod +x /var/www/command/rune_shutdown  
        systemctl enable sds.service

Etape 8.
Redémarrez (et profiter) !!!

Code : Tout sélectionner

reboot
# ou bien
shutdown -r now
=> Instructions complémentaires:
* ''RaspDacDisplay.py'' dispose d'un fichier journal, qu'il alimente par défaut dans le le fichier de log ''/var/log/RaspDacDisplay.log''.
* Il y a plusieurs variables fixées au début du programme dans le fichier ''RaspDacDisplay.py'', que vous pouvez modifier/ajuster pour un comportement différent. Celles-ci sont:
ARTIST_TIME - Définit le délai en secondes de bascule dans l'affichage entre nom de l'artiste et le nom du morceau
TITLE_TIME - Dans l'autre sens, définit le délai en secondes de bascule dans l'affichage entre le nom du morceau et celui de l'artiste
HESITATION_TIME - Cette variable s'applique au mécanisme de défiment/scrolling. Il s'agit du délai en secondes appliqué entre l'affichage fixe et le début du défilement des noms d'artiste ou de morceau, dont la longueur est supérieure aux 16 caractères par ligne de l'écran.
(cà, c'est un peu alambiqué ...)
TIMEZONE - Définit le fuseau horaire utilisé pour afficher l'heure courante. Les valeurs possibles peuvent être trouvées dans le répertoire ''/usr/share/zoneinfo''. Exemples:
La ville de New York. TIMEZONE = "US / Eastern"
San Francisco. TIMEZONE = "US / Pacifique"
Paris. TIMEZONE = "Europe / Paris"
===

Merci!

Avatar de l’utilisateur
Cram28
Messages : 62
Inscription : dim. 29 nov. 2015 13:41

Re: RaspDac Tutoriel Affichage sur Raspberry V2 + I-sabre V3

Message par Cram28 » dim. 24 avr. 2016 18:20

Hello dhrone,

Oui, c'est sympa !

Je te fais un retour ci-dessous (il y a des choses qui ne sont pas liées à ta dernière version)
- TIME24HOURS:
J'avais déjà essayé le format ''HH:MM'' et je n'y étais pas parvenu... et je n'avais pas réfléchi :roll:
Par exemple aujourd'hui, et quelque soit l'heure exacte, j'ai ''xx:04'' tout le temps. Et je pense que le mois prochain, j'aurais ''xx:05''.
Je crois en effet qu'il s'agit des mois pour MM et pas des minutes.
J'ai tenté

Code : Tout sélectionner

if TIME24HOUR == True:
  current_time = moment.utcnow().timezone(TIMEZONE).format("HH:mm").strip()
else:
  current_time = moment.utcnow().timezone(TIMEZONE).format("h:m a").strip()
On dirait que cela fonctionne...

- Que penses-tu de positionner, (pour Rune-Audio / ArchLinux) ces deux lignes là dans les fichier ''.py'' ?

Code : Tout sélectionner

#!/usr/bin/python2
# coding: UTF-8
- En ligne 263 de ''RaspDacDisplay.py'', tu as positionné un caractère '\t'' dans la chaîne pour gérer le décalage entre la fin et la reprise de la chaîne dans le scrolling. Je crois que l'afficheur ne sait pas le gérer (il affiche un pavé). J'ai donc modifié la table de transposition en mettant '32' à la position 9:

Code : Tout sélectionner

character_translation = [   0,0,0,0,0,0,0,0,0,32,                       #0
Je ne sais pas si c'est une bonne idée...

Je vais finir par devenir bon en python ...

Merci beaucoup à toi !!

{Traduction]
Hello drone
Yes, it's nice!
I make you a return below (there are things that are not related to your latest version)

- TIME24HOURS:
I had already tried the format 'HH: MM' 'and I was not achieved ... and I had not thought: roll:
For example today, and whatever the time, I '' xx: 04 '' all the time. And I think next month, I would have '' xx: 05 ''.
Indeed, I believe that this is the month MM and not minutes.
I tried

Code : Tout sélectionner

 
if TIME24HOUR == True: 
  current_time moment.utcnow = () timezone (TIMEZONE) .format ( "HH: mm"). Strip ().
else:
  current_time moment.utcnow = () timezone (TIMEZONE) .format ( "h: m a") strip ().
Looks like it works ...

- What do you think of position (Rune-Audio / ArchLinux) these two lines there in the file '' .py ''?

Code : Tout sélectionner

#! / Usr / bin / python2
# Coding: UTF-8
- On line 263 of '' RaspDacDisplay.py '', you set a character '\ t' 'in the chain to manage the gap between the end and the recovery of the chain in the scrolling. I believe that the display can not handle it (it displays a keypad). so I modified the translation table by setting '32' at the position 9 :

Code : Tout sélectionner

character_translation [0,0,0,0,0,0,0,0,0,32, # 0 
I do not know if it's a good idea ...

I will eventually become good in python ...

Thank you very much !!

@+

dhrone
Messages : 39
Inscription : sam. 27 févr. 2016 20:51

Re: RaspDac Tutoriel Affichage sur Raspberry V2 + I-sabre V3

Message par dhrone » dim. 24 avr. 2016 19:55

@Cram,

Yes, the format string should have been HH:mm, not HH:MM for the 24 hour format.

There is no reason not to add the two lines you suggest to the beginning of the .py files except that I am not sure where the python2 interpreter is on the different distributions (e.g. Volumio/Runeaudio). You can add them if you prefer.

I'm not sure how the tab character '\t' got into that string. I think my editor must have added it. The space between the values was supposed to be 10 spaces. I've fixed that issue in the string. There is no harm in placing the space character in the tab position so I am accepting that change as well.

Thanks for your help!
Dhrone

[Traduction automatique en français]

@Cram28,

Oui, la chaîne de format aurait dû être HH: mm, pas HH: MM pour le format de 24 heures.

Il n'y a aucune raison de ne pas ajouter les deux lignes que vous suggérez au début des fichiers .py sauf que je ne sais pas où l'interpréteur python2 est sur les différentes distributions (par exemple Volumio / Runeaudio). Vous pouvez les ajouter si vous préférez.

Je ne suis pas sûr de savoir comment le caractère de tabulation \ 't' est entré dans cette chaîne. Je pense que mon éditeur doit avoir ajouté il. L'espace entre les valeurs était censé être 10 places. J'ai fixé cette question dans la chaîne. Il n'y a pas de mal à placer le caractère d'espace dans la position de l'onglet donc j'accepte que le changement aussi bien.

Merci de votre aide!
Dhrone

Répondre