Riciclare un vecchio tablet in flip-clock

Iniziai nel 2011 ad utilizzare dei tablet “cinesi” come economiche periferiche di I/O per i miei circuiti elettronici. Costruire “da zero” un dispositivo equivalente, cioè un display touch-screen 7″ a colori, con dispositivo audio, interfaccia USB Host, connessioni LAN e Wi-Fi, lettore di microSD, batteria ricaricabile al Litio di considerevole capacità e con un processore che “gira” a 800MHz o più, mi costerebbe almeno 150-200 Euro, anche se acquistassi i materiali per quantità non indifferenti (un centinaio di pezzi). Ricordo di aver comprato, negli anni passati, diversi modelli di tablet 7″ a meno di 70 Euro l’uno ed oggi costano anche molto meno ! Quindi, l’utilizzo di un tablet come periferica di I/O è sempre un “buon affare”. Ora, però, ho alcuni vecchi tablet da 7″ con touch-screen resistivo che non hanno più “mercato”, cioè sono superati come prestazioni per poterli utilizzare in nuove applicazioni e difficilmente “rivendibili” anche a metà del costo perché nei vari shop on-line si trovano modelli nuovi a prezzi “stracciati”. Allora… cosa farne ? Ecco la mia soluzione: un Flip-Clock, cioè un orologio “da parete” con le cifre che “flippano”, cioè cambiano come nei modelli meccanici dei vecchi tempi. Per chiarire il concetto, ecco lo “screenshot” dell’applicazione che gira su un tablet.

L'applicazione in funzione su tablet con schermo 800x480 scala:1

L’applicazione in funzione su tablet con schermo 800×480 scala:1

L’applicazione è stata testata su un vecchio tablet Android 2.2 con dimensioni di schermo 800×480 scala:1 e anche su un recente Phablet 6.5″ (Phone Tablet, quello usato per catturare lo screenshot visibile in figura) con Android 4.2 e comunque con display 800×480 scala:1. L’applicazione rimane sempre “accesa”, bloccando il normale autospegnimento del dispositivo. Se si desidera spegnere il telefono / tablet, si deve uscire dall’applicazione e quindi effettuare il normale spegnimento.
Nota 24 Mar 2015: Ho modificato l’App in modo che si adatti a diversi tipi di schermo. Ho anche aggiunto il cambio di modalità di visualizzazione da ore:min a min:sec e viceversa quando si tocca lo schermo. In modalità ore:min si ha anche il lampeggio ogni secondo di un “led”..

Tutto qui. L’applicazione è disponibile gratuitamente sulla mia pagina di Google Play .

Firmware e App per Meteo RX con Passive Infrared Sensor

Ho aggiunto al ricevitore per il sensore Oregon Scientific modello THGR228NF, che lavora in RF a 433 MHz (vedi link_1 e link_2), una parte di firmware per interfacciare un rivelatore PIR (Passive InfraRed) di tipo HC-SR501 o simile.

Sensore di movimento Passive Infrared

Sensore di movimento Passive Infrared

Lo scopo di questa aggiunta è di passare al tablet (o smartphone) collegato, l’informazione relativa alla presenza di una persona. Il circuito, tramite la connessione seriale, informa l’applicazione che c’è un movimento e così lo schermo passa da bassa ad alta luminosità (e viceversa). Sulle specifiche del componente si legge che l’uscita può avere livello 0V (non attivo) oppure 3.3V (attivo) ; il livello di 3.3V sarebbe un po’ basso come “logic high” per essere collegato direttamente al pin di input di un microcontrollore alimentato a 5V, ma usando la pull-up interna del micro e considerando lo schema interno del sensore (la linea di out ha una piccola resistenza in serie), si ottiene un livello accettabile.

Il ricevitore collegato al sensore PIR e di fianco il sensore Thermo-Hygro THGR228NF

Il ricevitore collegato al sensore PIR e di fianco il sensore Thermo-Hygro THGR228NF

Il nuovo firmware per il micro ATtiny2313 della Atmel è disponibile per il download ; il file zippato rxmet-ir.zip contiene il file .hex che si dovrà trasferire nel microcontrollore. La password per decomprimere questo file è eficara. La configurazione dei “fusibili” per il micro ATtiny2313 è la seguente:

High fuses: 11001001 (0xC9) Low fuses: 11011101 (0xDD)

Lo schema elettrico è stato modificato come in figura sotto ; non ho rifatto il circuito stampato, perché tutte le aggiunte sono state apportate semplicemente saldando dei fili alle nuove periferiche collegate (l’interfaccia USB-TTL e il sensore PIR).

Lo schema del circuito modificato

Lo schema del circuito modificato

Una volta programmato il micro, si potrà fare un test usando il terminale seriale di Windows (Hyperterm) o un qualsiasi altro terminale settato per 19200,N,8,1 come nella figura sottostante:

Il terminale seriale mostra messaggi ricevuti dal meteoRX

Il terminale seriale mostra messaggi ricevuti dal meteo-RX

Notate i messaggi IRsens=1 e IRsens=0 : questi vengono trasmessi, rispettivamente, quando il sensore PIR si attiva per un movimento “umano” e quando si disattiva. L’applicazione aumenta al massimo la luminosità del display nel primo caso, mentre la diminuisce nel secondo. In funzione della versione di Android e del dispositivo su cui si fa girare l’applicazione, si potrà avere un comportamento diverso ; la riduzione a zero, infatti, non ha un comportamento univoco. Sugli apparecchi che ho potuto provare, il display rimane comunque acceso con bassa luminosità, ma dalla “letteratura tecnica” sull’argomento, si deduce che in qualche caso lo schermo possa spegnersi del tutto. Modifica 23 Dic 2014: ho testato il funzionamento del comando di luminosità su un vecchio tablet Android 2.2 ed effettivamente, con la luminosità a zero, lo schermo si spegne del tutto e in più l’applicazione viene chiusa, cosa che assolutamente non è auspicabile. Per tagliare la testa al toro, ho modificato il programma in modo che la luminosità non vada più a zero, ma ad un valore appena superiore. L’effetto di “dimming”, visivamente, è identico, ma il tablet rimane acceso e l’applicazione attiva. In ogni caso, questa particolare applicazione, che fa uso di una interfaccia USB-TTL, non può essere installata su un dispositivo Android V2.2 , perché la gestione delle periferiche USB è completamente diversa ; nelle vecchie versioni di Android, infatti, se il chip montato sulla periferica USB è riconosciuto dal sistema, come nel caso del PL2303 Prolific o del CP2102 Silabs, nell’elenco delle periferiche (sulla directory /dev) appare la ttyUSB5, che può quindi essere utilizzata come porta seriale. Sul mio vecchio tablet (aperto, smontato e pesantemente modificato) ho utilizzato, per la comunicazione con il MeteoRX, addirittura la porta ttyS0 (la seriale standard), modificando l’avvio di Linux per disattivare il servizio “Console” normalmente attivo proprio su tale porta. Non pubblico su Google Play anche questa versione dell’applicazione, perché richiede la modifica del firmware del tablet per poter funzionare.

