Gambas-it

Piattaforme => Raspberry Pi => Topic aperto da: akrobaticone - 29 Giugno 2014, 08:31:48

Titolo: PiFace e wiringPi
Inserito da: akrobaticone - 29 Giugno 2014, 08:31:48
ho una scheda PiFace e sto tentando di farla funzionare con la libreria wiringpi

scaricata e compilata

per inizializzare la PiFace bisogna usare la funzione
wiringPiSetupPiFace()

come affermato quì
https://projects.drogon.net/raspberry-pi/wiringpiface/ (https://projects.drogon.net/raspberry-pi/wiringpiface/)
controllando con il fantastico programma di Vuott, il "Cercafunzioni" nelle librerie generate dalla compilazione
la funzione di cui sopra non c'è
spulciando nei sorgenti viene solo dichiarata come extern in wiringPi.h con una nota sopra (deprecated)

ho provato gli esempi invece funzionano
allora ho controllato e ho trovato la funzione
piFaceSetup()
lanciando questa mi da un errore
mcp23s17 simbolo non trovato

per il momento mi sono fermato qui

proverò anche a scrivere allo sviluppatore della libreria
Titolo: Re: PiFace e wiringPi
Inserito da: vuott - 29 Giugno 2014, 14:00:41
piFaceSetup()
lanciando questa mi da un errore
mcp23s17 simbolo non trovato
mcp23s17, se non ho compreso male, è un microchip.
Titolo: Re: PiFace e wiringPi
Inserito da: akrobaticone - 29 Giugno 2014, 21:29:12
@Vuott: si è un chip per la decodifica SPI

Riassumendo
ci sono due librerie
1)  wiringPi
2)  wiringPiDev

Gordon, Il creatore delle librerie mi ha confermato che
per inizializzare la PiFace bisogna chiamare prima la funzione
Codice: c [Seleziona]
wiringPiSetup() 

contenuta nella 1
poi la funzione
Codice: c [Seleziona]
piFaceSetup()

contenuta nella 2

naturalmente ho dichiarato

Codice: gambas [Seleziona]
public extern wiringPiSetup() as integer in "libwiringPi"
public extern piFaceSetup(PIN as integer) as integer in "libwiringPiDev"


le funzioni vengono trovate

ora però ecco l'inghippo

piFaceSetup() (lib 2) richiama una routine mcp23s17Setup() che è contenuta nella (lib 1)

infatti l'errore che  ottengo è

GPIO: symbol lookup error: /usr/local/lib/libwiringPiDev.so: undefined symbol: mcp23s17Setup

gli esempi che sono allegati alla libreria invece funzionano, si lanciano da terminale.
usano le due funzioni di cui sopra come inizializzazione

A questo punto posso pensare che il problema sia il modo in cui vengono dichiarate le funzioni EXTERN

I sorgenti di wiringPi sono disponibili e se li ho quasi capiti io...........




Titolo: Re: PiFace e wiringPi
Inserito da: vuott - 29 Giugno 2014, 23:40:12
piFaceSetup() (lib 2) richiama una routine mcp23s17Setup() che è contenuta nella (lib 1)

infatti l'errore che  ottengo è

GPIO: symbol lookup error: /usr/local/lib/libwiringPiDev.so: undefined symbol: mcp23s17Setup

Come hai dichiarato con Extern la funzione esterna mcp23s17Setup() ?
Titolo: Re: PiFace e wiringPi
Inserito da: akrobaticone - 30 Giugno 2014, 08:09:40
la funzione mcp23s17Setup() ho provato a dichiararla  con le due librerie

libwiringPi e libwiringpiDev

anche se nel programma Gambas non viene mai richiamata

Allego la libreria in oggetto
Titolo: Re: PiFace e wiringPi
Inserito da: vuott - 30 Giugno 2014, 10:08:12
Puoi allegare anche le due librerie condivise .so ?
Titolo: Re: PiFace e wiringPi
Inserito da: akrobaticone - 30 Giugno 2014, 11:09:24
allegate le librerie

