Subscribe to Updates

    Get the latest creative news from FooBar about art, design and business.

    What's Hot

    Come impostare un IP statico per Raspberry PI

    Novembre 10, 2023

    Le migliori rendite passive tecnologiche per guadagna soldi

    Novembre 4, 2023

    Guida all’Acquisto: I Migliori Router WiFi del 2023

    Settembre 13, 2023
    Facebook X (Twitter) Instagram
    Facebook X (Twitter) Instagram
    iSmanettoneiSmanettone
    Subscribe
    • Home
    • News
    • Programmazione
    • iPhone
    • Wifi e sicurezza
    • Backtrack
    • Arduino
    • Android
    • Apple
    • Raspberry
    • Altro
    iSmanettoneiSmanettone
    Home»Arduino»Lezione 17: Come far interagire Arduino con KeyPad e DB MySQL
    Arduino

    Lezione 17: Come far interagire Arduino con KeyPad e DB MySQL

    ismanettoneblogBy ismanettoneblogSettembre 16, 20152 commenti4 Mins Read
    Facebook Twitter Pinterest LinkedIn Tumblr Email
    Share
    Facebook Twitter LinkedIn Pinterest Email

    In questa nuova lezione su Arduino vedremo come poter utilizzare il KeyPad per inserire un codice, che verrà verificato attraverso una connessione ad un DB MySQL.

    F0HFBBFHFWSTA72.LARGE

    Abbiamo già visto nella lezione 8, come utilizzare il KeyPad (sia quello 4×3 che 4×4) con Arduino, per leggere e verificare un codice che viene immesso attraverso tale dispositivo. Tuttavia non si è sfruttato le potenzialità che Internet mette a disposizione; infatti il codice di verifica era immesso direttamente nel codice di Arduino e per tanto qualsiasi modifica al codice, richieda un intervento diretto al micro-controllore. Con questo piccolo progetto, sarà possibile caricare tutti i codici a 6 cifre che si vogliono nel nostro DB MySQL e Arduino verificherà se il codice inserito è corretto. Semplice no ?

    Progetto KeyPad + MySQL

    KeyPad_MySQL

    Requisiti Hardware

    • Arduino Uno/Arduino Mega
    • Ethernet Shield
    • KeyPad 4×4
    • Un PC/Raspberry/DB

    Requisiti Software

    • MySQL Workbench
    • Libreria MySQL-Arduino
    • Libreria KeyPad

     

    Il meccanismo di funzionamento è il seguente; l’utente inserisce il codice alfanumerico attraverso il KeyPad. Una volta che ha completato di inserire le 6 cifre, preme il tasto * e rimane in attesa della verifica. Una volta completa tale operazioni, Arduino comunicherà attraverso il seriale se il codice inserito è corretto oppure no e accenderà il LED 13. Il codice può anche essere di lunghezza superiore, ma deve essere modificato nel codice sorgente.

    Prima di tutto è necessario crearsi una Schema all’interno del DB MySQL. Nel mio caso l’ho chiamato Auth. 

    C’è solamente una table di nome Codes, che ha come attributi un solo elemento che è Code, un elemento di tipo varchar(10), che è chiave primaria e deve non deve essere nulla.

    Per fare queste operazioni si può usare tranquillamente il MySQL Workbench, che è un programma davvero semplice da usare.

    Per maggiori informazioni riguardo a MySQL, vi consiglio di leggere questo articolo.

    Ed ecco il codice del programma per Arduino Uno/Arduino Mega che permette di verificare la correttezza di un codice inserito con KeyPad, relativamente a quelli presenti nel DB MySQL:

    /*
    Questo programma permette di collegarsi ad un DB MySQL per verificare se il codice inserito è corretto
    Autore Giacomo Bellazzi
    Versione 1.0
    */
    #include "SPI.h"
    #include "Ethernet.h"
    #include "sha1.h"
    #include "mysql.h"
    #include "Keypad.h"
    #define LED 13
    const byte ROWS = 4; //quattro righe
    const byte COLS = 4; //quattro colonne
    char keyInsert[7];
    char Keys[ROWS][COLS]= //creo la matrice dei tasti della tastiera.
    {
    {'1','2','3','A'} ,
    {'4','5','6','B'},
    {'7','8','9','C'},
    {'*','0','#','D'}
    };
    byte colPins[4] = {5,4,3,2}; // Pin a cui sono connesse le colonne
    byte rowPins[4] = {9,8,7,6}; // Pin a cui sono connesse le righe
    int i = 0;
    int j = 0;
    Keypad keypad = Keypad( makeKeymap(Keys), rowPins, colPins, ROWS, COLS);
     
    byte mac_addr[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
    IPAddress server_addr(10, 0, 0, 16);
    Connector my_conn;
    char user[] = "username";
    char password[] = "password";
    char QUERY_POP[50] = "Select * From Auth.Codes as AK Where AK.Code='%s'";
    char query[60];
    
    void setup() {
     Ethernet.begin(mac_addr);
     Serial.begin(9600);
     pinMode(13,OUTPUT);
     while (!Serial);
     delay(1000);
     Serial.println("Connecting...");
     if (my_conn.mysql_connect(server_addr, 3306, user, password)){
    Serial.println("Connected!");
     } else {
     Serial.println("Connection failed.");
     }
    }
    void loop() {
       char key = keypad.getKey();
      if (i==0){
        Serial.println("Insert code to verify...");
        i++;
      }
      if (key != NO_KEY && j<6){
        Serial.print("*");
        //Serial.println(key);
        keyInsert[j]=key;
        j++;
      }
       if(key == '*') {
          Serial.println();
          Serial.println("Verifyng the code...");
         if(isAuthorized(keyInsert)){
            Serial.println("The code is correct"); 
            digitalWrite(LED,HIGH); 
          //TODO possibili ulteriori implementazioni
          }else{
            Serial.println("The code is incorrect, please retry");
            delay(2000);
            
           
           }
            i=0;
            j=0;
            delay(2000);
            digitalWrite(LED,LOW); 
          }  
         
        if(key == '#'){
          //può essere utile
        }    
     }
    
    // Controlla se un codice è autorizzato
    boolean isAuthorized(char code[]){
     
    sprintf(query, QUERY_POP,code);
    
    my_conn.cmd_query(query);
    my_conn.get_columns();
    row_values *row = NULL;
     int number = 0;
     while (row = my_conn.get_next_row()) {
    number++;
     my_conn.free_row_buffer();
     
     }
     
     my_conn.free_columns_buffer();
     if(number==0){
       return false;
     }else{
      return true; 
     }
    }

     

    La verifica della correttezza del codice inserita viene fatta dalla funzione isAuthorized(char code[]); tale funzione verifica se il numero di righe che ritornano dalla query al DB è maggiore di 0. La query è:

    Select *
    From Codes
    Where Code = 'A47DCB'
    
    

    Per poter mandare il esecuzione il programma, è necessario inserire username a password del vostro DB MySQL. Poi è necessario inserire i codici che sono validi. Per farlo si può usare questa query:

     

    INSERT  INTO Codes(Code) VALUES ('A47DCD')
    
    
    

    Ecco l’output del risultato sulla console di Arduino:

    Schermata 2015-09-16 alle 15.09.46

    Il programma funziona bene su Arduino Mega, mentre su Arduino Uno ci possono essere dei problemi legati alla memoria, in quanto le librerie usate e le variabili sono pesanti.

    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
    ismanettoneblog

    Related Posts

    Come utilizzare il modulo ESP8266 per comodare Arduino da Smartphone

    Marzo 15, 2017

    Progetto rilevatore apertura garage con Arduino

    Gennaio 2, 2017

    C.H.I.P il nuovo PC low cost targato Linux da 9$

    Gennaio 1, 2017
    View 2 Comments

    2 commenti

    1. ibnu on Settembre 26, 2015 8:30 pm

      hey jackbell16 ,thanks for share the code
      but i got a problem with error: ‘class Connector’ has no member named ‘get_columns’
      i dont know why the error come, i;m using arduino 1.6.5 and mysql librarry version 1.0.4-ga

      • ismanettoneblog on Settembre 27, 2015 1:58 pm

        Did you try to run the code with Arduino 1.0.6 ? Bye the way, is the library MySQL installed correctly in the Arduino libraries ?

    Donazione PayPal
    Instructables
    Instructables
    Alla Scoperta di Backtrack
    Alla scoperta di Backtrack
    Raspberry PI
    Kali Linux
    Arduino
    Kali Linux
    Github Repo
    Instructables
    Chi sono e come contattarmi
    Instructables
    Email
    Blogroll
    • Blog di AlterVista
    • Come iniziare
    • Forum di Supporto
    • Guide WordPress
    Meta
    • Accedi
    • Feed dei contenuti
    • Feed dei commenti
    • WordPress.org
    Editors Picks
    8.5

    Apple Planning Big Mac Redesign and Half-Sized Old Mac

    Gennaio 5, 2021

    Autonomous Driving Startup Attracts Chinese Investor

    Gennaio 5, 2021

    Onboard Cameras Allow Disabled Quadcopters to Fly

    Gennaio 5, 2021
    Top Reviews
    9.1

    Review: T-Mobile Winning 5G Race Around the World

    By ismanettoneblog
    8.9

    Samsung Galaxy S21 Ultra Review: the New King of Android Phones

    By ismanettoneblog
    8.9

    Xiaomi Mi 10: New Variant with Snapdragon 870 Review

    By ismanettoneblog
    Advertisement
    Demo
    iSmanettone
    Facebook X (Twitter) Instagram Pinterest Vimeo YouTube
    • Home
    • News
    • Arduino
    • Raspberry
    © 2025 ThemeSphere. Designed by ThemeSphere.

    Type above and press Enter to search. Press Esc to cancel.

    Ad Blocker rilavato
    Ad Blocker rilavato
    Il nostro sito web è reso possibile dalla visualizzazione di pubblicità online ai nostri visitatori. Ti preghiamo di supportarci disabilitando il tuo Ad Blocker