Domanda:
Testare gli script Raspberry Pi su un PC
Lynob
2015-08-15 14:57:04 UTC
view on stackexchange narkive permalink

Sto scrivendo un programma Raspberry Pi, per eseguire cose, prendere input dai sensori, salvare nel database e sincronizzarsi con un server.

C'è un modo per testarlo sul PC prima di distribuirlo al Raspberry Pi? Poiché ci sono troppe operazioni GPIO, voglio assicurarmi che funzioni prima di metterlo sul Raspberry Pi. Una sorta di emulatore GPIO o qualcosa del genere. Sono su Manjaro Linux.

Non deve essere un emulatore, una sorta di IDE in grado di comprendere le funzioni GPIO. Ad esempio, un possibile output potrebbe essere:

  gpio 1 è in esecuzione, il sensore 1 è in esecuzioneningsensor 2 non è in esecuzione  

Qualcosa del genere, forse un Plugin Bpython o qualcosa del genere. Tutto quello che voglio fare è assicurarmi che tutte le mie funzioni GPIO funzionino nel modo in cui voglio che funzionino prima di testare sul Raspberry Pi, perché molte volte, gli errori sul Raspberry Pi hanno a che fare con il fatto che non collego le parti correttamente. E non mi piace programmare e correggere bug sul Raspberry Pi.

Quindi, se posso verificare che il mio script funziona correttamente sul mio PC, posso andare al Raspberry Pi, sapendo che il mio script è va bene e aggiusta le cose alla lavagna. Non voglio più testare il mio script sul Raspberry Pi.

Un approccio diverso potrebbe essere quello di utilizzare "sshfs" per montare la directory home di raspberry pi sul PC. Puoi quindi usare quello che vuoi per scrivere il tuo codice con i tuoi file sul pi, e quindi avere una shell ssh sul pi in cui esegui effettivamente il codice. Poiché ciò accade su una connessione ssh, la velocità è limitata, ma potrebbe funzionare bene per te.
Sei risposte:
#1
+6
joan
2015-08-15 15:54:17 UTC
view on stackexchange narkive permalink

Non sono a conoscenza di alcuna soluzione pronta per le tue esigenze.

Tuttavia potresti scriverne una tua con poco sforzo. Quante chiamate diverse fai alle funzioni gpio? Potresti scoprire di usarne meno di 10. Crea semplicemente il tuo modulo Python locale con lo stesso nome del tuo modulo di destinazione e produci stub per le funzioni che usi.

Es. se utilizzi la funzione gpio_write () che accetta un gpio e un livello il tuo stub potrebbe essere solo

  def gpio_write (gpio, level): print ("gpio_write chiamato con gpio = {} level = { } ". format (gpio, level))  

Il tuo stub gpio_read potrebbe essere

  def gpio_read (gpio): global val print (" gpio_read chiamato con gpio = {}, restituendo {} ". format (gpio, val)) return val # dove val può essere letto da un file o impostato esternamente  

Questa è una pratica abbastanza standard, lunga utilizzato nello sviluppo di software per testare il software prima che l'hardware sia disponibile.

In ogni caso il mio modulo pigpio Python viene eseguito su PC Windows / Mac / Linux.

il tuo modulo gira su linux ma non dà errori se non trova gpios come la libreria gpio standard? Sto usando il tuo modulo btw
Il mio modulo darà errori se non è stato collegato al Pi. Ha bisogno di un Pi in rete che esegua il demone pigpio per essere disponibile quando lo script viene eseguito. Quindi dovresti comunque usare gli stub se non avessi un Pi disponibile sulla rete. Tuttavia, ti consentirà di sviluppare ed eseguire script sul tuo PC piuttosto che sul Raspberry Pi. Ho fatto quel suggerimento in risposta a "E non mi piace programmare e correggere bug su pi".
ah questo è carino !!!
posso installare il tuo modulo usando pip?
@Lynob Non per quanto ne so.
#2
+4
ben_nuttall
2019-04-12 02:13:50 UTC
view on stackexchange narkive permalink

GPIO Zero fornisce un'interfaccia mock pin, il che significa che puoi eseguire lo stesso codice sul tuo PC ed emulare i pin. Guarda esempi di come viene utilizzato nella suite di test.

Al giorno d'oggi ha senso contrassegnare la tua risposta come la migliore, ma questa è una vecchia domanda (più di 4 anni). Tuttavia, mi ha aiutato con lo stesso dubbio quindi, buon lavoro :)
#3
+3
fedeb
2019-04-12 01:44:51 UTC
view on stackexchange narkive permalink

Ho creato questa piccola libreria, fedeb95 / pin che si è rivelata utile per me. Mancano alcune funzionalità, ma se ti va bene ... ha funzionato per me.

Modifica: pin è un wrapper RPi.GPIO. Invece di chiamare il metodo x di RPi.GPIO, chiami il metodo x di pin. È possibile specificare in un file di configurazione se il programma è in esecuzione in modalità test (dove si leggono valori casuali dai pin o valori impostati con set_value) o su un lampone effettivo, dove questa libreria chiama semplicemente il metodo RPi.GPIO corrispondente. Manca qualcosa, ma è una libreria molto semplice e chiunque è libero di contribuire o dirmi quale funzionalità ha bisogno e cercherò di aggiungerla

Potresti elencare qui una breve panoramica delle funzionalità?
Fondamentalmente è un wrapper RPi.GPIO. Invece di chiamare il metodo x pf RPi.GPIO, chiami il metodo x di pin. È possibile specificare in un file di configurazione se il programma è in esecuzione in modalità test (dove si leggono valori casuali dai pin o valori impostati con set_value) o su un lampone effettivo, dove questa libreria chiama semplicemente il metodo RPi.GPIO corrispondente. Manca qualcosa, ma è una libreria molto semplice e chiunque è libero di contribuire o dirmi quale funzionalità ha bisogno e cercherò di aggiungerla
Dovresti modificarlo nella risposta.
#4
+2
pddring
2016-10-07 21:57:05 UTC
view on stackexchange narkive permalink

There's a library you can download here: https://roderickvella.wordpress.com/2016/06/28/raspberry-pi-gpio-emulator/

Or there's a simulator which lets you write and test the python code here:http://blog.withcode.uk/2016/10/rpi-gpio-python-simulator/

#5
+2
BriceP
2016-10-07 22:18:30 UTC
view on stackexchange narkive permalink

Suppongo che potresti usare librerie beffarde come Mock.

Sono usate principalmente per gli unit test, ma sono carino che funzionerebbe molto bene nel tuo caso. E probabilmente faresti meglio a provarlo scrivendo alcuni unit test.

Sostituisce in movimento una classe esistente e devi solo scrivere tu stesso il comportamento che stai cercando. Ti consente di non modificare nulla nella tua logica (nemmeno le importazioni), ma di ottenere comunque i valori di ritorno che supponi di ricevere da una chiamata effettiva dell'API.

#6
+2
M61Vulcan
2018-02-19 03:32:34 UTC
view on stackexchange narkive permalink

Essendo un principiante di Python e del Pi non ho capito la risposta di Joan e avevo bisogno di un modo semplice (bot non elegante!) per testare il mio programma sul PC senza messaggi di errore causati da chiamate GPIO mancanti. Scelgo semplicemente quali sezioni di codice da eseguire controllando su quale macchina sto eseguendo. Posso quindi emeluare una chiamata GPIO, come la chiusura di un interruttore, dalla tastiera del PC.

  #! / Usr / bin / python3import socketmy_PC_host_name = 'Dev'host_name = socket.gethostname () if ( host_name! = my_PC_host_name): # Esegui queste righe solo se non siamo sul PC import RPi.GPIO come GPIO # Imposta la modalità di numerazione GPIO e definisci il pin di input GPIO.setmode (GPIO.BOARD) # Usa la stessa numerazione della scheda come sulla scheda GPIO.setup (16, GPIO.IN) # Imposta il pin 16 come inputif (host_name! = my_PC_host_name): # Esegui queste righe solo se non siamo sul PC prova: mentre True: se GPIO.input (16) == 0: print ("Switch is open") else: print ("Switch is closed") finalmente: GPIO.cleanup () # Pulisci le porte GPIO prima di terminare else: # Stiamo girando sul PC prova : while True: c = input ('Press "o" then "Enter":') if c.upper () == 'O': print ("Switch is open") altro: print ("L'interruttore è chiuso") infine: print ("Processo completato")  


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...