Differenze tra le versioni di "Accesso alle Porte Seriali"

Da Gambas-it.org - Wikipedia.
 
(7 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Possiamo accedere alle ''Porte Seriali'' aprendo e leggendo direttamentre i dati provenienti dai relativi file-device.
+
Possiamo accedere alle ''Porte Seriali'' <SUP>&#091;[[#Note|nota 1]]&#093;</sup> aprendo e leggendo direttamentre i dati provenienti dai relativi file-device.
  
 
+
Poniamo l'esempio di avere una penna USB per la connessione ad Internet, e che alla sua connessione il sistema operativo abbia generato due relativi file-device: "''/dev/ttyUSB0'' " e "''/dev/ttyUSB1'' "  <SUP>&#091;[[#Note|nota 2]]&#093;</sup>.
Poniamo l'esempio di avere una penna USB per la connessione ad Internet, e che alla sua connessione il sistema operativo abbia generato due relativi file-device: ''/dev/ttyUSB0'' e ''/dev/ttyUSB1''. Possiamo leggere i dati provenienti dalla porta mediante due modalità:
+
<BR>Possiamo leggere i dati provenienti dalla porta mediante due modalità:
* direttamente dal relativo file-device, ad esempio, ''/dev/ttyUSB1'';
+
* direttamente dal relativo file-device, ad esempio, "''/dev/ttyUSB1'' ";
 
* mediante l'apposita classe "''SerialPort''".
 
* mediante l'apposita classe "''SerialPort''".
 
 
  
 
==Mediante lettura diretta dal corrispondente file-device==
 
==Mediante lettura diretta dal corrispondente file-device==
Per il seguente esempio è necessario attivare anche il componente ''gb.desktop'', ed aver installato il programma ''x-term'':  
+
Per il seguente esempio è necessario attivare anche il componente "gb.desktop", ed aver installato il programma "x-term":  
  '''Private''' fl As File
+
  Private fl As File
 
   
 
   
 
   
 
   
  '''Public''' Sub Button1_Click()
+
  Public Sub Button1_Click()
 
   
 
   
 
  <FONT color=gray>' ''Se il file non possiede i più ampi permessi...''</font>
 
  <FONT color=gray>' ''Se il file non possiede i più ampi permessi...''</font>
    If Stat("/dev/ttyUSB1").Auth <> "rwsrwxrwx" Then
+
  If Stat("/dev/ttyUSB1").Auth <> "rwsrwxrwx" Then
 
  <FONT color=gray>' ''...allora modificheremo in quel senso i permessi del file:''</font>
 
  <FONT color=gray>' ''...allora modificheremo in quel senso i permessi del file:''</font>
      Desktop.RunAsRoot("chmod 4777 /dev/ttyUSB1")
+
    Desktop.RunAsRoot("chmod 4777 /dev/ttyUSB1")
 
  <FONT color=gray>' ''Restiamo in attesa fino a che i permessi non vengono modificati, come desiderato:''</font>
 
  <FONT color=gray>' ''Restiamo in attesa fino a che i permessi non vengono modificati, come desiderato:''</font>
       Do
+
    Repeat
        Wait 0.01
+
       Wait 0.01
      Loop Until Stat("/dev/ttyUSB1").Auth = "rwsrwxrwx"
+
    Until Stat("/dev/ttyUSB1").Auth = "rwsrwxrwx"
    Endif
+
  Endif
 
   
 
   
  <FONT color=gray>' ''In alternativa all'algoritmo precedente,''
+
  <FONT color=gray>' ''In alternativa all'algoritmo precedente, si potrà utilizzare il seguente codice per impostare il setUID e consentire l'apertura del file protetto:''
' ''si potrà utilizzare il seguente codice per impostare il setUID''
+
  '''Exec ["gksu", "chmod 4777", "/dev/ttyUSB1"] Wait'''</font>
' ''e consentire l'apertura del file protetto:''
 
    '''Exec ["gksu", "chmod 4777", "/dev/ttyUSB1"] Wait'''</font>
 
 
   
 
   
 
  <FONT color=gray>' ''...o ancor più facilmente:''
 
  <FONT color=gray>' ''...o ancor più facilmente:''
    '''Shell "echo < ''mia_password'' > | sudo -S chmod 4777 '/dev/ttyUSB1'" Wait'''</font>
+
  '''Shell "echo</font> <FONT color=darkgreen>''MIA_PASSWORD''</font> <FONT color=gray>| sudo -S chmod 4777 '/dev/ttyUSB1'" Wait'''</font>
 
   
 
   
 
  <FONT color=gray>' ''Apriamo il file-device aggiungendo la parola chiave "Watch":''</font>
 
  <FONT color=gray>' ''Apriamo il file-device aggiungendo la parola chiave "Watch":''</font>
    fl = Open "/dev/ttyUSB1" For Read Watch
+
  fl = Open "/dev/ttyUSB1" For Read Watch
 
   
 
   
  '''End'''
+
  End
 
   
 
   
 
   
 
   
  '''Public''' Sub File_Read()
+
  Public Sub File_Read()
 
   
 
   
 
   Dim s As String
 
   Dim s As String
 
   
 
   
    While Not Eof(fl)
+
  While Not Eof(fl)
 
  <FONT color=gray>' ''Leggiamo i dati provenienti dal file-device...:''</font>
 
  <FONT color=gray>' ''Leggiamo i dati provenienti dal file-device...:''</font>
      Line Input #fl, s
+
    Line Input #fl, s
 
  <FONT color=gray>' ''...e li mostriamo in console:''</font>
 
  <FONT color=gray>' ''...e li mostriamo in console:''</font>
      Print s
+
    Print s
    Wend
+
  Wend
 
   
 
   
  '''End'''
+
  End
 
 
  
  
==Lettura mediante la classe ''SerialPort''==
+
==Lettura mediante la Classe ''SerialPort''==
La lettura della ''Porta Seriale'' portà avvenire anche mediante l'uso della Classe ''SerialPort'' attivando il componente <FONT color=#B22222>gb.net</font>.
+
La lettura della ''Porta Seriale'' portà avvenire anche mediante l'uso della Classe "SerialPort" attivando il componente <FONT color=#B22222>gb.net</font>.
  '''Private''' SerialPort1 As SerialPort
+
  Private SerialPort1 As SerialPort
 
   
 
   
 
   
 
   
  '''Public''' Sub Button1_Click()
+
  Public Sub Button1_Click()
 
   
 
   
  SerialPort1 = New SerialPort As "portaseriale"
+
  SerialPort1 = New SerialPort As "portaseriale"
 
   
 
   
 +
<FONT color=gray>' ''Facciamo in modo da poter inserire la password di root per impostare il setUID e consentire l'apertura del file protetto:''</font>
 +
  Shell "echo '<FONT color=darkgreen>''MIA_PASSWORD''</font>' | sudo -S chmod 4777 '/dev/ttyUSB1'" Wait
 
   
 
   
<FONT color=gray>' ''Facciamo in modo da poter inserire la password di root''
+
   With SerialPort1
' ''per impostare il setUID e consentire l'apertura del file protetto:''</font>
+
    .PortName = "/dev/ttyUSB1"
    Shell "echo '<FONT color=gray>''mia_password''</font>' | sudo -S chmod 4777 '/dev/ttyUSB1'" Wait
+
    .Speed = 19200
    
+
    .Parity = 0
    With SerialPort1
+
    .DataBits = 8
      .PortName = "/dev/ttyUSB1"
+
    .StopBits = 1
      .Speed = 19200
+
    .FlowControl = 0
      .Parity = 0
+
    .Open
      .DataBits = 8
+
  End With
      .StopBits = 1
 
      .FlowControl = 0
 
      .Open
 
    End With
 
 
   
 
   
  '''End'''
+
End
 
   
 
   
 
   
 
   
  '''Public''' Sub portaseriale_Read()
+
  Public Sub portaseriale_Read()
 
   
 
   
 
   Dim s As String
 
   Dim s As String
 
   
 
   
 
  <FONT color=gray>' ''Legge i dati dalla porta....''</font>
 
  <FONT color=gray>' ''Legge i dati dalla porta....''</font>
        Read #SerialPort1, s, Lof(SerialPort1)
+
  Read #SerialPort1, s, Lof(SerialPort1)
 
   
 
   
 
  <FONT color=gray>' ''...e li mostra in console:''</font>
 
  <FONT color=gray>' ''...e li mostra in console:''</font>
        Print s
+
  Print s
 +
 +
End
 +
 
   
 
   
  '''End'''
+
  Public Sub Form_Close()
 
   
 
   
 +
  If SerialPort1.Status = Net.Active Then SerialPort1.Close
 
   
 
   
  '''Public''' Sub Form_Close()
+
  End
    
+
 
  If SerialPort1.Status = Net.Active Then SerialPort1.Close
+
====Altri codici esemplificativi====
 
+
Gli utenti iscritti al Forum [https://www.gambas-it.org/smf/ www.gambas-it.org] possono scaricare anche altri due programmi ben più complessi:
'''End'''
+
* https://www.gambas-it.org/smf/index.php?action=dlattach;topic=8863.0;attach=5570   <SUP>&#091;[[#Note|nota 3]]&#093;</sup>
 +
* https://www.gambas-it.org/smf/index.php?action=dlattach;topic=8863.0;attach=5575  <SUP>&#091;[[#Note|nota 4]]&#093;</sup>
 +
 
 +
 
 +
 
 +
=Note=
 +
[1] Vedere anche questa pagina: [[Approfondimento_sull'accesso_alle_porte_USB|Approfondimento sull'accesso alle porte USB]]
 +
 
 +
[2] In tali altri casi il file-device creato può essere: "/dev/<FONT Color=#B22222>ttyACM0</font>"
 +
 
 +
[3] Il codice è stato realizzato dall'utente "''[https://www.gambas-it.org/smf/index.php?action=profile;u=1089 kicco]'' "
  
 +
[4] Il codice è stato realizzato dall'utente "''[https://www.gambas-it.org/smf/index.php?action=profile;u=576 astragalo]'' ".
  
  

Versione attuale delle 08:01, 4 dic 2023

Possiamo accedere alle Porte Seriali [nota 1] aprendo e leggendo direttamentre i dati provenienti dai relativi file-device.

Poniamo l'esempio di avere una penna USB per la connessione ad Internet, e che alla sua connessione il sistema operativo abbia generato due relativi file-device: "/dev/ttyUSB0 " e "/dev/ttyUSB1 " [nota 2].
Possiamo leggere i dati provenienti dalla porta mediante due modalità:

  • direttamente dal relativo file-device, ad esempio, "/dev/ttyUSB1 ";
  • mediante l'apposita classe "SerialPort".

Mediante lettura diretta dal corrispondente file-device

Per il seguente esempio è necessario attivare anche il componente "gb.desktop", ed aver installato il programma "x-term":

Private fl As File


Public Sub Button1_Click()

' Se il file non possiede i più ampi permessi...
 If Stat("/dev/ttyUSB1").Auth <> "rwsrwxrwx" Then
' ...allora modificheremo in quel senso i permessi del file:
   Desktop.RunAsRoot("chmod 4777 /dev/ttyUSB1")
' Restiamo in attesa fino a che i permessi non vengono modificati, come desiderato:
   Repeat
     Wait 0.01
   Until Stat("/dev/ttyUSB1").Auth = "rwsrwxrwx"
 Endif

' In alternativa all'algoritmo precedente, si potrà utilizzare il seguente codice per impostare il setUID e consentire l'apertura del file protetto:
 Exec ["gksu", "chmod 4777", "/dev/ttyUSB1"] Wait

' ...o ancor più facilmente:
 Shell "echo MIA_PASSWORD | sudo -S chmod 4777 '/dev/ttyUSB1'" Wait

' Apriamo il file-device aggiungendo la parola chiave "Watch":
 fl = Open "/dev/ttyUSB1" For Read Watch

End


Public Sub File_Read()

 Dim s As String

 While Not Eof(fl)
' Leggiamo i dati provenienti dal file-device...:
   Line Input #fl, s
' ...e li mostriamo in console:
   Print s
 Wend

End


Lettura mediante la Classe SerialPort

La lettura della Porta Seriale portà avvenire anche mediante l'uso della Classe "SerialPort" attivando il componente gb.net.

Private SerialPort1 As SerialPort


Public Sub Button1_Click()

 SerialPort1 = New SerialPort As "portaseriale"

' Facciamo in modo da poter inserire la password di root per impostare il setUID e consentire l'apertura del file protetto:
 Shell "echo 'MIA_PASSWORD' | sudo -S chmod 4777 '/dev/ttyUSB1'" Wait

 With SerialPort1
   .PortName = "/dev/ttyUSB1"
   .Speed = 19200
   .Parity = 0
   .DataBits = 8
   .StopBits = 1
   .FlowControl = 0
   .Open
 End With

End


Public Sub portaseriale_Read()

 Dim s As String

' Legge i dati dalla porta....
 Read #SerialPort1, s, Lof(SerialPort1)

' ...e li mostra in console:
 Print s

End


Public Sub Form_Close()

 If SerialPort1.Status = Net.Active Then SerialPort1.Close

End

Altri codici esemplificativi

Gli utenti iscritti al Forum www.gambas-it.org possono scaricare anche altri due programmi ben più complessi:


Note

[1] Vedere anche questa pagina: Approfondimento sull'accesso alle porte USB

[2] In tali altri casi il file-device creato può essere: "/dev/ttyACM0"

[3] Il codice è stato realizzato dall'utente "kicco "

[4] Il codice è stato realizzato dall'utente "astragalo ".


Approfondimenti in internet