ESP8266 Modify default SSID without a compiler

This program has been written in FreeBasic with the IDE FireFly 3.50 ; both tools are free, easy to use and very “light”.  The compiled executable doesn’t need for installation, it’s ready to run. Just download the zipped file ssid_mod.zip and expand it in a working directory (ie. \downloads\esp8266) and there will be the ssid_mod.exe ready to run.
In order to expand the .zip you must supply a password that is: eficara. Be sure that the downloaded file is the original one by checking its MD5 with a tool like HashTab that’s available for free.
The MD5 hash for the zipped file must be: FB94DDF8B155A0511C13A60FE585642D. If it’s different, do not expand the zip, ‘cause it isn’t the original one. Look at the screenshot of the program just executed:

SSIDmod_ssHow it works

Prior to write this software, I tried to modify the original firmware binary file ESP_8266_BIN0.92.bin with a hex-editor, looking for the string “ESP_” that was the prefix of the default SSID. I found the string at address 0x82C4. Well, it was simple. I stored a new SSID string at the same address, with the care to not overcome the memory area reserved for such data. I then saved the new binary file and tried to re-flash my ESP-01 module, but the programmer failed at a certain block. Ok, the simplest solution did not work. The reason was that the binary file isn’t a “true binary”, but is a collection of binary data, instructions, addresses that are used by the programmer software to communicate with the ESP-01 bootloader (when in flash mode). Looking on the internet I discovered an important information: all the blocks in this “no-binary .bin file” are followed by a checksum. The checksum is very simple: it’s just the xor of all the bytes in the block. Then I decided to write this program that simply creates a string with the same checksum of the original one. This is possible due to the easy implementation of the checksum by means of xor ;.if it was done with a real CRC, this programming approach couldn’t have been used.

The string in the original .bin file is “ESP_%02X%02X%02X” that seems to be a constant data or a variable initialization data. This will probably be used in C statement like: printf(“ESP_%02X%02X%02X”, x,y,z) that means send the ascii “ESP_” followed by three bytes of data in HEX format, 2 characters each, capital letters, to the standard output. In our case, the default SSID of the module may be(for example): ESP_9A0FE9 where 9A, 0F and E9 are the three least significative bytes of the MAC address of the WiFi chip. The C compiler saves all the initialization data in a memory area called “data segment” and the linker creates a fixed map of all that areas. So, if we modify some data without overcoming the assigned space, we can change any initialization string. Note that C strings are “null-terminated”, that means that after the ascii characters there is a /0 (0x00). This makes very simple to change the default SSID of the module, in our case. The important thing is that the ‘Replacement String’ must be at least 2 bytes shorter than the one we want to change. This is because we want to change the data in that memory space without changing the full block checksum. This can be obtained in a very easy way. It’s better to explain with an example: suppose that we want to change an initialization string with the contents “ABCDEF” ; the checksum for all the characters will be 0x07 (0x41 xor 0x42 xor 0x43 xor 0x44 xor 0x45 xor 0x46). Now, lets change it in “TEST” ; such string has checksum 0x16 (0x54 xor 0x45 xor 0x53 xor 0x54) , so we simply add after TEST a null-terminator (0x00) and the value that makes the checksum equal to the one of the old string. In this case it’s 0x11 (0x11 xor 0x16 = 0x07). At the end, the ESP C program, when accessing that data, will find a variable at the default address with the contents : 0x54 0x45 0x53 0x54 0x00 (and this is the end of string, for the program) followed by 0x11. The C program will ignore the 0x11 (it’s after the null-termination), but the .bin file will result correct because “ABCDEF” has exactly the same checksum as “TEST” followed by 0x00 and 0x11. That’s all.

Why the original string is 16 characters long (ESP_%02X%02X%02X) and we can only use a max 10 characters SSID ? It could be 14 max (16 of original size, minus 2 for the checksum adjustment), but in this C program only 10 characters are used, even if you write a 14 characters field. I still haven’t a compiler and toolchain for the ESP8266, nor the C sources to look inside, but, for now, I reached my target that is to change the default SSID of the module without using a compiler and a toolchain. 🙂

