SIM808 Modul zum Telefonieren, SMS senden u. Empfangen, GPS Daten auslesen

Eigene oder Gemeinschaftsprojekte, Klassen, Module, Codeschnipsel, HowTos, ...
Antworten
reinhard-adam
Foriker
Beiträge: 2
Registriert: Fr 18. Sep 2020, 15:31
Wohnort: Marksuhl
Kontaktdaten:

SIM808 Modul zum Telefonieren, SMS senden u. Empfangen, GPS Daten auslesen

Beitrag von reinhard-adam » Mo 28. Dez 2020, 17:58

Ich habe für den Raspberry Pi3B Plus und dem Modul SIM808 ein Projekt entworfen, dass Telefonie, SMS und GPS Daten unterstützt.
Bezugslink für SIM808:
https://www.az-delivery.de/products/sim ... f0c3&_ss=r
Gambas Formen, Schaltplan und gesamtes Projekt als Dateianlage beigefügt.
Wichtig:
wichtig, sonst geht serielle Schnittstelle nicht richtig!
In "raspi-conf" Schnittstellen, Serielle Schnittstelle, Konsole deaktivieren
Schnittstelle aktivieren also 1xj 1xn
also:
Would you like a login shell to be accessible over serial? >>>> nein
Would you like the serial port hardware to be enabled? >>>> ja



Treiber für seriellen Anschluß /dev/serial0
Treiber für USB Anschluß /dev/ttyUSB0
Baudrate 9600
Data Bits 8
Parity none
Stopbit 1
FlowControl Hardware


Soll SIM808 Modul nicht über den vorhandenen Taster aktiviert bzw. deaktiviert werden, sondern z.B. über GPIOs,
dann Pin D9 auf SIM Modul für 1 Sek. auf +3,3V (High) legen für Einschalten.
Für Aussachalten Pin D9 für 3 Sek. auf – 3,3V (Low) legen oder 3 Sek. auf + 3,3V legen (wenn vorher eingeschaltet war).

Sim 808 Modul benötigt kurzfristig einen Strom über 1,5 A, deshalb separate Stromversorgung erforderlich!!

Gambas Code:
gambas code
' Gambas class file

'in "raspi-conf" Schnittstellen, Serielle Schnittstelle, Konsole deaktivieren
'Schnittstelle aktivieren also 1xj 1xn
'Software Power SIM808 Pin D9 für 1 Sek auf +3,3V ausschalten für 3 Sek an Minus oder 3 Sek auf +3,3 V (wenn eingeschaltet)
'Serieller Treiber normalerweise /dev/serial0
'geht auch mit USB Adapter FD232RL 3,3V RX/TX Spannung Adapter RX an SIM808 TX und Adapter TX an SIM808 RX !!! Treiber /dev/ttyUSB0 



Public Sub Button1_Click()

  Form1.ShowDialog

End

Public Sub Button2_Click()

   'Einstellung speichern
  
  File.Save(Application.Path & "/einstellung.txt", Trim(TextBox1.Text))  'es wird in /home/pi gespeichert

End

Public Sub Form_Open()

   'Einstellung holen
  TextBox1.Text = File.Load(Application.Path & "/einstellung.txt")
Catch
  If Error Then Return

End

Public Sub Button3_Click()

  'Port an

SerialPort1.PortName = Trim(TextBox1.Text)  'z.B. /dev/ttyUSB0
If Trim(TextBox1.Text) = "" Then 
  Message("ungültiger Port", "OK")
  Return
Endif

SerialPort1.Speed = ComboBox1.Text   '4800
SerialPort1.DataBits = "8"
SerialPort1.StopBits = "1"
SerialPort1.Parity = "0"
SerialPort1.FlowControl = "0"

SerialPort1.Open()
If SerialPort1.Status = 1 Then TextBox2.Text = "an"

Catch   'Fehler abfangen
    Message("es ist ein Fehler aufgetreten", "OK")
End

Public Sub Button4_Click()

  'Port aus
If SerialPort1.Status = Net.Active Then
  SerialPort1.Close()
 If SerialPort1.Status = 0 Then TextBox2.Text = "aus"
 
Endif

End


Public Sub SerialPort1_Read()

  'Daten auslesen
  Dim s As String
  Read #Serialport1, s, Lof(serialport1)
  FMain.TextArea1.Text = FMain.TextArea1.Text & s
  

End

Public Sub TextArea1_Change()

  'Länge begrenzen
  If Len(FMain.TextArea1.Text) >= 4000 Then FMain.TextArea1.Text = ""

End



Public Sub Form_Close()

  FMain.SerialPort1.Close()  'Port schließen

End

Public Sub Button5_Click()

  'Daten senden
   Dim inhalt As String
 
 If SerialPort1.Status = 0 Then 
     Message("Port nicht aktiv", "OK")  
     Return
   Endif 
 
 If Trim(FMain.TextBox3.Text) = "" Then 
  Message("keine Eingabe", "OK")
  Return
 Endif
  
  inhalt = FMain.TextBox3.Text & "\n"
  
  Write #SerialPort1, inhalt, Len(inhalt)