il codice Gambas

Codice: gambas [Seleziona]

public extern wiringPiSetup() as integer in "libwiringPi"
public extern piPifaceSetup(pin as integer) as integer in "libwiringPiDev"
public extern mcp23s17Setup(a as integer , b as integer , c as integer) in "libwiringPi" ' aggiunta per test

Form_Open()

wiringPiSetup()
piFaceSetup(200)










Titolo: Re: PiFace e wiringPi
Inserito da: vuott - 30 Giugno 2014, 11:21:15
gli esempi che sono allegati alla libreria invece funzionano, si lanciano da terminale.
usano le due funzioni di cui sopra come inizializzazione
Puoi indicare un paio di questi esempi in C che funzionano ?
Titolo: Re: PiFace e wiringPi
Inserito da: akrobaticone - 30 Giugno 2014, 11:41:57
ne ho provato uno
blink
si trovano nella cartella examples
vanno compilati e po si lanciano
sudo ./blink

ho dato anche io una occhiata a blink.c

inizializza con
Codice: c [Seleziona]
wiringPiSetup();
piFaceSetup(200);


dimenticavo
anche gambas va avviato con sudo

in alternativa va usata
wiringPisetupSys()
Titolo: Re: PiFace e wiringPi
Inserito da: vuott - 30 Giugno 2014, 12:03:03
Codice: gambas [Seleziona]

public extern wiringPiSetup() as integer in "libwiringPi"
public extern piPifaceSetup(pin as integer) as integer in "libwiringPiDev"
public extern mcp23s17Setup(a as integer , b as integer , c as integer) in "libwiringPi" ' aggiunta per test

Form_Open()

wiringPiSetup()
piFaceSetup(200)


Vedi che hai commesso un errore nella dichiarazione della seconda funzione:
Codice: gambas [Seleziona]

public extern piPifaceSetup(pin as integer) as integer in "libwiringPiDev"

che invece è:
Codice: c [Seleziona]
int piFaceSetup (const int pinBase)

 (come correttamente hai invece scritto poi nella routine)

Quindi va dichiarata:
Codice: gambas [Seleziona]

public extern piFaceSetup(pin as integer) as integer in "libwiringPiDev"
Titolo: Re: PiFace e wiringPi
Inserito da: akrobaticone - 30 Giugno 2014, 12:12:08
Hai ragione,ho trascritto male la funzione
nel codice sul Raspy è corretta
Titolo: Re: PiFace e wiringPi
Inserito da: vuott - 30 Giugno 2014, 12:16:31
Sulla base dei sorgenti che hai inviato, mi sono ricreato ex-novo le due librerie condivise .so (le altre erano state generate per un sistema a 32-bit), e le due inizializzazioni mi pare che funzionino.
V'è da annotare che utilizzando la prima funzione
Codice: gambas [Seleziona]
wiringPiSetup()

però in console ottengo questo avviso/errore:
" wiringPiSetup: Must be root. (Did you forget sudo?) "
coerentemente con quanto affermato qui:
https://projects.drogon.net/raspberry-pi/wiringpi/functions/
e come hai anche tu ricordato:
anche gambas va avviato con sudo

in alternativa va usata
wiringPisetupSys()

e pertanto ho impostato quest'altra funzione:
Codice: gambas [Seleziona]
wiringPisetupSys()

che non mi dà errori strutturali se non questo:
piBoardRev: Unable to determine board revision from /proc/cpuinfo
 -> No "Revision" line
 ->  You may want to check:
 ->  http://www.raspberrypi.org/phpBB3/viewtopic.php?p=184410#p184410

ma verosimilmente perché non ho raspberry.  :-\
Titolo: Re: PiFace e wiringPi
Inserito da: akrobaticone - 30 Giugno 2014, 12:28:04
stai provando su raspberry?
ora provo su questo Pc