update: 2016/04/20

I tried the SSID change on a newer version of the firmware (ai-thinker-0.9.5.2-9600.bin), changing the ‘Search String’ to AI-THINKER_%02X%02X%02X, and modifying the wanted SSID, but at the end of re-flashing, the ESP-01 module still presented the old SSID AI-THINKER_A0C76D 🙁 The reason is simple: there is another point in the firmware where the string is saved in plain form. So I changed again the ‘Search String’ as you can see in the picture below and all was OK. Note that in this case, you can use an SSID up to 15 characters long.

new-version_ssReflashing the ESP-01 module

I used a tool called esp8266_flasher.exe to re-flash the ESP-01 module after the default SSID change; here is a screenshot of the operation. Note that the program ends with a failure trying to exit the “flash mode”, but it’s normal, ‘cause my hardware has a physical jumper to enter / leave such operating mode.

flash-downloader-ssThe original firmware, together with the programming tool, was found googling the internet for ESP8266_flasher_V00170901_00_Cloud Update Ready. The original binary file used in my experiments is the one named: ESP_8266_BIN0.92.bin

After resetting the module, the state of the WiFi networks visible from my computer was the one in the picture below. As you can see, I joined my ESP-01 module with SSID named WiFicara01, that was substituted to the one in the original flash rom binary file.

wifi-connected-ss

Software di test per ESP8266

Se qualcuno ha costruito il circuito che ho proposto nel mio precedente articolo sul fantastico IC ESP8266, potrà trovare utile un software di test in ambiente Windows per effettuare qualche prova. So che ci sono in giro applicazioni di tutti i tipi con la stessa funzione, ma di solito preferisco scrivere io stesso i miei programmi perché così ci metto dentro esattamente quello che mi serve, niente di più e niente di meno. Qui sotto si può vedere uno “screenshot” del programma in funzione:

tool_esp8266_ssIl programma è stato scritto in FreeBasic con l’IDE FireFly 3.50; questo ambiente di sviluppo è gratuito, facile da usare, “leggero” ed efficace.  Il programma è un eseguibile puro, non ha bisogno di installazione; una volta scaricato il file zippato Tool_ESP8266.zip si dovrà solo scompattare l’eseguibile in una directory di lavoro (ad es. \downloads\esp8266) e lì ci sara l’EXE pronto all’uso. Per scompattare il file zip con il programma 7Z verrà richiesta una password ; questa è eficara. Per verificare che il file zippato sia quello originale, mi raccomando di verificarne il contenuto calcolando l’hash (io uso il programma HashTab V5.10), controllando che l’ MD5 sia: FC97A53A0465FCA6CD8CA471E2B2623E. Se è diverso, non scompattate il file, non è quello originale.

Caratteristiche del programma

Il programma comunica, attraverso una porta seriale, con il modulo ESP8266. In alto a destra nella schermata dell’applicazione ci sono i campi da riempire per settare la comunicazione seriale. Il numero della COM port potrà essere verificato vedendo, tra le risorse hardware del computer, quale indirizzo è stato assegnato dal sistema al convertitore USB-Seriale che avremo inserito in una delle porte USB del nostro computer. La velocità (speed) è solitamente di 115200 BPS, ma in alcuni moduli ESP molto vecchi (il primo lo comprai più di due anni fa) la comunicazione potrebbe essere inizialmente a 9600 BPS. Per verificare che tutto sia OK, basta inserire il numero della COM port e la velocità e cliccare il pulsante “open”. Se tutto è OK, allora la scritta sul pulsante si trasformerà in “close” e la porta di comunicazione sarà attivata; in caso contrario, si potrà leggere nella finestra dei messaggi la ragione per la quale la comunicazione non è possibile. In pratica, si può ricevere un errore per impossibilità di aprire la porta seriale (ad esempio. se avete sbagliato numero di porta COM) oppure per una velocità errata. In questo caso, riprovate inserendo altre velocità tra quelle standard: 4800, 9600, 19200, 38400, 57600, 115200 o superiori se la vostra interfaccia USB-Seriale le supporta..