Nella foto sottostante vedete l’applicazione che gira su un tablet da 6.5″ con risoluzione 800×480, scala=1 :

App in funzione su tablet 800x480 scala=1

App in funzione su tablet 800 x 480 scala=1

Nella prossima foto, invece, c’è l’applicazione in funzione su uno smartphone con schermo da 4.3″ con risoluzione 1280×720 scala=2 :

App in funzione su smartphone 1280x720 scala=2

App in funzione su smartphone 1280 x 720 scala=2

L’applicazione è disponibile gratuitamente per il download sulla mia pagina di Google Play, mentre il circuito deve essere autocostruito perché non è disponibile in commercio. Buon divertimento… e auguri di buon Natale e felice anno nuovo 🙂

Meteo RX riscritto su tablet Android

Ho modificato il circuito del ricevitore Meteo per sensore Oregon Scientific (vedi articolo). Nello schema sottostante si possono vedere le modifiche che consistono in due tagli (dove ci sono le X rosse) e in una resistenza aggiunta. In questa versione, il circuito viene alimentato direttamente dall’interfaccia USB-TTL, attraverso il pin Vcc (oppure 5.0V) che trasferisce direttamente la tensione di 5V dal sistema ospite; la resistenza aggiunta serve a fare da partitore, in quanto l’uscita seriale del micro è tra 0 e 5V mentre il convertitore USB a cui deve essere collegato lavora a 3.3V (tramite un regolatore interno) ; alcuni integrati sono in grado di tollerare un input a 5V anche se lavorano a 3.3V, ma per stare tranquilli ed avere un circuito “per usi generali” ho preferito aggiungere questo componente.

Schema modificato. Cliccare per ingrandire

Schema modificato. Cliccare per ingrandire

Dopo aver modificato il circuito e collegato l’interfaccia USB-TTL, ho scritto una applicazione “elementare” per un tablet Android low-cost. Per semplificare il lavoro, ho usato la versione del micro che invia i dati relativi alla temperatura ed umidità in “plain text”, eseguendo la decodifica del protocollo del sensore direttamente “on-chip”. Per questa ragione il software sul tablet è estremamente semplice, in quanto si limita a “splittare” la stringa di dati ricevuta dal microcontrollore nelle due finestre relative rispettivamente alla temperatura e all’umidità. Il prossimo passo sarà l’invio di queste informazioni al server web e poi la realizzazione di uno script PHP che le inserirà nella foto che viene inviata dalla mia webcam. In questo modo avrò a disposizione sia un bel display per leggere la temperatura, sia una webcam più ricca di informazioni. Nella foto sottostante potete ammirare l’insieme di tablet, ricevitore e convertitore USB-TTL in funzione.

IMG_20141210_104420

Una webcam da esterno fatta in casa

Un box stagno in plastica per alimenti, una ventolina a 12V, un regolatore autocostruito da 12V a 5V, un vetro temperato preso da una vecchia maschera subacquea e infine una economica telecamera WiFi… Questi gli elementi che costituiscono l’hardware della mia webcam molto, ma molto casalinga.

home-webcamLa costruzione dell’oggetto non ha richiesto molto tempo. Ho usato un taglierino per liberare un lato del box dove incollare il vetro temperato, sfruttando poi del silicone trasparente per sigillarlo. Ho poi fatto dei fori per montare il supporto della telecamera e una striscia di metallo per il fissaggio dell’intero box al muro. Ho infine bloccato con la colla a caldo una ventolina a 12V per far circolare l’aria nel box ed evitare la condensazione ; poi ho costruito un circuito regolatore di tensione da 12V a 5V (la tensione richiesta dalla telecamera) con un normale LM7805 montato su un’aletta di raffreddamento. Ho fissato il circuito vicino alla ventola e così il calore dissipato viene distribuito dalla circolazione forzata nel box, contribuendo così a non far “gelare” l’elettronica nelle giornate fredde.

Quanto durerà ? Non ne ho idea. Staremo a vedere…

Ho scritto un piccolo programmino in PHP (sul server) per sovraimporre alla foto ripresa dalla telecamera anche la data e l’ora. Al momento attuale l’immagine viene aggiornata ogni 20 minuti (durante il giorno). Sto rimettendo in funzione il circuito per intercettare i dati trasmessi dal sensore Hygro-Thermo della Oregon Scientific (presentato in un vecchio articolo) in modo da aggiungere anche la temperatura e l’umidità campionate nel momento in cui viene salvata la foto. Questa volta, invece di utilizzare un PC per ricevere i dati, scriverò l’applicazione per tablet Android da 7″, dato che ne ho qualcuno avanzato da precedenti esperimenti 🙂 quindi pubblicherò l’App su Google Play, in forma gratuita. A presto…

Usare lo smartphone come telecomando TV

Qualche tempo fa ho proposto in queste pagine un circuitino basato su un convertitore USB-RS232 da collegare ad un tablet Android per realizzare un telecomando a raggi infrarossi. In quell’occasione il convertitore USB veniva “visto” da Android come una porta seriale ttyUSB5, ma si trattava di una vecchia versione del sistema operativo (la 2.6 se ricordo bene). Nelle nuove versioni, le periferiche USB sono gestite in modo del tutto diverso e così la vecchia applicazione che avevo scritto un paio d’anni fa non funziona sui nuovi dispositivi. A questo punto, ho pensato di riscriverla perché possa funzionare sui nuovi smartphone (o tablets) basati su Android 4.0 e successivi. Nella foto sottostante potete vedere il mio smartphone con la periferica collegata e il programma in funzione.