Titolo: Re: PiFace e wiringPi
Inserito da: vuott - 30 Giugno 2014, 12:29:01
..... se non questo:
piBoardRev: Unable to determine board revision from /proc/cpuinfo
 -> No "Revision" line
 ->  You may want to check:
 ->  http://www.raspberrypi.org/phpBB3/viewtopic.php?p=184410#p184410

ma verosimilmente perché non ho raspberry.  :-\
Penso proprio che sia determinato dal fatto che non uso Raspberry; infatti se, dopo averlo compilato, lancio da terminale con sudo quel breve codice usando la funzione " wiringPiSetup() ", ottengo quel medesimo avviso.
Titolo: Re: PiFace e wiringPi
Inserito da: vuott - 30 Giugno 2014, 12:31:44
stai provando su raspberry?
No, non ho raspberry, ma ho semplicemente provato il tuo codice Gambas usando le due librerie esterne condivise .so che ho generato dai sorgenti che hai passato.
Titolo: Re: PiFace e wiringPi
Inserito da: akrobaticone - 30 Giugno 2014, 12:39:41
Il programma si ferma alla prima funzione perchè sotto non trova Raspberry
Quando gira su raspy la prima passa, si ferma alla seconda perchè non trova la funzione che inizializza il Chip

Se gira da terminale vuol dire che le librerie le vede, a mio avviso c'è qualche cosa in gambas che impedisce alla funzione che si trova in una libreria di vedere la funzione che cerca nell'altra
provare a modificare i sorgenti di wiringPi?
Titolo: Re: PiFace e wiringPi
Inserito da: vuott - 30 Giugno 2014, 13:12:10
 :-\
Titolo: Re: PiFace e wiringPi
Inserito da: vuott - 30 Giugno 2014, 13:19:18
Quando gira su raspy la prima passa, si ferma alla seconda perchè non trova la funzione che inizializza il Chip
Ossia la famosa funzione: mcp23s17Setup()  ?


Se gira da terminale vuol dire che le librerie le vede, a mio avviso c'è qualche cosa in gambas che impedisce alla funzione che si trova in una libreria di vedere la funzione che cerca nell'altra
...sì, è molto strano !  :-X


provare a modificare i sorgenti di wiringPi?
Come penseresti di fare ?
Titolo: Re: PiFace e wiringPi
Inserito da: akrobaticone - 30 Giugno 2014, 13:29:28
no so bene cosa fare
a rigor di logica le librerie dovrebbero funzionare senza problemi, perlomeno su altri sistemi vanno
potrei trasferire la funzione incriminata sull'altra libreria e ricompilare, ma mi piacerebbe capire il motivo per cui non va

in ogni caso da terminale funziona, quindi non è un problema del sistema

ci penso un po su, ma non ho molte conoscenze per andare a fondo del problema :-\
Titolo: Re: PiFace e wiringPi
Inserito da: vuott - 30 Giugno 2014, 13:51:41
Un'alternativa sarebbe invocare la funzione indirettamente da una libreria esterna appositamente da te creata. In tal modo faresti gestire quella funzione dal C come quando lanci gli esempi dal terminale.
Titolo: Re: PiFace e wiringPi
Inserito da: akrobaticone - 30 Giugno 2014, 14:03:48
e se includessi la funzione piFaceSetup() nella libreria libwiringPi?
dopo pranzo ci provo....

mi rimane però sempre il dubbio sul perchè in gambas non funziona ???
Titolo: Re: PiFace e wiringPi
Inserito da: vuott - 30 Giugno 2014, 15:17:41
e se includessi la funzione piFaceSetup() nella libreria libwiringPi?
Non comprendo perché potrebbe funzionare.  :-\


mi rimane però sempre il dubbio sul perchè in gambas non funziona ???
Per tentare di sciogliere il tuo dubbio, dovresti porre questa questione nella Mailing List ufficiale.