Una volta aperta la comunicazione, abbiamo a disposizione alcuni comandi pre-caricati nelle 9 righe di comando. Il contenuto delle righe di comando, ovviamente, può essere modificato secondo le proprie necessità. Notate che a destra di ogni comando AT c’è un commento, iniziato da una doppia barra // ; tutto ciò che scriverete dopo la doppia barra (e la doppia barra stessa) non verrà inviato sulla porta seriale. A destra di ogni riga di comando c’è un pulsante di invio il cui uso è abbastanza intuitivo: invia sulla porta seriale il comando AT contenuto nella riga. Sulla finestra dei messaggi si vedrà il messaggio inviato e la conseguente risposta del modulo ESP collegato. I comandi pre-confezionati, così come li vedete appena aperto il programma, consentono di effettuare tutte le operazioni necessarie per attivare un server TCP sulla porta 80. Nella foto della schermata del programma, vedete l’effetto di un browser che cerca di accedere ad una pagina html del nostro ESP. Ovviamente, il browser rimane “impallato” per mancanza di risposte fino a quando non inviamo il comando sulla riga 9, che chiude la connessione TCP (oppure al timeout in attesa di risposta).

Se modifichiamo i comandi, inserendo al posto di quelli “di default”, quelli che riteniamo utili alla nostra sperimentazione, potremo poi salvarli (tutti insieme) usando il pulsante “save” in alto a destra nel riquadro -disk- ; analogamente, potremo ricaricare una combinazione di comandi salvata usando il pulsante “load”. Bisogna tenere presente che se il programma eseguibile è stato salvato in una directory che richiede i privilegi di amministratore, per salvare un file bisognerà lanciare il programma con i privilegi richiesti, quindi “esegui come amministratore”. Se si è utilizzata una directory con i diritti di scrittura da parte dell’utente, non ci sarà problema.

Per il momento è tutto. Buona sperimentazione !

Nota: a questo link è possibile trovare una nuova versione del programma con alcune importanti migliorie.

Spread your meteo sensor data over the internet

I published on the Italian Magazine for Electronics “CQ Elettronica” (issue N.485 September 2007) an article about my project based on Atmel ATtiny2313 microcontroller that converts the RF data stream (OOK modulation at 433 MHz) received from Oregon Scientific meteo sensor model THGR228NF (look at this link for more details).  This device was also revised by Hack-a-day in September 2007.

Recently, I created an Android App to display the received data on a tablet or a smartphone, using an USB-Serial interface to connect the receiver to the device. You can find the App on my page on Google Play Store and more informations at this link.

After the first version, I created a new one that uses a PIR sensor (Passive InfraRed) to swap the screen from a flip-clock to the meteo data screen when a person passes near the box. This is the prototype:

App in funzione su tablet 800x480 scala=1

Prototype running on 800 x 480 display 6.5″ Phablet

Well, after that I had the idea to publish my webcam on the Internet, superimposing over the picture (taken every 20 minutes) the meteo data received from the Oregon Scientific meteo sensor. This will enhance the picture with useful meteo data. Here is an example of what you can see clicking my webcam link :

webpic

click to reload actual view

As you can see, at the bottom of the image there are two information lines. Such lines are created by a PHP script that I stored on the server. The first line is the date and time of the picture, while the second is the date and time of the meteo informations (sent every 10 minutes), together with the temperature and humidity at the specific time.

The picture sent by the webcam hasn’t any information, being the camera a very simple device (look below how simple is..)

very home made webcam (click to enlarge)

very home made webcam (click to enlarge)