IRemoteUSB-pic1A parte la gestione dell’interfaccia USB, il principio di funzionamento è lo stesso. Si sfrutta la porta seriale per inviare dati formattati in un modo particolare. Utilizzando la velocità di 115200 BPS, una lunghezza di 7 bits ed 1 stop bit, infatti, si ha la possibilità di generare dei “bursts” di 38.4 KHz che vengono ricevuti molto bene dal sensore IR contenuto nel TV. Nel disegno qui sotto si vede come questo sia possibile:

serial7bitIn questo esempio vediamo la trasmissione seriale di due caratteri di valore 0x5B (hex) ; se però guardiamo la forma d’onda da un punto di vista differente, scorgiamo un burst di 6 impulsi con una frequenza di 38.4 KHz ! Ogni bit, a 115200 BPS, dura infatti 8.68 uS ; noi usiamo 3 bits per definire un periodo della nostra onda rettangolare e così la durata totale è di 26.04 uS che corrisponde appunto alla frequenza di 38.4 KHz. Grazie a questa “fortunata coincidenza”, possiamo usare la porta seriale per emettere una serie di caratteri che formano bursts e pause rispettando il protocollo di trasmissione di un telecomando a raggi infrarossi. La mia applicazione per Android utilizza il protocollo SONY e funziona perfettamente con un televisore di modello “Bravia”. Si possono realizzare senza problemi anche altri protocolli, quali il NEC o il Philips (RC5) ; il programma sarà diverso, ma il principio resta lo stesso.

Ovviamente, non basta usare lo smartphone e scaricare l’applicazione, si deve avere una interfaccia USB-TTL e in più si deve costruire un piccolo circuitino. La figura seguente mostra lo schema elettrico ed il prototipo.

IRemoteUSB-schEsistono moltissimi modelli di interfaccia USB-TTL, io ho comprato quella mostrata in figura presso un “noto negozio on-line” ed ho speso (compresa la spedizione dalla Cina) meno di due Euro. Il circuitino con il transistor serve a dare un po’ di potenza al LED infrarosso ; con questa interfaccia e “mirando” bene verso il sensore del TV, ho raggiunto una distanza utile di oltre tre metri.

L’applicazione per Android è molto semplice: ha solo sei tasti che servono per le funzioni “classiche”, che sono il cambio di canale (CH+ e CH-), la modifica del volume (VOL+, VOL- e MUTE) e l’accensione / spegnimento del TV (POWER).

Screenshot_2014-11-27-13-46-43Se si lancia l’applicazione SENZA aver collegato l’interfaccia USB, si riceve una schermata di errore.

Screenshot_2014-11-27-13-26-26Se invece si lancia l’applicazione con l’interfaccia collegata, viene richiesta l’autorizzazione all’uso di tale periferica da parte del programma.

Screenshot_2014-11-27-13-46-30L’applicazione è disponibile gratuitamente su Google Play , mentre il circuito lo dovete costruire voi… 😉 Buon divertimento.

All Stars – rompicapo per Android

Una domenica con meteo tipicamente autunnale ; nebbiolina e grigio ovunque… giornata ideale per programmare un rompicapo per smartphone Android. La prima versione di questo programma la realizzai per Windows nel 2002, ispirandomi al un gioco brevettato dalla Tiger nel 1999 che si chiamava Lights-out. L’originale era una scatoletta di plastica con 25 bottoni di gomma semitrasparente disposti a matrice 5×5, con sotto altrettanti leds. Premendo un pulsante, si cambiava lo stato del led sottostante e di quelli a nord, sud, est e ovest, se esistenti. La versione per PC l’avevo chiamata Flip-Flop ed i pulsanti avevano come simboli lo zero per lo stato di spento e l’ uno per quello di acceso. Si partiva sempre da una condizione casuale. In questa versione per Android, invece, ho utilizzato dei “bottoni” circolari che sono senza alcun segno (spento) o con una stella al centro (acceso). Per questo ho chiamato il gioco “All Stars”, perché lo scopo è di arrivare, cliccando i bottoni, ad una condizione in cui tutte le stelle siano accese.

 Nella figura sottostante si vede il gioco appena avviato…

allstars-empty…mentre in quella seguente si vede il gioco risolto. Partendo dalla condizione base (tutto spento) bastano 15 click per arrivare alla condizione di “All Stars”.

allstarts-fullNaturalmente, se si preme il pulsante MIX le cose si fanno più complicate. Questo pulsante, infatti, provoca 100 mosse casuali a partire dalla condizione corrente, cioè preme “a casaccio” per cento volte uno dei 25 pulsanti, creando una nuova situazione di gioco.

L’applicazione è disponibile gratuitamente su Google Play .

19/11/2014 – Un amico ha installato il gioco e mi ha detto: “Ma… sei sicuro che funzioni ?”. Ho così deciso di aggiungere qui una delle possibili soluzioni, quella che parte dalla condizione iniziale del gioco (con tutte le stelline spente). Con 15 clicks è possibile arrivare al risultato di “all stars”. Nella figura sottostante potete vedere dove cliccare ; per comodità andate dall’uno al quindici, ma potete anche seguire un ordine diverso…

starsolution

Semplice rompicapo

In occasione della festa di tutti i Santi ho deciso di scrivere questa piccola applicazione. Per meglio dire, l’ho tradotta dalle versioni che avevo scritto in precedenza per smartphone WM6 e per PC (sotto Linux), in modo da poterla far “girare” su uno smartphone (o un tablet) Android. Si tratta del ben noto rompicapo che si giocava da bambini con un quadrato di plastica provvisto di 15 tessere mobili. Si facevano un po’ di mosse a casaccio per mettere le tessere in disordine (o si chiedeva ad un amico di “mischiare”) e poi si iniziava a risolvere il gioco, tentando di rimettere tutto a posto. Alcuni si stufavano e smontavano le tesserine con un piccolo giravite per poi rimontarle nell’ordine giusto. Beh, non usate quest’ultimo sistema sul vostro smartphone ! Potreste rovinare lo schermo 🙂