Wait
Sleep 0.5

Catch   'Fehler abfangen
    Message("es ist ein Fehler aufgetreten", "OK")
  
End

Public Sub Button6_Click()
'Telefonnummer wählen
Dim inhalt As String

If SerialPort1.Status = 0 Then 
     Message("Port nicht aktiv", "OK")  
     Return
Endif 
   
inhalt = "ATD" & Trim(FMain.TextBox4.text) & ";" & "\n"
Write #SerialPort1, inhalt, Len(inhalt)

Catch   'Fehler abfangen
    Message("es ist ein Fehler aufgetreten", "OK") 

End

Public Sub Button7_Click()

  'Auflegen
  Dim inhalt As String
 
 If SerialPort1.Status = 0 Then 
     Message("Port nicht aktiv", "OK")  
     Return
 Endif 
 
inhalt = "ATH" & "\n"
Write #SerialPort1, inhalt, Len(inhalt)

Catch   'Fehler abfangen
    Message("es ist ein Fehler aufgetreten", "OK")
    
End

Public Sub Button8_Click()

  'Anruf Annehmen
  Dim inhalt As String
 
 If SerialPort1.Status = 0 Then 
     Message("Port nicht aktiv", "OK")  
     Return
 Endif

inhalt = "ATA" & "\n"
Write #SerialPort1, inhalt, Len(inhalt)

Catch   'Fehler abfangen
    Message("es ist ein Fehler aufgetreten", "OK")
    
End

Public Sub Button9_Click()

  'eigene Nummer
  Dim inhalt As String
 
 If SerialPort1.Status = 0 Then 
     Message("Port nicht aktiv", "OK")  
     Return
 Endif


inhalt = "AT+CPBR=1" & "\n"
Write #SerialPort1, inhalt, Len(inhalt)

Catch   'Fehler abfangen
    Message("es ist ein Fehler aufgetreten", "OK")
    
End

Public Sub Button10_Click()

  'Guthaben
   Dim inhalt As String

 If SerialPort1.Status = 0 Then 
     Message("Port nicht aktiv", "OK")  
     Return
 Endif

inhalt = "AT+CUSD=1," & Chr(34) & "*101#" & Chr(34) & "\n"
Write #SerialPort1, inhalt, Len(inhalt)

Catch   'Fehler abfangen
    Message("es ist ein Fehler aufgetreten", "OK")
    
End

Public Sub Button11_Click()

  'Textbox löschen
  FMain.TextArea1.text = ""
  
End

Public Sub Button12_Click()

  'SMS senden
  Dim inhalt As String
  Dim inhalt1 As String
  Dim inhalt2 As String
  Dim inhalt3 As String
  
  
  
  If Trim(FMain.textbox5.text) = "" Then
    Message("keine Nummer", "OK")
  Return
  Endif
  
  If Len(FMain.TextArea2.text) > 150 Then
    Message("SMS zu lang", "OK")
  Return
  Endif
 
  inhalt1 = "AT+CMGF=1" & Chr(13)
  Write #SerialPort1, inhalt1, Len(inhalt1)    'Textmodus einstellen
  Wait
  Sleep 1
  
  inhalt = "AT+CMGS=" & Chr(34) & Trim(FMain.TextBox5.text) & Chr(34) & Chr(13)  'Telefonnummer senden
  Write #SerialPort1, inhalt, Len(inhalt)
  Wait
  Sleep 1
  
  inhalt2 = Trim(FMain.TextArea2.text)   'Text senden
  Write #SerialPort1, inhalt2, Len(inhalt2)  
  Wait
  Sleep 1
  
  inhalt3 = Chr(26)
  Write #SerialPort1, inhalt3, Len(inhalt3)   'String+Z senden

Catch   'Fehler abfangen
    Message("es ist ein Fehler aufgetreten", "OK")
    
End

Public Sub Button13_Click()

  'vorh. SMS Listen
  Dim inhalt As String
  Dim textmodus As String
  
  If SerialPort1.Status = 0 Then 
     Message("Port nicht aktiv", "OK")  
     Return
 Endif
  
  textmodus = "AT+CMGF=1" & Chr(13)
  Write #SerialPort1, textmodus, Len(textmodus)    'Textmodus einstellen
  Wait
  Sleep 1
   
   inhalt = "AT+CMGL=" & Chr(34) & "ALL" & Chr(34) & "\n"
   Write #SerialPort1, inhalt, Len(inhalt)   

Catch   'Fehler abfangen
    Message("es ist ein Fehler aufgetreten", "OK")

End

Public Sub Button14_Click()

  'SMS Nr anzeigen
   Dim inhalt As String
   Dim textmodus As String
  
   If SerialPort1.Status = 0 Then 
     Message("Port nicht aktiv", "OK")  
     Return
  Endif
  
  textmodus = "AT+CMGF=1" & Chr(13)
  Write #SerialPort1, textmodus, Len(textmodus)    'Textmodus einstellen
  Wait
  Sleep 1
   
   inhalt = "AT+CMGR=" & Trim(FMain.TextBox6.text) & "\n"
   Write #SerialPort1, inhalt, Len(inhalt)   