The bridge from the meteo receiver to the second line of picture is a new App written for an old 7″ tablet, running Android 2.2. This App does what the previous did, but every 10 minutes sends an HTTP GET request to a specific PHP script that I saved on the server. This GET request is formatted with a simple crypting and contains the temperature and humidity read from the sensor. The PHP script on the server receives the meteo data and creates a file with such infos. When the user clicks the link of my webcam, the PHP script loads the picture received from the webcam and the meteo data received from the tablet and creates on-the-fly the image you receive on your browser. Obviously, the tablet running the App connects to the Internet thru the home modem / router that acts as a WiFi hotspot.

I haven’t published this App on Google Play ‘cause I decided to use, as communication port, the internal ttyS0 of the tablet. Such communication port was present in almost all the first models of tablets, but was used by the system for the “console” service. I modified the init.rc file of my rooted tablet (running Uberoid image) in order to disable the console service on that port, so I connected my RX-Met1 receiver directly to ttyS0 without any USB-Serial interface. This approach is too “specialistic” and therefore isn’t idoneous to the Play Store distribution. I just added a small video to show how I arranged the old tablet in a box with the receiver and the PIR sensor… (Dailymotion video)


MeteoRx22 di robotop

This way of sending sensor data over the Internet can be easily achieved with new low-cost modules, like ESP8266 that gives you the power of WiFi at very low price, with extreme easy of use.

IP Query – utility di rete per Android

L'icona dell'applicazione

L’icona dell’applicazione

Sempre più spesso gli smartphone vengono usati per connessioni Internet, non solo per la navigazione del Web o per la messaggistica istantanea, ma anche per il controllo a distanza di apparecchi collegati in rete. Ho così deciso di scrivere una piccola App che svolge due compiti : verificare se è possibile connettersi ad una certa “porta” su uno specifico IP e se si riceve risposta ad un “ping” inviato verso un IP. Nello screenshot sottostante si vede che la porta 80 (http) dell’IP 192.168.1.1 (il modem / router di casa) è raggiungibile.

Screenshot dell'App a seguito del comando Test

Screenshot dell’App a seguito del comando Test

In alto, sullo schermo, si nota l’IP locale dello smartphone, che essendo collegato in WiFI ha avuto dal server DHCP l’IP 192.168.1.9 . La porta 80 è raggiungibile perché il modem / router ha un’interfaccia di programmazione attraverso un browser web, quindi via HTTP.

Il comando di Ping invia un pacchetto ICMP e verifica che l’IP impostato sia raggiungibile. Alcuni server bloccano il servizio di risposta al ping per ragioni di sicurezza, ma nella maggior parte dei casi è possibile vedere se un IP è attivo ed operante.

Sia il comando Test che il Ping inviano una singola richiesta. Se si riceve come risposta un “no”, è opportuno eseguire di nuovo la prova per tre o quattro volte, per essere sicuri.

L’applicazione è disponibile gratuitamente su Google Play Store.

Terne Pitagoriche

pitagoraIl signore nell’immagine, che giustamente pensa di essere “troppo” forte, è Pitagora. Avendo una mente incline alla matematica, arrivò a calcolare che il quadrato costruito sull’ipotenusa è pari alla somma dei quadrati costruiti sui cateti (nel caso di un triangolo rettangolo, ovviamente). So che i Babilonesi arrivarono alla stessa conclusione diverso tempo prima, usando un metodo quasi “grafico”, e noi ringraziamo tutte queste menti brillanti e applichiamo la regola lasciataci in dono per fare i nostri calcoli.

Normalmente conosciamo i due cateti e dobbiamo trovare l’ipotenusa, oppure conosciamo l’ipotenusa e un cateto e dobbiamo trovare l’altro, ma recentemento ho aggiunto alla mia calcolatrice Android (scaricabile da Google Play Store, vedi link)  un tasto che compie un’azione diversa: possiamo inserire un valore per l’ipotenusa e la calcolatrice ci restituirà tutti i possibili valori dei cateti. Questa funzione è particolarmente utile a chi prepara gli esercizi per gli studenti, infatti con un semplice click si possono creare le cosiddette “Terne Pitagoriche”.

