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