Nella figura sottostante potete vedere quello che appare sullo schermo una volta lanciata l’applicazione :

Screenshot_2014-11-01-12-17-49Premendo il tasto “MIX” verranno eseguite automaticamente delle mosse casuali e ci troveremo davanti ad una situazione come quella sottostante :

Screenshot_2014-11-01-12-17-26Ora dovremo cercare di rimettere tutto a posto, toccando le tessere che sono “mobili”, cioè quelle che hanno un lato adiacente allo spazio vuoto. Nel caso della figura mostrata, come prima mossa potremo spostare solo le tessere numerate: 2, 15, 7 e 1 . La tessera mossa occuperà lo spazio libero e ne lascerà uno nuovo al proprio posto.

L’applicazione per Android è disponibile, gratuitamente, su Google Play .

Fammi luce ! Semplice e “illuminante” applicazione Android

La scorsa domenica stavo dando una “ripulita” alle numerose applicazioni presenti sul mio Samsung Nexus. Una tra queste era la “torcia”, utilissima per illuminare la serratura del portone in sere buie. Quando ho visto che questa App occupava più di 7 Megabytes della memoria del mio telefonino, m’è preso un colpo… 7 MB per accendere un Led ? Mi pare decisamente troppo. Allora ho deciso di impegnare un’oretta dell’ozioso pomeriggio per riscrivere lo stesso programma per conto mio. Dato che per controllare il suddetto Led bisogna comunque attivare la libreria per la gestione della telecamera, ho quindi deciso di aggiungere anche una finestra di immagine che riprende ciò che viene illuminato dal Led. Nella foto sottostante vedete lo screenshot dell’applicazione:

fammiluce-scrCome potete notare, il programma è essenziale, niente fronzoli. Semplicemente premete il pulsante On / Off per accendere e spegnere il Led. Tutto qui.

L’applicazione è disponibile gratuitamente su Google Play.

Circuito di test per display LCD basato su controller NEC µPD7225G

Questo articolo è stato già pubblicato sul mio vecchio sito, che ora non esiste più. Ho notato che ci sono diversi link su Internet che puntano a quel vecchio documento, così ho deciso di metterlo nuovamente on-line sul mio blog. Eccolo di seguito:

Circuitino di test per accendere un display LCD basato sul controller NEC µPD7225G.

Il prototipo montato e funzionante

Il prototipo montato e funzionante

Il microcontrollore utilizzato è un ATmega48 in package DIP.
Lo schema è visibile nella figura sottostante (cliccare l’immagine per una visione ingrandita):

sch131Ho disegnato anche un piccolo circuito stampato per usi generali (vedi sotto) :

cs131comp131Per una stampa precisa, utilizzare il file nel formato PDF che si trova nello zip scaricabile.

Il display utilizzato per il test ha 12 caratteri da 7 segmenti più numerosi segnalatori.
I segmenti sono mappati secondo la tabella sottostante:

disp131mapIl file sorgente in C contiene le routines di gestione del controller e un piccolo programma di prova che accende, uno alla volta, tutti i segmenti del display.
Per chi non ha il compilatore, c’è anche il file HEX già pronto per essere scaricato nel micro.

Il file ef131.zip contiene:

  • cs131.pdf – il disegno del master in PDF stampabile in scala 1:1
  • main.c – il file sorgente in C del programma di test
  • upd7225.hex – il file compilato pronto per essere trasferito sul micro

Scrivere e testare App per iPhone e iPad su Windows

Aggiornamento – 11 Maggio 2016
Con mio grande dispiacere, devo aggiungere una nota importante a questo post. La mia App per iPhone scritta con lo strumento DragonFire SDK descritto nell’articolo e pubblicata su Apple Store tramite Zimusoft, è sparita qualche giorno fa, insieme a tutte le altre applicazioni free pubblicate da diversi utenti che hanno comprato il software di sviluppo. Ho scritto due email alle persone della Zimusoft con cui ero stato in contatto e altre due al supporto on-line, senza ottenere alcuna risposta. L’ultimo aggiornamento del loro sito web sembra risalire al 2014. A questo punto, dovrò rifare tutto di nuovo, ripartendo da zero e usando, ovviamente, un altro tool di sviluppo. Lo strumento acquistato solo due anni fa è diventato del tutto inutile. Peccato, tecnicamente era eccellente, ma le applicazioni “free” pubblicate tramite Zimusoft, scompaiono insieme alla Zimusoft. Lascio l’articolo on-line come descrizione di un buon modello di sviluppo, ma al momento attuale non posso consigliarlo a nessuno.