Prima di scrivere l’applicazione per Android, ho provato l’algoritmo sul PC, usando il solito FreeBasic. Ecco la schermata relativa ai risultati avendo dato in ingresso un valore di ipotenusa pari a 17.00 :

terne_ss

cliccare l’immagine per ingrandire

La precisione dei numeri è compresa nella regione delle due cifre decimali ; questo vuol dire che sia l’ipotenusa, sia i cateti sono numeri “precisi”, cioè sono terne esatte con al massimo due cifre decimali. Naturalmente, anche se nella schermata si vede A= 2.60 e B= 16.80, vale anche la soluzione A= 16.80 e B= 2.60 ; le simmetrie non vengono stampate dal programma per non dare un’inutile ripetizione.

Chi volesse provare il programma sul proprio PC, potrà scaricare l’eseguibile zippato a questo link ; per decomprimerlo occorre fornire la password che è: eficara . Per verificare che il file scaricato sia l’originale e non sia stato manipolato da biechi individui, potete controllare l’hash MD5 che deve essere: B09D351E99FB13C4E45993F0D56A12C9 .

Nota: ho inserito questa funzione anche nella mia calcolatrice Android (gratuita).

SeaMonkey Browser – modify the UserAgent string

ATTENTION, please ! Playing with browser’s preferences may DAMAGE or ERASE your browser’s and email accounts and data ! So, it’s MANDATORY to create a backup of the user’s profile before starting the activity !

I need for a sort of “filter” to make “private” some PHP scripts on my website. I just want that such scripts will work only when accessed by my PC’s browser. My public IP changes very often (it’s dynamic) so can’t be used as a proof of a request coming from my PC. An easy way can be to add a personalized message to the usual UserAgent string of my browser. I use “SeaMonkey” ‘cause is very fast and “light” and also integrates the email client ; looking at the configuration options I didn’t found how to modify the UserAgent string, but googling for an answer I found that there is a preference that can be set to override the default one. The problem is that I don’t want just to override the “normal” UserAgent, but I just want to “append” my own string. So I created a very small PHP script just to know what’s my actual UserAgent. I called this script “UAget.php” ; it’s very simple, look at the picture below (note that clicking on the pictures loads 1:1 scale view)

The PHP script UAget.php

The PHP script UAget.php

I saved that script to an executable folder of my website (that can handle PHP scripts, obviously). Now, starting SeaMonkey and giving the URL of my script I had this result :

UAmod-pic1That’s my actual UserAgent. Well, I copied the whole string to the clipboard (ctrl-C) for future use.

UAmod-pic2At this point, I can try to add my personalized string to the UserAgent. For adding a new preference to the SeaMonkey’s configuration, you have to type “about:config” in the URL bar. You will receive an alert like this:

UAmod-pic3Don’t care about this, just click the button “I’ll be careful, etc” and go on…

UAmod-pic4Now you can see a list of option keys. Just click in empty space the right mouse key and on the descending menu choose: New, then: string and click for confirmation. You will be asked about the name of new preference:

UAmod-pic5The name will be: “general.useragent.override”, so write it down and click OK. Now a new box opens, requesting the string related to the new preference:

UAmod-pic6At this point, we paste (ctrl-V) the contents of the clipboard, that’s the original UserAgent string, and then append our personal string, in this example: ” Pippo/9.1.2015″, clicking OK to confirm. Look, our new “key” is part of the preferences list.

UAmod-pic7Ok, now we close the browser, then open it again and again we write the URL that points to our “UAget.php” script and this is the result:

UAmod-pic8Well done… our browser’s UserAgent, now, has an additional field: ” Pippo/9.1.2015″. This can be used in our PHP scripts to determine if the script itself will answer to requests or not, by means of parameter $_SERVER[‘HTTP_USER_AGENT’] used as filter. If the parameter contains our personalized string, then the script has been accessed by our browser (or by any other device that has ” Pippo/9.1.2015″ as part of the UserAgent).

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

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.