Catch   'Fehler abfangen
    Message("es ist ein Fehler aufgetreten", "OK")

End

Public Sub Button16_Click()
'SMS Nr löschen
   Dim inhalt As String
   Dim textmodus As String
  
  textmodus = "AT+CMGF=1" & Chr(13)
  Write #SerialPort1, textmodus, Len(textmodus)    'Textmodus einstellen
  Wait
  Sleep 1
   
   inhalt = "AT+CMGD=" & Trim(FMain.TextBox7.text) & "\n"
   Write #SerialPort1, inhalt, Len(inhalt)   

Catch   'Fehler abfangen
    Message("es ist ein Fehler aufgetreten", "OK")

End

Public Sub Button15_Click()
 'alle SMS löschen
  Dim inhalt As String
  Dim textmodus As String
  
  If SerialPort1.Status = 0 Then 
     Message("Port nicht aktiv", "OK")  
     Return
  Endif
  
  textmodus = "AT+CMGF=1" & Chr(13)
  Write #SerialPort1, textmodus, Len(textmodus)    'Textmodus einstellen
  Wait
  Sleep 1

  inhalt = "AT+CMGD=1,4" & "\n"   'alle SMS löschen
   Write #SerialPort1, inhalt, Len(inhalt)  
   
   Catch   'Fehler abfangen
   Message("es ist ein Fehler aufgetreten", "OK")
    
End

Public Sub Button17_Click()

  'GPS abrufen
   Dim inhalt As String
   Dim inhalt1 As String
   Dim pos1 As Integer
   Dim pos2 As Integer
   Dim gpsinhalt As String
   Dim liste As String[]
   
   If SerialPort1.Status = 0 Then 
     Message("Port nicht aktiv", "OK")  
     Return
   Endif 
   
   FMain.TextArea1.Clear  'Textfeld leeren
   inhalt1 = "AT+CGPSPWR=1\n"      'GPS einschalten
   Write #SerialPort1, inhalt1, Len(inhalt1)   
   Wait
   Sleep 0.5
   
   inhalt = "AT+CGPSINF=2\n"    '$GPGGA holen
   Write #SerialPort1, inhalt, Len(inhalt)   
   Wait
   Sleep 0.5
   FMain.TextArea1.Refresh
   Wait
   
   '1. Pos suchen
   pos1 = InStr(FMain.TextArea1.text, "+CGPSINF: 2")
   pos2 = InStr(FMain.TextArea1.text, "M")  'M ist Meter der Höhe
   gpsinhalt = Mid(FMain.TextArea1.Text, (pos1 + 13 - 1), pos2 - (pos1 + 11))
   
   'Splitten
   liste = Split(gpsinhalt, ",")
   FMain.TextBox8.text = liste[0]  'UTC
   FMain.TextBox9.text = liste[1]  'Breite
   FMain.TextBox10.text = liste[2]  'N S
   FMain.TextBox12.text = liste[3]  'Länge
   FMain.TextBox11.text = liste[4]  'E W
   FMain.TextBox13.text = liste[6]  'Anz. Sat
   FMain.TextBox14.text = liste[8]  'Höhe



Catch   'Fehler abfangen
    Message("es ist ein Fehler aufgetreten", "OK")
    
End

Public Sub Timer1_Timer()

  Button17_Click

End

Public Sub Button18_Click()

  'Timer an Dauerbetrieb
  FMain.Timer1.Enabled = True

End

Public Sub Button19_Click()

  'Timer an Dauerbetrieb
  FMain.Timer1.Enabled = False

End

Public Sub Button20_Click()

  'Adressbuch aufrufen
  Form2.ShowDialog

End

Public Sub Button21_Click()

  'Telefonnummer holen

FMain.Button20_Click

End

Public Sub URLLabel1_Click()
'Shell "chromium-browser" & " https://www.google.de " & FMain.TextBox9.text & " " & FMain.TextBox10.text & " , " & FMain.TextBox12.text & " " & FMain.TextBox11.text 
  

End

Public Sub Button22_Click()
'Google Anzeige  
Shell "chromium-browser" & " " & "https://www.google.de/maps/place/" & Chr(34) & FMain.TextBox9.text & " " & FMain.TextBox10.text & "," & FMain.TextBox12.text & " " & FMain.TextBox11.text & Chr(34)

Catch   'Fehler abfangen
    Message("es ist ein Fehler aufgetreten", "OK")
    
End
Dateianhänge
sim808.zip
gesamtes Projekt
(37.07 KiB) 12-mal heruntergeladen
Schaltung.png
Schaltplan
Schaltung.png (90.06 KiB) 150 mal betrachtet
Formen.png
Formen
Formen.png (109.08 KiB) 150 mal betrachtet

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast