martedì 3 settembre 2013

Lettore RFID RC522 su Arduino

Il lettore RFID RC522 e' forse il sistema meno costoso per leggere i tag Rfid a 13.56 MHz in quanto il suo costo arriva al minimo anche a 5 dollari su E-Commerce cinesi

L'interfaccia e' a sette cavi
MOSI: Pin 11 / ICSP-4
MISO: Pin 12 / ICSP-1
SCK: Pin 13 / ISCP-3
SS: Pin 10
RST: Pin 9

(possono essere modificati da programma i pin 9 e 10)

oltre ovviamente ai due collegamenti di alimentazione a GND e 3.3V


La mia versione del lettore mostra le scritte solo sul lato superiore e quindi, quando montato sulla breadboard, non si riesce a leggere la pedinatura. Per comodita' metto questa foto del medesimo lettore ma con le scritte sul lato inferiore per facilitare il montaggio


La programmazione della scheda viene effettuata mediante la libreria che si trova a questo indirizzo

Per la lettura di un tag si puo' impiegare l'esempio CardRead compreso nella libreria stessa (attenzione: ogni lettura viene confrontata con l'ultima acquisita e se uguale non mostra niente a schermo se non una fila di puntini)

versione corta
------------------------------------------
#include <SPI.h>
#include <RFID.h>

#define SS_PIN 10
#define RST_PIN 9

RFID rfid(SS_PIN, RST_PIN); 

// Setup variables:
    int serNum0;
    int serNum1;
    int serNum2;
    int serNum3;
    int serNum4;

void setup()

  Serial.begin(9600);
  SPI.begin(); 
  rfid.init();
  
}

void loop()
{
    
    if (rfid.isCard()) {
        if (rfid.readCardSerial()) {
                serNum0 = rfid.serNum[0];
                serNum1 = rfid.serNum[1];
                serNum2 = rfid.serNum[2];
                serNum3 = rfid.serNum[3];
                serNum4 = rfid.serNum[4];
                String Id = String(rfid.serNum[0],HEX)+String(rfid.serNum[1],HEX)+String(rfid.serNum[2],HEX)+String(rfid.serNum[3],HEX)+ String(rfid.serNum[4],HEX);
                Serial.println(Id);
             } 
          }
        
    rfid.halt();
}
-----------------------------------

-----------------------------------
/**
* Read a card using a mfrc522 reader on your SPI interface
* Pin layout should be as follows (on Arduino Uno):
* MOSI: Pin 11 / ICSP-4
* MISO: Pin 12 / ICSP-1
* SCK: Pin 13 / ISCP-3
* SS: Pin 10
* RST: Pin 9
*
* Script is based on the script of Miguel Balboa. 
* New cardnumber is printed when card has changed. Only a dot is printed
* if card is the same.
*
* @version 0.1
* @author Henri de Jong
* @since 06-01-2013
*/

#include <SPI.h>
#include <RFID.h>

#define SS_PIN 10
#define RST_PIN 9

RFID rfid(SS_PIN, RST_PIN); 

// Setup variables:
    int serNum0;
    int serNum1;
    int serNum2;
    int serNum3;
    int serNum4;

void setup()

  Serial.begin(9600);
  SPI.begin(); 
  rfid.init();
  
}

void loop()
{
    
    if (rfid.isCard()) {
        if (rfid.readCardSerial()) {
            if (rfid.serNum[0] != serNum0
                && rfid.serNum[1] != serNum1
                && rfid.serNum[2] != serNum2
                && rfid.serNum[3] != serNum3
                && rfid.serNum[4] != serNum4
            ) {
                /* With a new cardnumber, show it. */
                Serial.println(" ");
                Serial.println("Card found");
                serNum0 = rfid.serNum[0];
                serNum1 = rfid.serNum[1];
                serNum2 = rfid.serNum[2];
                serNum3 = rfid.serNum[3];
                serNum4 = rfid.serNum[4];
               
                //Serial.println(" ");
                Serial.println("Cardnumber:");
                Serial.print("Dec: ");
Serial.print(rfid.serNum[0],DEC);
                Serial.print(", ");
Serial.print(rfid.serNum[1],DEC);
                Serial.print(", ");
Serial.print(rfid.serNum[2],DEC);
                Serial.print(", ");
Serial.print(rfid.serNum[3],DEC);
                Serial.print(", ");
Serial.print(rfid.serNum[4],DEC);
                Serial.println(" ");
                        
                Serial.print("Hex: ");
Serial.print(rfid.serNum[0],HEX);
                Serial.print(", ");
Serial.print(rfid.serNum[1],HEX);
                Serial.print(", ");
Serial.print(rfid.serNum[2],HEX);
                Serial.print(", ");
Serial.print(rfid.serNum[3],HEX);
                Serial.print(", ");
Serial.print(rfid.serNum[4],HEX);
                Serial.println(" ");
             } else {
               /* If we have the same ID, just write a dot. */
               Serial.print(".");
             }
          }
    }
    
    rfid.halt();
}

-----------------------------------

lunedì 2 settembre 2013

Creazione di post automatici su Facebook con RFID(5)

Questo riepilogo non è disponibile. Fai clic qui per visualizzare il post.

Setup Qt5 per Android

Finalmente dopo un po' di tentativi non riusciti con la versione 5.1, ho compilato un programma per Android realizzato mediante le Qt 5.1.1

Attenzione: per la mia esperienza e' decisamente meglio utilizzare le Qt 5.1.1 su Linux piuttosto che in Windows...non so bene il motivo ma in XP il compilatore e' decisamente lento e non trova mai la fine
Attenzione 2 : la compilazione e l'esecuzione ha avuto successo solo un dispositivo reale (Nexus S) in quanto l'emulatore Android non viene agganciato da QtCreator e non viene copiato l'apk (errore Starting remote process. Unable to start 'org.qtproject.t1')
Attenzione 3: questa riga dovrebbe andare al termine ma e' bene metterla in evidenzia. Il solo programma Hello World occupa 30.26 Mb !!!!


Una volta scaricato ed installato il pacchetto Qt 5.1.1 for Android (Linux 32-bit, 461 MB) si deve procedere a configurare l'ambiente QtCreator per indicare dove sono ubicate le directory dell'SDK e dell'NDK di Android. La cosa migliore e' ovviamente avere l'ultima versione aggiornata che nel mio caso e' l'NDK 9. Devono inoltre essere installati Ant e deve essere indicata la directory della Java VM


All'avvio di QtCreator (versione Linux) compare il seguente errore. La libreria libgstreamer-0.10.so e' presente. L'errore non pregiudica la compilazione ed esecuzione dei programmi



