Usare QtCreator con Arduino

Sto usando da 2 giorni QtCreator come ide per Arduino, ora non so se funziona solo a me quindi se vi interessa provare fate sapere.

Per usare il core di arduino nel modo consueto è necessario avere il preprocessore di arduino che è integrato nell'ide scritto in java, per cui non ho potuto usare tale preprocessore e quindi il concetto di sketch svanisce e dovete usare lo sviluppo di sorgente tipico del C/C++.

Nota: Solo gli utenti di GNU/Linux possono usare queste modifiche.

Tranquilli non è necessario modificare il codice sorgente, però in questo modo non avete l'interfaccia grafica che vi aiuta ad effettuare le impostazione e dovrete farlo voi manualmente. Quindi non è adatto per piccoli programmi dove conviene usare arduino che è più immediato, anche se io non lo uso più da tempo tanto che non l'ho installato.

Fase 1:
Dovete installare QtCreator sulla vostra linux box, usate il gestore di pacchetti e questo si tirera anche il framework Qt di cui ci serve solo qmake.

qmake viene usato da qtcreator per generare file di progetto ".pro" e in una seconda fase dal file di progetto genera dei makefile in base alla piattaforma in uso, tuttavia di default la piattaforma e quella in cui è avviato QtCreator mentre noi desideriamo generare makefile che usino il crosscompiler avr-gcc. Per fare questo abbiamo bisogno di far vedere a qmake dei file di configurazione, per evitare di sporcare il sistema mettiamo questi file nella directory dell'utente /home/username. Il file allegato avrspecs una volta scompattato nella vostra home crea una directory nascosta con nome .avrspecs.

Fase 2:
Avviate QtCreator e cliccate dalla welcome page centrale "Create Project.." comparirà una dialog dove sulla sinistra selezionate "Other Project" alla destra selezionate "Empty Qt Project" e confermate cliccando il pulsante della wizard "chose".

Si apre una dialog che vi permette di scegliere il nome del progetto e la directory dove questo verra creato, tranquilli verra creata una directory e dentro verra messo il nome del file di progetto. Io ho scelto il nome "avrqtcreatortest" lasciando la directory di default. Inseriti questi dati cliccate "Next" e vi comparirà una treeview che mostra almeno una voce marcata, se c'è nè più di una fate in modo che solo la prima sia marcata. Nota che la prima dovrebbe essere "Qt in Path". Continuate con "Next" e verrà mostrato il riepilogo, e allora cliccate "Finish".

Fase 3:
Terminata la fase precedente QtCreator vi mostra il progetto a sinistra, cliccate due volte sul nome del progetto "avrqtcreatortest.pro" e questo verrà aperto, allora inserite queste righe:

include($(HOME)/.avrspecs/arduino/2009.def)
TEMPLATE = app
TARGET = vt100-demo

DEPENDPATH += .
INCLUDEPATH += .

La prima riga include un file di definizione che si trova in /home/username/.avrspecs/arduino/, il file 2009 indica appunto la board 2009.

Dopo mangiato la prossima parte.

Ciao.

Oltre alla 2009 c'è la uno di cui non cambia nulla e potrebbe essere benissimo un link simbolico, poi c'è la mega-1280 e la mega-2560, ovviamente prendendo spunto da questi file e possibile crearne ad hoc per altre mcu e/o frequenze diverse.

TEMPLATE = app: il template può essere "lib" che indica che le intenzioni sono quelle di sviluppare una libreria per cui il makefile generato sfornerà un qualcosa come libnome.a. Tuttavia bisogna specificare che vogliamo sviluppare una libreria statica, allora basta aggiungere al file ".pro" la riga seguente:

CONFIG += static

TARGET = vt100-demo: e solo il nome che vogliamo abbia l'eseguibile una volta terminata la compilazione, nel caso il template sia "lib" allora il nome in questo caso sarebbe libvt100-demo.a sempre se CONFIG è uguale a static.

Ora salvate il file e cliccate l'icona "Projects" alla vostra sinistra, compariranno dei widget raggruppati, la nostra attenzione la rivolgiamo al gruppo "Build Steps" dove dice "qmake: ecc" cliccate Details e inserite nel campo "additional arguments:" la seguente riga:

-spec /home/[i]username[/i]/.avrspecs/arduino

Ovviamente username lo dovete sostituire con il nome della vostra home.
Al posto di questa riga potete inserire anche la seguente riga:

