Pagina PHP Sempre in ascolto su Seriale

di il
12 risposte

Pagina PHP Sempre in ascolto su Seriale

Ciao a tutti, ho bisogno che quando viene scritto un messaggio su una seriale dove un server php è in ascolto, questo venga letto e mandato su un server mySql, da una parte abbiamo quindi un Arduino che in certe occasioni, scrive su una seriale; dall'altra quindi un server php "nascosto" sempre in ascolto, che ricevuto il messaggio crea una query e la manda ad un db mysql. Ho pensato a un Thread in loop! C'è un modo di lanciare il codice php senza che un client ne faccia richiesta? Vi ringrazio!
P.S. Devo restare in un server apache, non posso utilizzare ne c/c++ o python etc..

12 Risposte

  • Re: Pagina PHP Sempre in ascolto su Seriale

    Non mi è proprio chiarissimo come uno script PHP possa leggere da una seriale.
    Guarda comunque qui
    http://stackoverflow.com/questions/13114275/php-serial-port-data-return-from-arduino
  • Re: Pagina PHP Sempre in ascolto su Seriale

    Ciao +m+ , ti ringrazio per la risposta!!
    Per accedere dalla seriale utilizzo la classe php_serial, che funziona molto bene solamente per SO linux.

    Nel link che hai messo chiede solamente come leggere da seriale..

    La mia domanda è, c'è un modo di creare in php un "thread" infinito, senza che un client debba richiedere quella pagina? Grazie!
  • Re: Pagina PHP Sempre in ascolto su Seriale

    Puoi lanciare il tuo script da una console. Se cerchi trovi diversi esempi su internet http://stackoverflow.com/questions/2036654/run-php-script-as-daemon-process
  • Re: Pagina PHP Sempre in ascolto su Seriale

    E' un sistema un pochino brutale.
    Nulla ti vieta di usare... crontab... per avviare lo script.
    Nel quale puoi fare un loop infinito, con eventuale delay, se vuoi simulare un busy-waiting (cioè una schifezza).

    A memoria c'è una libreria apposita che converte i dati da seriale a TCP, usata spesso proprio per Arduino. Penso che potresti trovare tanta bella "roba" con qualche google-ricerca.
  • Re: Pagina PHP Sempre in ascolto su Seriale

    Grazie a tutti! Sono riuscito tramite lo script php mandato da console (che simula una sorta di "ciclo di polling").
    Ora ho un altro problema.. Come faccio a condividere un area di memoria Ram tra due diversi processi php? Uno quando il client fa richiesta della pagina, e l'altro é lo script di "polling". Grazie!
  • Re: Pagina PHP Sempre in ascolto su Seriale

    Come faccio a condividere un area di memoria Ram tra due diversi processi php?
    Quale tipo di dati devi condividere? I dati letti dall'Arduino?
    Se i dati letti da Arduino non dipendono da richieste provenienti da web e sono semplici "aggiornamenti" che la schedina ti da potresti semplicemente utilizzare un record del db mysql; mi sembra fosse proprio quello che volevi fare
    dall'altra quindi un server php "nascosto" sempre in ascolto, che ricevuto il messaggio crea una query e la manda ad un db mysql
  • Re: Pagina PHP Sempre in ascolto su Seriale

    Si é proprio quello che ho fatto! Solo che per avere piú efficenza volevo condividere questi valori letti da Arduino direttamente tramite memoria .. Senza farli passare da il db mySql, che li memorizza nell hd e questo da una maggiore latenza.
    Qualche idea?
    Grazie!!
  • Re: Pagina PHP Sempre in ascolto su Seriale

    Farli passare per db é la cosa più sana che puoi fare. Ma l'Arduino spedisce i dati autonomamente o in seguito a richieste che arrivano da web? Che tipo di dati vengono trasferiti ?
  • Re: Pagina PHP Sempre in ascolto su Seriale

    Ho bisogno che ogni volta che su Arduino si verifica un evento, questo venga salvato da qualche parte, per esempio su mySql. Quindi ho creato una specie di "ciclio di polling" , ovvero uno script in php che ogni tot secondi interroga Arduino che gli restituisce dei valori (luminosità,temperatura, tag rfid etc.), che alcuni vengono aggiornati su una tabella con una sola riga, altri, che sono eventi propri di Arduino, vengono inseriti in un altra tabella. Questi dati vengono poi ripresi quando un client ne fa richiesta, attraverso il mySql.
    Io vorrei lasciare mySql per gli eventi propri di Arduino, che ho bisogno di salvarli, mentre per quelli temporanei, salvarli in memoria ram sarebbe la soluzione ottimale!
  • Re: Pagina PHP Sempre in ascolto su Seriale

    Guarda qui ma secondo me ti complichi solo la vita; i dati temporanei (che non vuoi salvare) li puoi tenere aggiornati in un record unico di una tabella specifica (nel senso che per quei dati non fai una INSERT ma semplicemente una UPDATE).
  • Re: Pagina PHP Sempre in ascolto su Seriale

    Infatti l'Update é quello che sto facendo.. Stavo guardando la libreria Shmop.. Il link che mi hai condiviso sembra meglio. Guardo tutte e due e vi faccio sapere. GRAZIE MILLE!!
  • Re: Pagina PHP Sempre in ascolto su Seriale

    Ciao ragazzi. Ho guardato la libreria Shmop, che fa proprio al caso mio.. Ora ho un altro problema.
    Ho realizzato due semplici codici: il primo scrive in loop su una specifica area di memoria, il secondo legge una sola volta il valore.

    Ora, se gli eseguo da terminale con il comando php e privilegi di root, tutto funziona.
    Mentre se il primo sempre da terminale e il secondo da webServer apache, installato da Lampp insomma, mi da degli errori..

    al momento dell'apertura dell'area di memoria
    Warning: shmop_open(): unable to attach or create shared memory segment in /opt/lampp/htdocs/prova.php on line 18
    al momento della lettura
    Warning: shmop_read(): no shared memory segment with an id of [0] in /opt/lampp/htdocs/prova.php on line 63
    questo è il codice..
    $systemid = 864; // System ID for the shared memory segment
    $mode = "c"; // Access mode
    $permissions = 777; // Permissions for the shared memory segment
    $size = 1024; // Size, in bytes, of the segment
    
    $shmid = shmop_open($systemid, $mode, $permissions, $size);
    $read= shmop_read($shmid, 0, 90);
    Ho provato anche a cambiare i permessi..
    Sono comunque gli stessi errori che mi dava il terminale, se avviavo senza fare "sudo".. Come faccio a "mandare" questo codice php da apache come root? Grazie!!
Devi accedere o registrarti per scrivere nel forum
12 risposte