22. februar 2005 - 02:41
Der er
5 kommentarer
Send SMS med gsm modem og AT+ kommandoer
Hej
Nu har jeg prøvet alverdens kodestumper, men jeg kan ikke finde noget der virker, hverken i text & PDU mode.
Der skulle vel ikke være en derude der har noget liggende.
Hvis jeg bruger et færdigt program kan jeg godt sende en SMS så det er ikke modemet.
22. februar 2005 - 08:36
#2
I teorien kan man vel med AT kommandoer sende SMS via en hvilken som helst mobiltelefon. Men problemet er at det ikke er alle Firmaer der understøtter et fuldt sæt AT kommandoer. Og at det ikke er alle der vil fortælle hvilke kommandoer de understøtter. Hvis det er nokia, så har de et udemærket developer forum man bare kan meldes sig ind i.
Der findes 2 måder at sende SMS'er på
1 Text mode
Modemet skal først sættes til Text mode
det kan gøres med
Text Mode AT+CMGF=0 + enter
2 PDU Mode
PDU Mode AT+CMGF=1 + enter
"Vedlagte eksempel er findet på nettet men jeg kan ikke få det til at virke med mit modem "Mobil telefon Siemend SL45"
'Tested on Siemens(19200 baud) and Bosch (9600 baud)
Hvis du får noget af det til at virke er jeg med på en lurer.
Private Sub Command1_Click()
Dim sms As String
Dim buffer$
If MSComm1.PortOpen = False Then
MSComm1.CommPort = 7
MSComm1.Settings = "19200,N,8,1"
MSComm1.InputLen = 0
MSComm1.Handshaking = comNone
MSComm1.PortOpen = True
End If
'echo off
MSComm1.Output = "atE0" & Chr$(13)
Do
DoEvents
buffer$ = buffer$ & MSComm1.Input
Loop Until InStr(buffer$, "OK")
buffer$ = ""
'set pdu mode
MSComm1.Output = "AT+CMGF=0" & Chr$(13)
Do
DoEvents
buffer$ = buffer$ & MSComm1.Input
Loop Until InStr(buffer$, "OK")
buffer$ = ""
sms = MakeSms("004917212345678", "Does it work?")
Debug.Print sms
MSComm1.Output = "AT+CMGS=" & Len(sms) / 2 & Chr$(13)
Do
DoEvents
buffer$ = buffer$ & MSComm1.Input
Loop Until InStr(buffer$, ">")
buffer$ = ""
MSComm1.Output = sms + Chr$(26)
Do
DoEvents
buffer$ = buffer$ & MSComm1.Input
Loop Until InStr(buffer$, "OK")
MSComm1.PortOpen = False
End Sub
Function MakeSms(number As String, txt As String) As String
MakeSms = "001100"
MakeSms = MakeSms + ConvNumber(number)
MakeSms = MakeSms + "000064"
MakeSms = MakeSms + ConvTxt(txt)
End Function
Function ConvNumber(num As String) As String
Dim i As Integer
Dim numType As String
'default local number
numType = "81"
'but if international number then .....
If Left$(num, 3) = "+00" And Len(num) > 3 Then num = Mid$(num, 4): numType = "91"
If Left$(num, 2) = "00" And Len(num) > 2 Then num = Mid$(num, 3): numType = "91"
If Left$(num, 1) = "+" And Len(num) > 1 Then num = Mid$(num, 2): numType = "91"
ConvNumber = Right$("00" & Hex(Len(num)), 2)
ConvNumber = ConvNumber + numType
For i = 1 To Len(num) Step 2
ConvNumber = ConvNumber + Mid$(num + "F", i + 1, 1) + Mid$(num + "F", i, 1)
Next i
End Function
Function ConvTxt(txt As String) As String
Dim i As Integer
Dim datArr1(1 To 256) As Byte
Dim l As Integer
Dim touw As String
'no more than 160 chars
If Len(txt) > 160 Then txt = Left$(txt, 160)
l = Len(txt)
ConvTxt = Right$("00" & Hex(Len(txt)), 2)
For i = 1 To l
datArr1(i) = Asc(Mid$(txt, i, 1))
Next i
'make a bit stream of septets
touw = ""
For i = 1 To l
touw = ToBin7(datArr1(i)) + touw
Next i
'and convert it to octets
While Len(touw) > 8
ConvTxt = ConvTxt + Bin2Hex(Right$(touw, 8))
touw = Mid$(touw, 1, Len(touw) - 8)
Wend
ConvTxt = ConvTxt + Bin2Hex(touw)
Debug.Print ConvTxt
End Function
Function ToBin7(ByVal num As Byte) As String
'convert to padded 7 place binary number
While num > 0
ToBin7 = Trim(num Mod 2) + ToBin7
num = num \ 2
Wend
ToBin7 = Right$("0000000" + ToBin7, 7)
End Function
Function Bin2Hex(ByVal touw As String) As String
'convert binary to a padded 2 place hex number
Dim x As Integer
Dim num As Long
For x = 1 To Len(touw)
If Mid$(touw, x, 1) = "1" Then
num = num + 2 ^ (Len(touw) - x)
End If
Next x
Bin2Hex = Right$("00" + Hex(num), 2)
End Function
Private Sub Form_Load()
End Sub
Prøv at søge efter SAGEM AT commands i basic GSM/GPRS applications.