How to use Relay on Ltouch43

In our Ltouch43 Android HMI  there are 4 Relays and all the relays are in exchange contact. They have 24Vdc coil and max 5A contact current. All RELAY outputs are high quality relay and protected by varistors, all connectors are removable.

BMTouchGP12 – Relay R2

BMTouchGP13 – Relay R4

BMTouchGP14 – Relay R1

BMTouchGP15 – Relay R3

Before using them we must in the onCreate method :

instantiate the library BMtouch::

  • tmp = BMTouch.LIBsetup(BMTouch.EN12 + BMTouch.EN13 + BMTouch.EN14 + BMTouch.EN15);

Set PIN (GP–) as output, sets the pin (pin) indicated as output and sets its logical level as value::

    • val[0]= 0;
    • BMTouch.GPIOSetupOut(BMTouch.GP12, val[0]);
    • BMTouch.GPIOSetupOut(BMTouch.GP13, val[0]);
    • BMTouch.GPIOSetupOut(BMTouch.GP14, val[0]);
    • BMTouch.GPIOSetupOut(BMTouch.GP15, val[0]);

To switch the output by activating it or not, use this command::

    • tmp=BMTouch.GPIOWrite(BMTouch.GP13, val[0]);

where val [0] corresponds to:

  • 0 relay OFF
  • 1 relay ON

Nuovo pannello touch HMI 4,3 ” Android Ltouch43

Siamo orgogliosi di annunciare che un nuovo prodotto sarà presto rilasciato. E’ un pannello touch Android per progetti HMI di automazione industriale e domotica.

Si caratterizza di un display multi touch resisttivo da 4,3″ con un processore ancora più performante Samsung S5P6818 64-bit Octa-Core  frequenza scalabile 8*Cortex -A53  da 400MHz a 1.4 MHz dotato di uscite a relè e interfaccia di comunicazione RS485. Dispone di una memoria RAM di 2GB 32bit DDR3 ed una memoria interna eMMC da 16GB con uno slot MICROSD per memorie sopra i 128GB.

Pieno supporto a Ethernet come anche a reti wifi WAN 802.11 b/g/n. dotato di antenna interna mod. porcelain ipx interfacee bluetooth 4.0 dual mode.

Il prodotto è disponibile con cornice frontale in acciaio inox finitura a specchio con una cover posteriore sempre in acciaio inox 10/10 finitura 2B.razie a questi layer di protezione e ad un particolare processo di assemblaggio, il prodotto raggiunge un livello di protezione IP54 nella parte frontale (acqua e polvere).

Nuove librerie ancora più veloci e performanti sviluppate dal nostro staff tecnico, scaricabili dalla nostra area download,  per disporre un massimo controllo e comando della periferica RS485 modbus e ingressi / uscite digitali (GPIO), 4 uscite a relè con contatto di scambio 5 A .

AUDIO e VIDEO : Microfono a bordo e jack audio 3.5mm e uscita aggiuntiva in HMI Type-A 1-1.4A

La periferica RS485 è completamente optoisolata con possibilità in modalità MASTER di polarizzare la linea tramite un

semplice dip-switch posto sul retro e attivare la resistenza di terminazione linea di 120 ohm.

Alimentazione a 24 Vdc con riconoscimento intelligente della tensione di linea, se al di sopra o di sotto del 20% il nostro Ltouch4_3 si spegne.

Display capacitivo 4,3 ” con risoluzione 480 X 800 dimensioni 55 x 93 mm

Sarà presto disponibile nel nostro wiki tutto il supporto tecnico per la realizzazione dei Vostri progetti domotici ed industriali.

Come configurare l’Android Vnc Server sui nuovi panneli Ltouch

In questo breve tutorial vedremo come collegarci ai ai nostri dispositivi android tramite Android Vnc Server. Tutta la serie di panneli come il Ltouch43 – Ltouch7″ – Ltouch10 “ può supportare questa funzione

Occorrerà l’eseguibile androidvncserver ed un visualizzatore da installare sul pc (ad esempio tightvnc);
androidvncserver richiede i permessi di root, occorrerà quindi un dispositivo android “rooted” per non essere vincolati all’uso di adb.
Nei nostri pannelli questo è possibile !