-spec /home/[i]username[/i]/.avrspecs/linux-avr8-g++

Questa però serve a lavorare con la toolchain avr-gcc e dovete impostare la mcu e frequenza a mano, ma serve se volete fare di testa vostra.
Tuttavia anche con la prima riga credo si possa sovrascrivere alcune impostazione specificandole nel file ".pro" editato prima, non ho provato.

Ora potete lavorare con l'ide ed usare la toolchain e avr-libc ma non potete ancora linkare al core di Arduino, io l'ho fatto ma per questo dovete avere la lib in sorgente e compilarla sempre tramite QtCreator e poi installarla, magari nella vostra home, un buon nome potrebbe essere ".avr"
contenente le sotto directory es.

.avr
include
arduino
headerfile.h
headerfile1.h
nomelib1
ecc.h
libs
arduino
16mhz
libcore-0021.a

Il file VT100-demo contiente una implementazione di un terminale VT100, il codice è preso dalla documentazione di Atmel e modificato per avr-gcc, questo lo potete aprire e compilare con QtCreator.

Occhio che l'ide non permette di scrivere il file ".hex" generato sul microcontrollore. A questo dovete pensarci voi usando "avrdude" oppure AvrDudeQui tenendolo sempre aperto e cliccare reply tutte le volte che volete scrivere il programma nella flash.

Ciao.

avrspecs.tar.bz2 (1.36 KB)

VT100-demo.tar.bz2 (4.75 KB)

QtCreator lo trovo utile perchè integra la documentazione, il designer e il debugger. Utilizzandolo con Arduino si perde questa integrazione. Se si vuole usare un IDE professionale consiglio AVR Studio, l'unica pecca è che è pensato per lavorare solo col micro tramite un programmatore e non con Arduino ma nelle prossime versioni se Arduino continua a prendere piede... chissà...

flz47655:
QtCreator lo trovo utile perchè integra la documentazione, il designer e il debugger. Utilizzandolo con Arduino si perde questa integrazione. Se si vuole usare un IDE professionale consiglio AVR Studio, l'unica pecca è che è pensato per lavorare solo col micro tramite un programmatore e non con Arduino ma nelle prossime versioni se Arduino continua a prendere piede... chissà...

AVR Studio ha anche un'altra pecca. Funziona solo su Windows. In questo, Microchip è più avanti, fornendo un IDE multipiattaforma. Chissà perché Atmel non lo faccia... mah.... :roll_eyes:

QtCreator lo trovo utile perchè integra la documentazione, il designer e il debugger. Utilizzandolo con Arduino si perde questa integrazione. Se si vuole usare un IDE professionale consiglio AVR Studio, l'unica pecca è che è pensato per lavorare solo col micro tramite un programmatore e non con Arduino ma nelle prossime versioni se Arduino continua a prendere piede... chissà...

Difatti ho specificato che quanto scritto vale per gli utenti GNU/Linux, anche perchè io non ho windows e non ho idea di come muovermi su questo OS.
Poi come hai detto tu c'è AVR Studio e non ha molto senso usare QtCreator, anche se ti devo dire che per come posso sviluppare utilizzando il core Arduino con QtCreator non vedo perchè non si possa fare lo stesso con AVR Studio.

Per il debug ho sostituito il debbugger attuale con avr-gdb ma ancora non sono riuscito a farlo funzionare, mentre per la doc il formato è aperto ed è fattibilissimo creare dei file di help da integrare in QtCreator.

Certo c'è da lavorare ma c'è già una formidabile base di codice. Come detto non è per principianti anche se ho scoperto come creare delle voci di menù in modo semplice rendendo di fatto non necessario editare il file di progetto ".pro".

AVR Studio ha anche un'altra pecca. Funziona solo su Windows. In questo, Microchip è più avanti, fornendo un IDE multipiattaforma. Chissà perché Atmel non lo faccia... mah.... smiley-roll-blue

Si ma rimane lo stesso problema se voglio fare una capatina su microchip devo conoscere l'ambiente di sviluppo, così invece basta aggiungere altri file di configurazione per supportare altri compilatori che derivano da gcc, e l'ambiente è quello conosciuto.

Ciao.

Dunque sono riuscito a mettere delle voci nel wizard principale ed in automatico mi apre un progetto come fà l'ide arduino con il suo bel main.cpp completo di #include <WProgram.h> e setup() e loop() in più c'è una checkbox da spuntare se si vuole creare una libreria ma di default crea una applicazione.

E sufficiente inserire tutte le voci per ogni board ma devo stabbilire dove mettere il core di arduino, fatto questo non ho più necessità di specificare la lib a cui linkare ammeno che non ne vogliate altre allora la cosa è sempre possibili e si fà il tutto tramite wizard.

Ciao.

Ho registrato un video per mostrare quanto semplice sia usare QtCreator per sviluppare con arduino.
Purtroppo la qualità e scadente non sono riuscito a fare di meglio in più l'audio è assente a causa di recordmydesktop che tronca l'audio.

Molto interessante, stvo cercando di fare lo stesso, con kdevelop (ma ancora non ho avuto il tempo..ma so che in via teorica si potrebbe) solo uan domanda volevo fare....

poi per scaricare il programma dentro arduino, lo fai direttamente da QtCreator oppure il compilatore di arduino?

grazie

Ciao, Martinix io KDevelop non lo uso da tempo ma penso che sia fattibile, per di più la versione di Kde4 non l'ho mai aperta.

Per scrivere il file ihex prodotto non uso QtCreator benche si possa fare trovo più comodo AvrDudeQui che ho sviluppato con Qt.

Purtroppo funziona testato solo con avrisp mkii e con la 2009 usando l'argomento di avrdude "-c arduino".

Per far si che QtCreator scriva nel micro si può scrivere il comando con la lista degli argomenti nel campo esegui, poi L'icona con la freccia verde in basso a sinistra serve per eseguire il comando.

Nota che al momento i file postati non permettono di fare quello che si vede nel video. Sto sistemando (nel tempo libero) il tutto poi ne faccio una guida. Lo standlone funziona, e necessità la digitatura della frequenza di clock in un campo editabile.

Nella guida devo pure spiegare come compilare la libreria cores di arduino. Peccato che il nuovo cores non possa essere compilato, in quanto usa un header file per ogni board e l'header giusto viene copiato nella directory di build insieme alla libreria.

Ciao.

aspetterò con molto entusiaso la guida, tanto per me più usare kdevelop o qtcreator credo sarà lo stesso (son più elettronico che informatico, quindi la fatica sarà la stessa)

:slight_smile: grazie per il tuo tempo!

Dunque riguardo al fatto che QtCreator è comodo perchè c'è la documentazione Qt.

La doc di avr-libc sfrutta doxygen per estrarre la documentazione dal sorgente, quindi è stato abbastanza semplice modificare un flag per generare documentazione compatibile con QtCreator, quindi in QtCreator c'è la doc per av-libc.

Tuttavia QtCreator ha una comoda funzione di help contestuale che funziona solo su codice Qt (QString, QWidget ecc) mentre con codice avr-libc (es: _BV(bit)) questo help contestuale non funziona. Due (o più) possono essere i motivi: La doc usa dei tag che QtCreator conosce ma che non sono presenti nella doc di avr-libc, oppure molto peggio c'è codice C++ che permette questa comoda funzione. Spero (quasi certo) sia la prima, in tal caso è sufficiente sapere quali sono questi tag e aggiungerli nella doc di avr-libc. Tuttavia, la funzione "Locator" lavora alla grande trovando all'istante la parola chiave _BV, ISR e se c'è ambiguità mostra una lista da cui scegliere.

Nota dolente:
Il cores di arduino non è documentao in doxigen e in nessun altro modo che permetta ad uno strumento esterno di estrarre la documentazione, per cui il reference non puà essere integrato in QtCreator a meno che non si documenti il cores con doxygen. Questa la vedo come una possibilità molto remota nonostante un programmatore esperto impiegherà poco più di due giorni a documentare il codice. Ma sarebbe lavoro sprecato perchè il nuovo cores è legato all'ide in modo indissolubile o quasi, cioè o ti mangi sta minestra.....

Nel caso ci sia qualcuno che conosce doxygen e vuole adoperarsi per creare un reference compatibile con QtCreator deve inserire questo flag nel file doxygen :
#---------------------------------------------------------------------------

Generate qhp file to qthelp

#---------------------------------------------------------------------------

GENERATE_QHP = YES

avviando doxygen verra prodotto un file di nome index.qhp che deve essere processato con:

qhelpgenerator index.qhp -o wiring.qch

Il file ottenuto è già consultabile con QtAssistant o QtCreator, si deve solo chiedere a questi di aggiugere questo file di help e l'operazione si fà dalla interfaccia grafica.

Ciao.