Titolo: Re: PiFace e wiringPi
Inserito da: vuott - 30 Giugno 2014, 15:34:05
...scusami, una domanda: poiché non ho installato nel sistema questi tre file d'intestazione: wiringPi.h, mcp23s17.h e piFace.h, né quindi le librerie condivise "libwiringPi:so:2.0" e "libwiringPiDev.so.2.0", puoi indicarmi i loro esatti percorsi nel tuo ?
Titolo: Re: PiFace e wiringPi
Inserito da: akrobaticone - 30 Giugno 2014, 15:55:49
le due librerie sono in
/usr/local/lib
Titolo: Re: PiFace e wiringPi
Inserito da: vuott - 30 Giugno 2014, 15:57:46
le due librerie sono in
/usr/local/lib

...ed i tre file header ?
Titolo: Re: PiFace e wiringPi
Inserito da: akrobaticone - 30 Giugno 2014, 16:20:10
/usr/local/include
Titolo: Re: PiFace e wiringPi
Inserito da: vuott - 30 Giugno 2014, 16:44:41
Una prova potresti farla con il mio suggerimento estremo.

Dovresti creare il sorgente in C dell'apposita libreria, che ad esempio chiameremo libadhoc.c, nella cartella Dati del tuo progetto.

Il codice sorgente in C della libreria condivisa da te realizzata potrebbe essere:
Codice: c [Seleziona]
#include <stdint.h>
#include <wiringPi.h>
#include <mcp23s17.h>
#include "piFace.h"


int raspberry(int pinBase) {

    int rit;

/* Invoca la funzione del Raspberry: */
    rit = piFaceSetup(pinBase);

   return rit;

}


Il tuo codice Gambas sarebbe:
Codice: gambas [Seleziona]
Private Extern wiringPiSetup() As Integer In "libwiringPi"

Private Extern raspberry(pin As Integer) As Integer In "/tmp/libadhoc"


Public Sub Form_Open()

' Genera l'apposita libreria esterna per la gestione della funzione "piFaceSetup()":
   Shell "gcc -o /tmp/libadhoc.so " & Application.Path &/ "libadhoc.c -shared -fPIC" Wait
   
   wiringPiSetup()

' Invoca l'unica funzione dell'apposita libreria esterna:
   raspberry(200)

   etc...

   etc....
End
Titolo: Re: PiFace e wiringPi
Inserito da: akrobaticone - 30 Giugno 2014, 18:45:50
soluzione ancor più estrema
ho copiato tutto il codice del file piface.c e l'ho inserito in wiringPi.c
Modificato anche l'header , ora la funzione piFaceStartup() si trova nella libreria libwiringPi
funziona :ok:
poi posterò i sorgenti e che Dennis Ritchie non mi mandi qualche fulmine....

Titolo: Re: PiFace e wiringPi
Inserito da: vuott - 01 Luglio 2014, 01:28:35
soluzione ancor più estrema
Bravo: sei riuscito a restare nel solo ambito Gambas.
Titolo: Re: PiFace e wiringPi
Inserito da: akrobaticone - 01 Luglio 2014, 08:53:26
soluzione ancor più estrema
Bravo: sei riuscito a restare nel solo ambito Gambas.