Per non dover lanciare un eseguibile specificandone anche il percorso, questo va copiato in una directory che faccia parte del percorso di ricerca degli eseguibili.
Visualizziamolo aprendo il prompt dei comandi di windows e lanciando:

adb shell echo $PATH

Ad esempio:

/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin

scegliamo per semplicità /system/bin
normalmente la partizione montata su /system è in sola lettura, occorrerà rimontarla in lettura-scrittura:

adb remount

copiamo androidvncserver, che si può scaricare dal nostro sito nell’area download, in un percorso del nostro computer da dove sia possibile lanciare adb e carichiamolo nel dispositivo android:

adb push androidvncserver /system/bin/

accediamo al dispositivo android :

adb shell

impostiamo i permessi

chmod 755 /system/bin/androidvncserver

i parametri supportati si visualizzano con il comando androidvncserver -?
si consiglia di non modificare metodo di cattura lasciando framebuffer (i frame vengono letti da /dev/graphics/fb0), non tutti i metodi di cattura sono supportati da i dispositivi.
l’opzione -r permtte di impostare la rotazione dello schermo in gradi, con valori ammessi: 0 90 180 270
l’opzione -s permette di impostare il fattore di scala, non tutti i fattori di scala sono accettati, sono valori validi: 25 50 100
l’opzione -p permette di impostare una password

occorre prendere nota dell’indirizzo ip in uso ad esempio con il comando netcfg dalla shell adb (la rete wifi è indicata da wlan0 e quella cablata da eth0, ma questi nomi possono cambiare a seconda del
dispositivo android).

androidvncserver -r 90 -s 50 -p abcdef
notiamo la riga:
Listening for VNC connections on TCP port 5901
indica a quale porta connettersi con il visualizzatore, se ad esempio si usa tight vnc come visualizzatore e l’ip annotato era 192.168.2.15 , specificheremo
come remote host: 192.168.2.15:5901

in questo modo il terminale adb non è più disponibile, per terminare androidvncserver si usa la combinazione di tasti ctrl+c
per mantenerlo in eseuzione in background basta aggiungere & a fine riga di comando: androidvncserver -r 90 -s 50 -p abcdef &
per terminarne l’esecuzione usare i comandi:
ps | grep androidvncserver
annotarne il pid e terminarne l’esecuzione con
kill seguito dal pid appena annotato

con un dispositivo rooted è possibile installare busybox e creare uno script per lanciare androidvncserver direttamente dal desktop di android.
un semplice script (se androidvncserver è stato copiato in /system/bin/):

#!/system/bin/sh
/system/bin/androidvncserver -r 90 -s 50 -p abcdef

Tutto qua. Se avete trovato interessante l’articolo, condividetelo! 🙂 Come al solito, i commendi sono sempre ben accetti.

Salviamo dei dati nella memoria interna Android (variabili ritentive)

Capita alle volte di voler salvare dei dati così da non perdere il loro valore in un secondo momento.
Android dispone di un comando molto semplice per scrivere dei valori in formato testo nella memoria interna del dispositivo, in questo caso all’interno dei nostri pannelli Ltouch e pLtouch e successivamente recuperarli.

Premetto che questa procedura rende i dati che andiamo a salvare privati, ciò vuol dire che solamente la nostra app potrà accedervi e nessun’altra e nel momento in cui la disinstalleremo tutti i dati verranno persi.

Troverete molto utile questo Tutorial

Android dispone delle classi openFileInput e openFileOutput per scambiare dei pacchetti alla memoria interna.

  •  openFileOutput : è il metodo per creare e salvare un file
FileOutputStream fOut = openFileOutput("file name",Context.MODE_PRIVATE);

Il metodo restituisce un’istanza FileOutputStream, così è possibile richiamarla e scrivere i dati sul file:

String str = "test data";
fOut.write(str.getBytes());
fOut.close();
  • openFileInput () : Questo metodo viene utilizzato per aprire un file e leggerlo. Tale restituisce un’istanza di FileInputStream.
FileInputStream fin = openFileInput(file)

Dopodichè chiamamiamo quest’isanza per leggere un carattere alla volta e rappresentarlo:

int c;
String temp="";
while( (c = fin.read()) != -1){
temp = temp + Character.toString((char)c);
}
fin.close();

Vediamo ora un esempio pratico:

Supponiamo che si voglia salvare un dato e renderlo nel gergo tecnico dei plc ” ritentivo “, in poche parole che al riavvio della nostra app il dato non si perda, ma che si possa recuperarlo.
Salviamo il dato alla pressione di un bottone:

@Override
	public void onClick(View v) {
             if (v.getId()==R.id.btnWrite){
                 // add-write text into file
        try {
            FileOutputStream fileout=openFileOutput("BieMmeItalia.txt", MODE_PRIVATE);
            OutputStreamWriter outputWriter=new OutputStreamWriter(fileout);
            outputWriter.write("250");
            outputWriter.close();

            //display file saved message
            Toast.makeText(getBaseContext(), "File saved successfully!",
                    Toast.LENGTH_SHORT).show();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

All’avvio dell’app andiamo a leggere il valore nel file di testo allocato nella memoria del dispostivo e poi lo rappresentiamo a video tramite una texView:

	@Override
    protected void onCreate(Bundle savedInstanceState) {
			    requestWindowFeature(Window.FEATURE_NO_TITLE);
			super.onCreate(savedInstanceState);
			setContentView(R.layout.activity_main);

			TextView valreadtoMemory = (TextView)findViewById(R.id.editText1);
		try {
	            FileInputStream fileIn=openFileInput("BieMmeItalia.txt");
	            InputStreamReader InputRead= new InputStreamReader(fileIn);

	            char[] inputBuffer= new char[READ_BLOCK_SIZE];
	            String s1="";
	            int charRead;

	            while ((charRead=InputRead.read(inputBuffer))>0) {
	                // char to string conversion
	                String readstring=String.copyValueOf(inputBuffer,0,charRead);
	                s1 +=readstring;
	           }
	            InputRead.close();
	            valreadtoMemory.setText(s1);

	        } catch (Exception e) {
	            e.printStackTrace();
	        }

    }

Per maggior informazioni troverete del materiale anche nel nostro WiKi

Test di performance canale rs485

In ogni progetto di domotica con Arduino ed Android, particolare attenzione deve essere data alla gestione degli errori nei canali di comunicazione quali per esempio rs485. Questi infatti possono accadere per diversi motivi ed il sistema deve riuscire a gestirli con successo.

In particolare, nel video che segue, volevo dimostrarvi alcuni test che ho effettuato per capire se le informazioni visualizzate nel pannello multi touch vengono correttamente aggiornate non appena la connessione viene ristabilita.

Il led rosso indica che l’Arduino sta processando richieste modbus dal master. Come potete vedere, il lampeggio si ferma quando il canale rs485 viene interrotto. Non appena quest’ultimo viene ristabilito, la segnalazione led riparte. Inoltre, date un occhio alle icone delle lampadine nel monitor: quando il bus viene ripristinato, le icone rifletteranno correttamente il loro nuovo stato.

La descrizione del progetto ed il sorgente sono scaricabili. Take a look!

Come al solito, i commenti sono ben accetti! 🙂

Nuovo Arm Cortex A8 touch screen

Arm Cortex powered logoVoglio condividere con voi un video di preview del nuovo touch screen 7″ Android su cui sto lavorando recentemente. Paragonandolo al MCU ARM usato in uno dei miei progetti precedenti, questo Single Board Computer (SBC) è dotato di un ARM Cortex A8 a 1Ghz, molto più potente e performante.
Viene utilizzato solitamente in sistemi industriali e domotici.

Supporta, oltre ad Android (anche la versione 4), Ubuntu e Win CE 6. E’ dotato di 512MB SDRAM DDR2, 4GB di iNand flash memory, Ethernet, porte seriali (3x Rs232, rs485, uart, i2c, spi), 4x USB Hosts, HDMI e TV OUT, 2x SD, G-sensor, interfacce GPS and GPRS e molte altre.

Dai un’occhiata alla lista completa delle specifiche tecniche. Prossimamente, troverete nel wiki gli ultimi progetti di domotica ed automazione industriale su cui sto lavorando. Se ritieni che questo prodotto sia interessante e che può rappresentare una valida soluzione ai tuoi bisogni, visita il nostro Store.

Come al solito, i commenti sono sempre ben accetti!

Android app e Modbus RTU

Abbiamo realizzato una piccola e semplice applicazione per i nostri pannelli LtouchF così da permettere agli utenti di configurare e successivamente comunicare con tutti i dispositivi modbus RTU.

BieMmeConfig, verrà installata di serie su tutti i nostri LtouchF, così renderà più semplice la configurazione dei dispositivi Modbus RTU.

In alcuni semplici passi possiamo scrivere e leggere utilizzando le funzioni 03 e 16 Modbus RTU.

Prepariamo la comunicazione; colleghiamo tramite un cavo a tre fili il dispositivo modbus ed il Ltouch.

La porta RS485 Modbus del Ltouch è posizionata nel lato su un connettore DB9 ed il bus è nel dettaglio nei pin:

  • 2 – A
  • 3 – B
  • 5 – GND

Impostiamo la velocità di comunicazioni (grazie alla nostra Libreria la app supporta la velocità fino a 115200) ed il tempo di timeout.

La funzione 03:
Node Id: corrisponde all’indirizzo dello slave in cui vado a leggere.

Start Register : corrisponde al primo registro per la lettura modbus

Number Registers: Corrisponde a quanti registri consecutivi voglio leggere

Una volta configurato questi tre campi possiamo, tramite i tre bottoni, eseguire la richiesta di lettura.

Singola lettura: Ltouch eseguirà una sola lettura e rappresenterà a video i valori letti.

Lettura a ciclo continuo: Ltouch eseguirà delle letture ad intervallo di un secondo in modalità ciclica. I valori letti verranno rappresentati a video.

La funzione 16:

Grazie a questa funzione possiamo scrivere dei valori interi; anche qui dobbiamo configurare alcuni campi come:

Node ID: Corrisponde all’indirizzo dello slave in cui vado a scrivere

Start Register: Rappresenta il primo registro in cui vado a scrivere

Number Registers: Rappresenta il numero di registri consecutivi nel quale scriverò il valore.

Value: Rappresenta il valore che scriverò.

Per chiudere l’applicazione basta premere sopra il logo BieMme

Comunicazione Android Arduino via RS485 e Modbus

In questo post vi parlo di uno dei progetti a cui sto lavorando in questo periodo. Consiste nell’utilizzare un pannello multi touch Android che comunica attraverso rs485 e modbus con uno (o più) Arduino board. In particolare, l’ambito principale del progetto riguarda la domotica (accensione/spegnimento/status luci, regolazione temperatura, ecc) sebbene molte delle tecniche e concetti che vedremo possono essere applicati con successo in altri campi.


La cosa carina del touch screen che ho utilizzato è l’ampia disponibilità di porte, ampia connettività in generale: Ethernet, USB, rs232, RS485 ed anche I²C. Sebbene disponga di porte molto veloci, ho espressamente scelto di utilzzare RS485 perchè i device Arduino (Uno per esempio) per supportare per esempio l’interfaccia Ethernet hanno bisogno di elettronica aggiuntiva che fa lievitare ulteriormente il prezzo (anche se dal punto di vista della fattibilità esistono diversi progetti in rete).
RS485 è uno standard molto conosciuto nell’ambito dell’automazione industriale e nella domotica. E’ half-duplex, utilizza due fili, tollera molto bene i disturbi, si riescono a raggiungere buone velocità e connettere device remoti fino anche a 1200 metri.

Inoltre, utilizzando il protocollo serial modbus, anche questo sviluppato principalmente nell’ambito dell’automazione industriale, è open, semplice e robusto da sviluppare e manutenere. Ho scelto di utilizzare la variante del modbus denominata RTU, sebbene ne esistano di altre. Continue reading

Come usare il Bundle Android per Scambiare Dati tra Thread

La domanda a cui voglio rispondere con questo post è la seguente: Come usare il bundle Android per scambiare dati tra un tread in esecuzione ed il tread principale che gestisce l’interfaccia (UI)?

Questa situazione è abbastanza comune nei progetti Android e la soluzione è molto semplice ed immediata. Il contesto può essere il seguente:

  1. Una finestra Android (activity) crea un thread in background il quale esegue dei comandi
  2. Quest’ultimo thread, per esempio, ha bisogno di comunicare al thread chiamante (main UI) il risultato della computazione

La situazione può essere gestita usando una combinazione di messaggi Android ed Android bundle.
Continue reading