Una volta creato un progetto Android di base (il semplice Hello World) si puo' lanciare l'esecuzione usando come target Android for arm
Vengono generati i seguenti messaggi
----------------------------------------------
11:55:58: Running steps for project t1...
11:55:58: Configuration unchanged, skipping qmake step.
11:55:58: Starting: "/usr/bin/make" 
make: Nothing to be done for `first'.
11:55:58: The process "/usr/bin/make" exited normally.
11:55:58: Starting: "/usr/bin/make" INSTALL_ROOT=/home/luca/qt5_dir/t1/android install
cp -f -R /home/luca/qt5_dir/t1/qml/t1 /home/luca/qt5_dir/t1/android/assets/qml/
install -m 755 -p "libt1.so" "/home/luca/qt5_dir/t1/android/libs/armeabi-v7a/libt1.so"
11:55:58: The process "/usr/bin/make" exited normally.
11:55:58: Copy Qt app & libs to Android package ...
11:56:00: Creating package file ...
11:56:00: Package deploy: Running command '/usr/bin/ant clean debug'.
Buildfile: /home/luca/qt5_dir/t1/android/build.xml

-check-env:
 [checkenv] Android SDK Tools Revision 22.0.5
 [checkenv] Installed at /home/luca/android/sdk

-setup:
     [echo] Project Name: T1
  [gettype] Project Type: Application

-pre-clean:

clean:
[getlibpath] Library dependencies:
[getlibpath] No Libraries
   [subant] No sub-builds to iterate on

-set-mode-check:

-set-debug-files:

-check-env:
 [checkenv] Android SDK Tools Revision 22.0.5
 [checkenv] Installed at /home/luca/android/sdk

-setup:
     [echo] Project Name: T1
  [gettype] Project Type: Application

-set-debug-mode:

-debug-obfuscation-check:

-pre-build:

-build-setup:
[getbuildtools] Using latest Build Tools: 18.0.1
     [echo] Resolving Build Target for T1...
[gettarget] Project Target:   Android 2.3.3
[gettarget] API level:        10
[gettarget] WARNING: No minSdkVersion value set. Application will install on all Android versions.
     [echo] ----------
     [echo] Creating output directories if needed...
    [mkdir] Created dir: /home/luca/qt5_dir/t1/android/bin
    [mkdir] Created dir: /home/luca/qt5_dir/t1/android/bin/res
    [mkdir] Created dir: /home/luca/qt5_dir/t1/android/gen
    [mkdir] Created dir: /home/luca/qt5_dir/t1/android/bin/classes
    [mkdir] Created dir: /home/luca/qt5_dir/t1/android/bin/dexedLibs
     [echo] ----------
     [echo] Resolving Dependencies for T1...
[dependency] Ordered libraries:
[dependency] 
[dependency] ------------------
[dependency] API<=15: Adding annotations.jar to the classpath.
     [echo] ----------
     [echo] Building Libraries with 'debug'...
   [subant] No sub-builds to iterate on

-code-gen:
[mergemanifest] Merging AndroidManifest files into one.
[mergemanifest] Manifest merger disabled. Using project manifest only.
     [echo] Handling aidl files...
     [aidl] Found 2 AIDL files.
     [aidl] Compiling 2 AIDL files.
     [echo] ----------
     [echo] Handling RenderScript files...
[renderscript] No RenderScript files to compile.
     [echo] ----------
     [echo] Handling Resources...
     [aapt] Generating resource IDs...
     [echo] ----------
     [echo] Handling BuildConfig class...
[buildconfig] Generating BuildConfig class.

-pre-compile:

-compile:
    [javac] Compiling 6 source files to /home/luca/qt5_dir/t1/android/bin/classes

-post-compile:

-obfuscate:

-dex:
      [dex] input: /home/luca/qt5_dir/t1/android/bin/classes
      [dex] input: /home/luca/android/sdk/tools/support/annotations.jar
      [dex] input: /home/luca/qt5_dir/t1/android/libs/--Managed_by_Qt_Creator--QtAndroid-bundled.jar
      [dex] Pre-Dexing /home/luca/android/sdk/tools/support/annotations.jar -> annotations-d989d2aabb78bbfbe6fcbd2162e157ce.jar
      [dex] Pre-Dexing /home/luca/qt5_dir/t1/android/libs/--Managed_by_Qt_Creator--QtAndroid-bundled.jar -> --Managed_by_Qt_Creator--QtAndroid-bundled-11a7e4dd2e664969be723f2377cf863f.jar
      [dex] Converting compiled files and external libraries into /home/luca/qt5_dir/t1/android/bin/classes.dex...
       [dx] Merged dex A (23 defs/37,5KiB) with dex B (2 defs/1,1KiB). Result is 25 defs/44,8KiB. Took 0,2s
       [dx] Merged dex A (25 defs/44,8KiB) with dex B (27 defs/40,3KiB). Result is 52 defs/101,4KiB. Took 0,1s

-crunch:
   [crunch] Crunching PNG Files in source dir: /home/luca/qt5_dir/t1/android/res
   [crunch] To destination dir: /home/luca/qt5_dir/t1/android/bin/res
   [crunch] Crunched 0 PNG files to update cache

-package-resources:
     [aapt] Creating full resource package...

-package:
[apkbuilder] Current build type is different than previous build: forced apkbuilder run.
[apkbuilder] Creating T1-debug-unaligned.apk and signing it with a debug key...

-post-package:

-do-debug:
 [zipalign] Running zip align on final apk...
     [echo] Debug Package: /home/luca/qt5_dir/t1/android/bin/T1-debug.apk
[propertyfile] Creating new property file: /home/luca/qt5_dir/t1/android/bin/build.prop
[propertyfile] Updating property file: /home/luca/qt5_dir/t1/android/bin/build.prop
[propertyfile] Updating property file: /home/luca/qt5_dir/t1/android/bin/build.prop
[propertyfile] Updating property file: /home/luca/qt5_dir/t1/android/bin/build.prop

-post-build:

debug:

BUILD SUCCESSFUL
Total time: 20 seconds
11:56:21: Package created.
11:56:21: Installing package onto 373342FC9C0400EC.
11:56:21: Package deploy: Running command '/home/luca/android/sdk/platform-tools/adb -s 373342FC9C0400EC uninstall org.qtproject.example.t1'.
Failure

11:56:22: Package deploy: Running command '/home/luca/android/sdk/platform-tools/adb -s 373342FC9C0400EC install /home/luca/qt5_dir/t1/android/bin/T1-debug.apk'.
732 KB/s (9256497 bytes in 12.346s)


pkg: /data/local/tmp/T1-debug.apk
----------------------------------------------

Dopo un bel po' di pazienza il programma parte sul Nexus


Mjpg-streamer su Raspberry/Raspbian

In questo post viene mostrato come usare MJpg-stream per creare uno stream video mediante Webcam e Raspberry. Le stesse informazioni si possono usare anche per un normale portatile con montato Debian

Sul web si trovano molti post che mostrano questa procedura ma spesso non funzionano piu' per vari motivi.
La prima cosa (piu' importante) e' prelevare l'ultima versione di mjpg-stream mediante Subversion da Sourceforge

svn checkout svn://svn.code.sf.net/p/mjpg-streamer/code/ mjpg-streamer-code

in seguito si digita

apt-get install libv4l-dev libjpeg8-dev imagemagick 
per soddisfare le dipendenze della compilazione
Andando nella sottodirectory mjpg-streamer-code si vedra' che esiste una sottodirectory  mjpg-streamer ed un mjpg-streamer-experimental ..io ho preferito quella non sperimentale

si inizia la compilazione con
make USE_LIBV4L2=true clean all

se ci sono problemi nell'includere V4L si lanci il seguente comando e si ripeta il make

cd /usr/include/linux sudo ln -s ../libv4l1-videodev.h videodev.h

siamo alla fine. Si digiti
export LD_LIBRARY_PATH=. 

a questo punto il file README indica di lanciare il programma con la seguente riga
./mjpg_streamer -o "output_http.so -w ./www"

ma io ho trovato piu' semplice lanciare il comando
./start.sh

lo streaming si dovrebbe avviare senza problemi (ovviamente se la webcam e' collegata) e per osservare il flusso dati ci si puo' collegare via web browser all'indirizzo

http://mioip:8080/?action=stream

Ho provato anche VLC per fare streaming via web ma Raspberry ha delle risorse troppo limitate per poter gestire un cosi' pesante carico di lavoro

venerdì 30 agosto 2013

Compilare librerie Python


Tentando di installare un libreria python mediante il classico comando sulla mia Debian Box

python setup.py install

mi vengono generati una serie di errori. La causa e' che di default non viene installato il pacchetto python-dev indispensabile per la compilazione da sorgenti. tutto si risolve con

apt-get install python-dev

Raspberry in emulazione Qemu

Puntando il browser su questo indirizzo http://sourceforge.net/projects/rpiqemuwindows/ e' possibile ottenere un pacchetto gia' confezionato per emulare Raspberry e sistemi operativi collegati in QEmu

Moebius in QEmu
Raspbian in QEmu


Modificando il file run.bat (che e' costituito dalla sola riga sottostante) in partocolare modificando il file .img in hda

qemu-system-arm.exe -M versatilepb -cpu arm1176 -hda 2012-07-15-wheezy-raspbian.img -kernel kernel-qemu -m 192 -append "root=/dev/sda2"

si possono provare altre distribuzioni senza dover formattare SD Card.
La velocita' non e' assolutamente niente di particolare. Curiosamente la distro PiBang non riesce a partire a causa di un errore nella D-Bus connection

Creazione di post automatici su Facebook (4)

Questo riepilogo non è disponibile. Fai clic qui per visualizzare il post.

Feature Matching OpenCv

Il problema e' il seguente: trovare le differenze tra le due foto. Le due immagini sono state riprese a distanza di oltre un anno ed il ...