Scrivere e testare applicazioni per iPhone usando un computer Windows ? Si può fare. La via naturale per sviluppare applicazioni (App) per iPhone o iPad è nota: bisogna avere un computer Apple, installare il software di sviluppo Xcode, studiare il linguaggio Objective-C e spendere 99 dollari l’anno per “fregiarsi” del titolo di sviluppatore Apple. Una via costosa, inutilmente limitativa, un modello di sviluppo non al passo con i tempi. Un’alternativa possibile è quella di scrivere applicazioni che non sono altro che pagine web, con un massiccio uso di Javascript (cosa possibile su ogni piattaforma, come ho evidenziato in alcuni vecchi articoli del mio blog). Naturalmente, quest’ultima soluzione ha i propri limiti e non sempre permette di raggiungere gli obiettivi prefissati. Di recente, un amico mi ha chiesto se potevo scrivergli un’applicazione su smartphone per controllare via internet dei dispositivi elettronici situati nella sua azienda; gli ho risposto: “non c’è problema” e in pochi giorni ho scritto un bel programmino per Android ; ho salvato l’Apk su un mio sito ed ho dato al mio amico il link per scaricarlo con il suo smartphone Samsung, per poi eseguire l’installazione “da fonti sconosciute”. Il mio amico ha seguito le istruzioni e poi mi ha chiamato e mi ha detto: “Che bellezza, proprio quello che volevo”, ringraziandomi moltissimo. Poi, dopo qualche giorno, mi ha richiamato dicendo: “C’è un piccolo problema… ho fatto vedere il tuo programma a diversi miei clienti e sono tutti entusiasti, però alcuni hanno lo smartphone Apple. Non puoi scrivermi lo stesso programma anche per iPhone ?”.
Ho risposto al mio amico che non uso nessun dispositivo Apple dai tempi in cui programmavo (con successo) in assembler sul validissimo processore 6502 del mitico personal computer Apple ][ . “Però”, gli ho detto, “mi informo e poi ti faccio sapere”.
Ho iniziato, quindi, una ricerca in internet sull’argomento dello sviluppo di applicazioni per iPhone ed ho immediatamente percepito che la cosa non era affatto semplice. Ci sono diversi tool di sviluppo, ma alla fine, per compilare ed eseguire qualcosa su uno smartphone, ci vuole una macchina Apple. Un po’ scoraggiato, ho provato ad installare le versioni di prova di alcuni software, ma una volta installati, questi mostravano i propri limiti. Dopo aver provato diversi IDE e tool di sviluppo, ho infine trovato un sito dove c’era uno strumento che prometteva di darmi tutto ciò che serviva a sviluppare la mia applicazione sotto Windows, usando l’IDE di Visual C++ (quest’ultimo anche edizione “express”, gratuita da Microsoft) e di testare l’applicazione immediatamente su un simulatore di iPhone. Questo strumento si chiama DragonFireSDK. Ho cercato una versione “demo” per fare qualche prova, ma non c’è 🙁 bisogna comprarlo e costa (per la versione iPhone) 99,95$ (circa 80 Euro). Tutto sommato, considerando quanto costerebbe comprare un computer Apple e pagare la licenza di sviluppatore (più il tempo necessario per impratichirsi dell’Objective-C e dell’IDE Xcode) mi è sembrato un prezzo ragionevole, anche se non proprio “cheap”. Ho allora chiamato il mio amico e gli ho detto: “Ho trovato uno strumento che mi permetterà di sviluppare rapidamente l’applicazione anche per gli smartphone Apple; devi comprare questo software” e gli ho indicato il link per l’acquisto on-line. Lui ha inviato il pagamento e gli è arrivata una email con un collegamento per il download. A prima vista, pareva una fregatura… poco più di 7.7Mbytes di roba (quasi 13$ a MB !) e nessun eseguibile tipo IDE… Sudori freddi 🙁 poi una seconda lettura di tutte le FAQ e dei suggerimenti proposti nel sito, mi ha tranquillizzato.  Per usare questo tool, si deve avere un Visual C++ installato sul proprio computer; è un prerequisito assolutamente obbligatorio. Ho chiesto al mio amico se aveva un portatile con installato un Visual C++ qualsiasi e lui mi ha risposto di sì, c’era un vecchio portatile con WinXp e VisualStudio 2005. Ottimo, allora installiamo il DFSDK (DragonFire SDK) su quella macchina, così me la posso portare a casa per lavorarci con tranquillità. Nel giro di due settimane ho “convertito” l’applicazione scritta per Android in una “App” per iPhone ed ho potuto installarla su un dispositivo (un iPhone 3GS, non jailbroken) e testarla con piena soddisfazione. Vediamo ora quali sono i passi necessari per scrivere / compilare / installare una App su un dispositivo iPhone, usando solo ed esclusivamente un computer con sistema operativo Windows e DragonFireSDK.

Allora, eseguiamo il file SetupDragonFireSDKV2_2.exe che abbiamo scaricato dal link dopo l’acquisto e poi andiamo ad esplorare la cartella nella quale è stata effettuata l’installazione. Troveremo una struttura fatta così:

dfsdk_screen1

Figura 1:  la cartella d’installazione di DragonFireSDK

Ora apriamo la cartella Samples e troveremo una utilissima serie di esempi:

dfsdk_screen2

Figura 2:  la cartella Samples

La via migliore per fare pratica, è aprire uno degli esempi, compilarlo ed eseguirlo sul simulatore di iPhone locale. Questo simulatore, secondo me, vale da solo il prezzo del pacchetto software. Avrete la possibilità di testare il programma completamente sul vostro PC, prima di effettuare una compilazione on-line per poi avere finalmente l’ App installata sul vostro autentico iPhone (nota bene, un iPhone originale, senza dover effettuare nessuna operazione di jailbreak).

Bene, procediamo e creiamo una directory di lavoro sul disco, per esempio: C:\iProgetti ; all’interno di questa directory copieremo la cartella MyFirstApp che si trova su C:\DragonFireSDK. Facciamo un’operazione di “copia” e non “sposta” per tenerci un originale che sarà utile per iniziare nuovi progetti. A questo punto apriamo la cartella C:\iProgetti\MyFirstApp e ci troveremo davanti questa situazione:

dfsdk_screen3

Figura 3:  la cartella con la nostra prima applicazione

In base ai prerequisiti necessari al funzionamento di DFSDK, dobbiamo avere Visual C++ di Microsoft installato, quindi cliccando sul file MyFirstApp.sln si aprirà il progetto completo. Nell’immagine sottostante trovate uno “screenshot” del programma (cliccare l’immagine per una visione ingrandita).

dfsdk_screen4

Figura 4:  l’ambiente Visual C++ con il file App.cpp aperto

Ora, se clicchiamo la freccetta verde del “run”, vedremo apparire il simulatore di iPhone, a sinistra dello schermo. L’applicazione MyFirstApp è “vuota” e quindi non ci sarà niente di speciale da osservare, ma a questo punto è compito vostro “riempirla” con il vostro primo progetto. Qui sotto trovate lo screenshot dell’IDE di Visual C++ con il simulatore iPhone in funzione (al solito, cliccare l’immagine per ingrandirla).

dfsdk_screen5

Figura 5:  l’ambiente di sviluppo in fase di esecuzione del programma. Appare il simulatore di iPhone.

DFSDK è stato pensato principalmente come strumento di sviluppo per giochi. La ragione di questo orientamento credo sia abbastanza evidente: un gioco divertente ha molte probabilità di diventare una buona fonte di guadagno per uno sviluppatore, molto più di una qualsiasi altra applicazione. Però DFSDK non è solo uno strumento per creare giochi, anzi, la mia prima applicazione non ha nulla a che vedere col settore ludico. E’ una tastiera con display che interagisce via internet con dispositivi di home automation. L’impostazione “gioco”, però è da tenere ben presente anche mentre si sviluppa qualcosa di diverso. Come ogni sviluppatore di giochi sa, ogni parte della grafica deve essere creata dall’autore, non esistono “cibi precotti”, ogni dettaglio deve essere pensato e prodotto in funzione del progetto grafico dell’intera applicazione. Quindi, ogni “form”, ogni “bottone”, ogni dettaglio saranno unici, personalizzati, non i soliti bottoni pre-stampati di un editor GUI standard. Al momento non esiste uno strumento integrato in DFSDK per realizzare rapidamente una interfaccia GUI. Se però date un’occhiata al forum, c’è qualcuno che ha creato un “tool” esterno per generare queste maschere; c’è una versione demo gratuita oppure una più completa a pagamento. Io non ho un’esperienza diretta di questo tool, ma se volete informazioni più dettagliate, questo è il link. Personalmente, per disegnare pulsanti, form, logo eccetera, mi avvalgo di uno straordinario strumento (free) on-line che ha una notevole potenza e un’eccezionale facilità di utilizzo. Si tratta di Cooltext. Uso questo strumento da lungo tempo e trovo sia pratico, facile, disponibile su ogni PC (essendo on-line). Si possono creare molti elementi grafici e il file di output è sempre un PNG, quindi con le trasparenze necessarie per organizzare forms e pulsanti (suggerimento: iniziate con lo stile “Plain”). Una delle caratteristiche dei pulsanti che si possono creare, è il comportamento che devono avere in caso di “mouse over”. In pratica, per ogni pulsante disegnato si possono avere due immagini, una con l’effetto “non premuto” e l’altra con “premuto”. Queste due immagini sono essenziali per lo sviluppo di applicazioni tramite DFSDK, perché quando si definiscono i pulsanti (“buttons”), si devono creare due immagini: una, appunto, per il pulsante rilasciato e l’altra per quando l’utente “tocca” il touch screen e deve vedere il cambiamento (effetto pressione) sul tasto interessato. Per i files audio, vi consiglio il sito freesfx che ne contiene migliaia. I files audio utilizzati in ambiente DFSDK (e su Apple), possono avere solo i formati Snd e Mp3, ma non c’è problema nell’utilizzare anche files Wav  (che sono più facili da reperire su internet) ; infatti, se tornate alla figura 1 (la cartella d’installazione di DFSDK), troverete il programma Wav2Snd.exe che permette la conversione da Wav a Snd in modo semplice e rapido.

Supponiamo, ora, di aver scritto e provato sul simulatore la nostra prima applicazione per iPhone (poi torneremo indietro ad una descrizione della programmazione in Visual C++). Ci si pone il problema di trasferire il programma sul nostro iPhone; anzi, io non avevo un iPhone e così ne ho cercato uno (usato) per poter fare delle prove “reali”. Cercando in famosi negozi on-line, è facile trovare un 3GS con 16GB di memoria a prezzi variabili dai 70 ai 120 euro, a seconda dello “stato di conservazione” del telefono. Per collegare un qualsiasi dispositivo con “la mela” a Windows bisogna per forza usare il software iTunes, fornito come freeware da Apple. Dopo aver installato questo software siamo praticamente a posto; abbiamo scritto un’applicazione, abbiamo un iPhone e abbiamo il software per trasferire il programma dal PC al dispositivo. Però non basta… La politica di installazione delle applicazioni di Apple è molto rigida, lontanissima dalla semplicità di Android e secondo me profondamente sbagliata, perché è stata creata per mantenere una certa “protezione” dell’utente, ma in effetti crea più svantaggi che vantaggi. La sicurezza è un mito e vari “hackers” hanno sfruttato i “bachi” presenti nel sistema (in qualsiasi sistema) per creare procedure di “jailbreak” e quindi superare in un solo balzo tutti i vincoli e le protezioni del sistema. Quindi, ribadisco, tutta la complicazione introdotta da Apple per l’installazione di programmi, anche di propri programmi, è assurda, informaticamente diseducativa e castratoria, lontanissima dai tempi d’oro di Apple ][, quando ogni cosa era documentata, dagli schemi elettrici fino al codice assembler 6502 per far funzionare le schede di espansione. Quella era la Apple che diffondeva la cultura informatica; ora invece è in mano a tiranni commerciali che manderanno, prima o poi, tutto in malora. I concorrenti di Apple (Android in testa) sono agguerriti e conquistano ogni giorno nuove fette di mercato. Se Apple non cambierà questa assurda politica di limitazione nella creazione di nuovo software, si estinguerà. Chiusa la questione “opinioni personali”, vediamo cosa è necessario fare per trasferire il programma sul telefono. Il primo passo è collegare il telefono al PC e lanciare iTunes. Nelle informazioni del telefono collegato dovremo cercare l’UDID (il codice identificativo unico del dispositivo) e prenderne nota. Quando ci registriamo a DragonFireSDK, diventiamo a tutti gli effetti parte del loro team di sviluppatori ed abbiamo diritto a ricevere un codice detto “mobile provision” che ci permetterà di installare l’applicazione su di un telefono di prova, anche quando siamo in fase di debug e il programma non è stato pubblicato su “Apple Store”. Quindi, prendiamo il nostro UDID e mandiamolo via email al supporto di DFSDK, chiedendo di aggiungere il nostro dispositivo a quelli autorizzati. Nel giro di 24 ore riceveremo una email di conferma e a questo punto potremo cominciare a preparare il necessario per eseguire la compilazione del nostro programma scritto in Visual C++. Come ho annunciato nell’introduzione, un programma per iPhone deve essere compilato su una macchina Apple, ma allora, come si fa ? Si usa uno strumento on-line… DragonFire SDK permette, appunto, di eseguire on-line la compilazione del nostro sorgente su una macchina Apple e ci restituisce un file zip che contiene la App vera e propria e il file mp.mobileprovision, che è l’autorizzazione necessaria all’installazione della App sul dispositivo. La procedura di compilazione on-line è veloce, ci vuole giusto qualche minuto. Una volta andati sulla pagina di build, inserite il vostro username (l’indirizzo email con il quale vi siete registrati) e il numero di serie del vostro DFSDK. Cliccate login e vi troverete su una nuova pagina web (cliccare l’immagine per ingrandirla).

Figura 6: il compilatore on-line. Sulla destra il QR relativo all'ultima compilazione on-line eseguita

Figura 6:  il compilatore on-line. Sulla destra il QR relativo all’ultima compilazione on-line eseguita

Sulla sinistra, nella casella di testo “App Name“, inseriremo il nome della nostra applicazione, per esempio “MyFirstApp” e di sotto, nella casella di dialogo files “Build zip“, andremo a ricercare tra i file della nostra applicazione Build.zip (la descrizione di ciò che è contenuto in questo file può essere visualizzata su questa pagina del sito DFSDK in inglese). Infine, premeremo il pulsante “Build” e inizierà il trasferimento dei dati verso il compilatore on-line. Una volta completato il trasferimento (il tempo dipende soprattutto dalla quantità delle immagini e dei suoni che fanno parte della nostra applicazione), lo schermo cambierà così:

Figura 7: il compilatore on-line sta elaborando il nostro file sorgente

Figura 7:  il compilatore on-line sta elaborando il nostro file sorgente

L’operazione durerà qualche minuto, in funzione della complessità dell’elaborazione. Ogni tanto premiamo il pulsante “Check Status” per vedere se l’operazione è conclusa. Quando la compilazione sarà stata completata, torneremo a vedere una schermata come in figura 6. Sulla destra avremo un codice a barre QR e un pulsante per eseguire il download del file MyFistApp.zip . Il codice a barre QR serve per fare l’installazione OTA (Over The Air), cioè senza collegare il telefono ad iTunes. Sul mio telefono non c’è un programma di lettura QR e così ho provato ad installarne uno gratuito (i-nigma, se non sbaglio), ma dopo aver posizionato il telefono vicino allo schermo ed aver letto il codice, l’installazione OTA è fallita. Non so se il problema risiede nel lettore QR o in qualche limite del mio telefono o della connessione a internet, comunque, se l’installazione OTA non funziona, clicchiamo il pulsante “Download” e scarichiamo il file per una normale installazione OTW (Over The Wire)  🙂 collegando il telefono al PC dove è installato iTunes. Nel file MyFirstApp.zip scaricato troviamo una cartella chiamata MyFirstApp.App e un file di nome mp.mobileprovision. Trasciniamo entrambi i files nella libreria Apps di iTunes (guarda questa pagina di help di DFSDK, in inglese) e infine eseguiamo la sincronizzazione con il telefono… finalmente questa prima App sarà installata sul nostro iPhone. Se effettuiamo modifiche al codice e ri-eseguiamo le operazioni di compilazione e installazione, consiglio caldamente di rimuovere la vecchia applicazione sia dal telefono che da iTunes, prima di installare la nuova.

Quando la nostra App sarà finalmente completata, quando l’avremo provata sul nostro PC Windows e poi sull’iPhone, potremo finalmente iniziare il percorso per pubblicarla sull’Apple Store. Anche in questo caso, DFSDK ci darà una mano, anzi una grossa mano, aiutandoci a scavalcare la faraonica burocrazia di Apple. Anzi, se intendiamo pubblicare la nostra App “for free”, cioè gratuita, non dovremo far altro che compilare un apposito form on-line e dare il nostro consenso a Zimusoft (la ditta che produce DFSDK) per eseguire tutto quanto è necessario alla pubblicazione. In questo caso, il produttore del software che apparirà sull’Apple Store sarà Zimusoft, ma il copyright sull’applicazione sarà comunque il nostro. Questo significa che con DFSDK si può “pubblicare” una App senza dover effettuare l’iscrizione ad Apple come “developer” e quindi senza pagare l’esoso “tributo” annuale di 99 USD. Se invece la nostra applicazione è a pagamento, dovremo fare l’iscrizione ad Apple come “developer” e pagare i 99 USD l’anno. Se poi vogliamo iscriverci come azienda e non come privati, dovremo anche ottenere un numero identificativo della nostra azienda. Questo numero, chiamato DUNS, viene fornito gratuitamente in molte parti del mondo. In Italia, al solito, non è gratis; ottenerlo costa 50 Euro una tantum. Una ricerca in rete vi permetterà di avere maggiori informazioni su questo numero e sul suo utilizzo in ambito internazionale. Torniamo all’iscrizione come developer… quando l’avremo effettuata, potremo comunque rivolgerci al supporto DFSDK per tutte le fasi successive, sino alla pubblicazione sull’Apple Store. Attraverso questa procedura, quindi avendo effettuato l’iscrizione come Apple Developer, saremo noi i produttori del software (non Zimusoft) ed i detentori, ovviamente, del copyright e potremo attribuire un costo alla nostra applicazione. E’ da tenere presente che del costo attribuito, facciamo che sia 10 Euro, a noi ne verranno, in caso di vendita, solo 7 perché 3 se li prenderà Apple per averci “fatto il favore” di tenere la nostra App in vetrina. I nostri 7 Euro dovranno comprendere l’IVA, che sarà calcolata a seconda del Paese in cui viene effettuato l’acquisto. Noi diventeremo sostituti d’imposta e quindi dovremo in qualche modo restituire l’IVA allo Stato, oltre a dichiarare i nostri guadagni e pagare le tasse su di essi. Se la vostra App piace e viene venduta in tutto il mondo, vi consiglio vivamente di rivolgervi ad un bravo commercialista… Ah, un momento, mi stavo dimenticando una cosa importante. La vostra App, sia che la pubblichiate con Zimusoft, sia che abbiate il vostro account di sviluppatore, dovrà passare l’esame di Apple per poter essere accettata. Leggetevi, sul sito Apple, le numerose regole da rispettare per non vedere “rejected”, rigettata, la vostra App. Alcune di queste (numerosissime) regole sono di buon senso, altre meno… comunque, queste sono opinioni personali e quindi non mi spingo oltre nella critica. Anche in questo caso, se la vostra App dovesse essere rifiutata per qualche “mancanza”, potrete rivolgervi (in lingua inglese) al supporto DFSDK per ottenere consigli su come rimediare. Tenete presente che ognuna di queste modifiche, con conseguente ri-approvazione da Apple, richiede un paio di settimane di tempo. Inoltre, Zimusoft esegue gratuitamente la prima pubblicazione, ma per le successive ci sarà un costo (non elevato) specificato nelle pagine del sito.

Ora, torniamo alla scrittura del programma in C. Per prima cosa, diamo un’occhiata alle API messe a disposizione da DFSDK ; a questo link possiamo trovare un elenco completo. La struttura base di un programma in ambiente DFSDK è costituita da tre funzioni principali: la AppMain, la AppExit e la OnTimer. Il nostro programma si chiamerà sempre App.cpp e se vogliamo aggiungere altri files sorgente potremo farlo considerandoli come degli header e quindi includendoli come files .h mantenendo così inalterata la struttura standard. La funzione AppMain è quella di avvio ; al suo interno costruiremo tutta l’interfaccia grafica e quanto necessario al funzionamento del programma. La funzione AppExit è quella che viene eseguita quando l’utente chiude completamente il programma, quindi inseriremo al suo interno quanto necessario per liberare eventuali risorse impegnate. La funzione OnTimer viene chiamata automaticamente 30 volte al secondo e sarà al suo interno che gestiremo le operazioni a tempo (animazioni o vari eventi temporizzati). Chiaramente, dovremo stare attenti a non scrivere al suo interno pezzi di codice che durino più di 33 mS, altrimenti qualche evento di OnTimer verrà “saltato” (30 chiamate al secondo, danno una durata massima di 1000 mS / 30 eventi, quindi circa 33.3 mS). Aggiungerei immediatamente una quarta funzione, che non è automatica, ma deve essere programmata da noi nella AppMain. Questa è la SuspendInit, che ci permetterà di definire una funzione di callback che sarà chiamata quando l’utente manda “in sospensione” la nostra applicazione, avendone aperta un’altra. Ok, a questo punto una struttura di base potrebbe essere questa:

#include "DragonFireSDK.h"

// funzione chiamata quando la nostra applicazione viene sospesa
void OnSuspend()
{
   printf("debug: l'applicazione viene sospesa\n");
}

// applicazione principale
void AppMain()
{
   // definiamo la funzione di callback OnSuspend
   SuspendInit(OnSuspend);
}

// termine dell'applicazione
void AppExit()
{
}

// evento temporizzato; step 1/30 sec
void OnTimer()
{
}

La programmazione è un’arte, anche se un tipo d’arte non fruibile dal grande pubblico. Difficilmente vedrete qualcuno colpito dalla “Sindrome di Stendhal” davanti a un listato di programma sorgente in Assembly Language, sebbene io possa affermare di essermi commosso davanti ad alcune righe di Stephen Wozniak nel listato sorgente in assember 6502 del mitico Apple II. Ogni programmatore professionista ha il proprio stile e chi è “nel settore” sa distinguere l’opera di uno da quella dell’altro. Questo preambolo è per rendere chiaro a chi mi sta leggendo che ognuno ha un diverso approccio alla programmazione e ognuno ha il proprio stile. Considerando la programmazione un’arte, sono anche del parere che non sia “per tutti”, ma solo per chi ha un talento naturale per questo specifico settore. Semplificando al massimo quali sono le caratteristiche di un programmatore di talento, direi che è indispensabile che egli / ella abbia smontato, da bambino/a , tutti i giocattoli che riceveva in regalo (e pure quelli degli amici) per vedere “cosa c’era dentro”.

Uno dei metodi più efficaci per imparare qualcosa di nuovo è di avere sotto mano un esempio pratico, funzionante, ed osservare da un lato l’oggetto (l’applicazione) in funzione e dall’altro il progetto (il listato del programma sorgente) per capire come ogni azione è stata organizzata, studiata, programmata per dare un certo risultato. Quindi, la mia proposta per concludere questo lungo articolo è una piccola applicazione che potrete far “girare” sul vostro PC Windows e di cui avrete a disposizione il file sorgente completo e le risorse (immagini e suoni), così da provare praticamente il “come funziona” e approfondire la conoscenza del DFSDK. Il file di esempio sarà uno zip che conterrà il programma eseguibile per Windows (vedrete il simulatore iPhone in funzione), più una cartella con le varie risorse. Oltre a questo, nello zip sarà incluso il file sorgente in C++ per poter osservare, come dicevo, le varie funzioni che rendono attivo il programma. Purtroppo non sarà possibile effettuare delle modifiche, perché per far ciò occorre acquistare il software completo da Zimusoft, ma può essere un buon punto di partenza. Se deciderete di cominciare a sviluppare i vostri programmi per iPhone / iPad, allora potrete acquistare la licenza e così avrete accesso alle risorse fondamentali per lo sviluppo (build on-line con file mobileprovision) e la pubblicazione delle vostre App.

Ed eccoci pronti. Ho impegnato questo pomeriggio domenicale per scrivere l’applicazione. Questo è lo screenshot del gioco in funzione :

Screenshot del simulatore iPhone

Screenshot del simulatore iPhone, eseguito su Win7

Avrete sicuramente riconosciuto il gioco… con un sofisticato esercizio di fantasia, l’ho chiamato “colors”. Potete scaricare la cartella compressa dal link che appare sotto la clausola di non assunzione di responsabilità. Il file sorgente in C++ è disponibile all’interno della cartella stessa. Non fate caso ad alcune ineleganze stilistiche, perché mi sono fermato alla prima stesura “di getto”, non essendo il programma destinato a un pubblico “pagante”… 🙂 Per eseguire l’applicazione, dopo aver scaricato il file zip, espandetelo in una qualsiasi cartella (esempio: C:\unzipped\), quindi lanciate l’eseguibile colors.exe e buon divertimento…

Nota bene: il software fornito è da considerarsi un “demo” gratuito e pertanto non sarà fornito alcun supporto, né si assume alcuna responsabilità su ogni eventuale problema dovesse presentarsi a chi effettuerà il download ed eseguirà il programma.
Cliccando questo link per effettuare il download del file colors.zip (V.140816) implicitamente dichiaro di aver letto e capito la clausola di non assunzione di responsabilità dell’autore.