[/quote

Scusa Vuott, non ho capito...

pongo un'altra questione:

una volta che funziona e volessi creare un pacchetto di installazione per il programma gambas, come gestisco l'installazione delle librerie wiringPi?
devo fare due operazioni separate oppure riesco a gestire il tutto direttamente da Gambas?
Titolo: Re: PiFace e wiringPi
Inserito da: vuott - 01 Luglio 2014, 13:20:36
una volta che funziona e volessi creare un pacchetto di installazione per il programma gambas, come gestisco l'installazione delle librerie wiringPi?
devo fare due operazioni separate oppure riesco a gestire il tutto direttamente da Gambas?
Dopo aver effettuato quella variazione, hai generato una nuova libreria condivisa .so ?
Titolo: Re: PiFace e wiringPi
Inserito da: akrobaticone - 01 Luglio 2014, 16:57:05
Si
ho fatto le modifiche e ho ricompilato il tutto generando le librerie .so
lo script di compilazione è sempre quello

Titolo: Re: PiFace e wiringPi
Inserito da: vuott - 01 Luglio 2014, 18:43:23
Io porrei la libreria nella cartella "Dati" del progetto.

Solitamente in questi casi io inserisco nella cartella "Dati" del progetto i sorgenti in C, e poi nel codice Gambas con Shell effettuo la creazione della libreria condivisa (vedi esempio del mio codice prima proposto sopra).
Titolo: Re: PiFace e wiringPi
Inserito da: akrobaticone - 01 Luglio 2014, 20:01:48
Dal momento che la piattaforma è unica, la libreria è sempre quella, si potrebbe dare un comando per installarla al posto giusto........................
Titolo: Re: PiFace e wiringPi
Inserito da: vuott - 01 Luglio 2014, 20:10:54
Dal momento che la piattaforma è unica, la libreria è sempre quella, si potrebbe dare un comando per installarla al posto giusto........................

Potresti anche non toccare niente nel sistema, installandola temporaneamente ogni volta nel percorso: /tmp . (http://levipere.com/wp-content/plugins/smilies-themer/Axendr/asd.gif)
Titolo: Re: PiFace e wiringPi
Inserito da: akrobaticone - 01 Luglio 2014, 21:13:16
in effetti basta dichiarare il percorso dove si trova.....
me gusta

Aggiungendo un display touch si aprono un sacco di possibilità...
Titolo: Re:PiFace e wiringPi
Inserito da: vuott - 26 Aprile 2016, 01:01:58
https://sourceforge.net/p/gambas/mailman/message/30498533/
Titolo: Re:PiFace e wiringPi
Inserito da: akrobaticone - 09 Settembre 2016, 15:04:04
Dopo tempo immemorabile ho ripreso a fare qualche esperimento con raspy
si sente tanto la mancanza di un oggetto gb.raspberry
Sarebbe complicato, partire da WiringPi e creare l'oggetto in questione?
Sulla ML ho visto che qualcuno lo chiedeva, ma la cosa sembra morta lì.
Titolo: Re:PiFace e wiringPi
Inserito da: vuott - 09 Settembre 2016, 21:50:44
si sente tanto la mancanza di un oggetto gb.raspberry
Sarebbe complicato, partire da WiringPi e creare l'oggetto in questione?


Se ne vuoi proprio fare un Componente, ti segnalo questa pagina della nostra WIKI:

http://www.gambas-it.org/wiki/index.php?title=Creare_un_Componente_per_Gambas_scritto_in_linguaggio_C
Titolo: Re:PiFace e wiringPi
Inserito da: kicco - 09 Settembre 2016, 22:34:01
Citazione
Sarebbe complicato, partire da WiringPi e creare l'oggetto in questione?
Sarebbe veramente interessante!
 :)
Titolo: Re:PiFace e wiringPi
Inserito da: akrobaticone - 19 Settembre 2016, 08:38:59
la cosa è interessante, provo ad integrare le librerie Wiring Pi
Dal  momento che non sono un fenomeno in C mi ci vorrà un po di tempo, ma ci provo
Titolo: Re:PiFace e wiringPi
Inserito da: allegfede - 19 Ottobre 2016, 09:51:52
Metti il codice da qualche parte tipo sourceforge o similare?  Provo a darti una mano.
Titolo: Re:PiFace e wiringPi
Inserito da: akrobaticone - 20 Ottobre 2016, 12:21:05
Grazie
purtroppo al momento sono impegnato con altre cose e non riesco a dedicarmi a raspy
è un lavoro a cui tengo e non appena riesco riprendo
potrebbe essere un progetto della comunità