Jump to content

Enviar uma sms para o Telemovel


SamuelVieira

Recommended Posts

Boa tarde,

Podes sempre utilizar as "conhecidas como pen 3G" que básicamente são modems GSM, e desenvolver um programa que envie SMS's utilizando os comandos AT dos modems. Se ligares 3 num mesmo PC com 1 cartã de cada operadora de telecomunicações, podes sempre ler os numeros de destinatário, retirar os primeiros 2 digitos, verificar qual será supostamente a operadora e enviar a mensagem pelo modem que for mais barato enviar o SMS, ou até "gratuito".

Cordiais cumprimentos,

Apocsantos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Link to comment
Share on other sites

Boa tarde,

Podes sempre utilizar as "conhecidas como pen 3G" que básicamente são modems GSM, e desenvolver um programa que envie SMS's utilizando os comandos AT dos modems. Se ligares 3 num mesmo PC com 1 cartã de cada operadora de telecomunicações, podes sempre ler os numeros de destinatário, retirar os primeiros 2 digitos, verificar qual será supostamente a operadora e enviar a mensagem pelo modem que for mais barato enviar o SMS, ou até "gratuito".

Cordiais cumprimentos,

Apocsantos

Boas, desde ja obrigado pela resposta.

Foi uma boa ideia, mas não tenho muitos conhecimentos em relação a esse tipo de serviços, a unica coisa que dei foi Visual basic e dev-pascal. Mas ate gostava de experimentar poderia-me dar mais informações, tais como:

  • para programar os comandos AT é em que linguagem?
  • o que é preciso em termos de equipamento para meter isso em pratica?
Link to comment
Share on other sites

Boa tarde,

Em que linguagem: qualquer: Qualquer linguagem de programação, uma vez que apenas envias comandos a um equipamento que os sabe interpretar".

Pen's 3G uma para enviar mensagems... Se fores por a ideia toda em pratica, diria que 3 pois em portugal tens 3 operadoras: TMN, Vodafone, Optimus.

Vê a seguinte class em vb.net:

Option Explicit On   
Imports System
Imports System.Threading
Imports System.ComponentModel
Imports System.IO.PortsPublic Class SMSCOMMS   
Private WithEvents SMSPort As SerialPort   
   Private SMSThread As Thread
   Private ReadThread As Thread
   Shared _Continue As Boolean = False
   Shared _ContSMS As Boolean = False
   Private _Wait As Boolean = False
   Shared _ReadPort As Boolean = False
   Public Event Sending(ByVal Done As Boolean)
   Public Event DataReceived(ByVal Message As String)   
   Public Sub New(ByRef COMMPORT As String)
    SMSPort = New SerialPort
    With SMSPort
	    .PortName = COMMPORT
	    .BaudRate = 9600
	    .Parity = Parity.None
	    .DataBits = 8
	    .StopBits = StopBits.One
	    .Handshake = Handshake.RequestToSend
		    .DtrEnable = True
		  .RtsEnable = True
	    .NewLine = vbCrLf
    End With
    ReadThread = New Thread(AddressOf ReadPort)
    End Sub   
   Public Function SendSMS(ByVal CellNumber As String,
    ByVal SMSMessage As String) As Boolean
    Dim MyMessage As String = Nothing
    'Check if Message Length <= 160
    If SMSMessage.Length <= 160 Then
	    MyMessage = SMSMessage
    Else
		  MyMessage = Mid(SMSMessage, 1, 160)
    End If
    If IsOpen = True Then
		    SMSPort.WriteLine("AT+CMGS=" & CellNumber & vbCr)
		    _ContSMS = False
		    SMSPort.WriteLine(MyMessage & vbCrLf & Chr(26))
		    _Continue = False
		    RaiseEvent Sending(False)
    End If
   End Function   
   Private Sub ReadPort()
	  Dim SerialIn As String = Nothing
    Dim RXBuffer(SMSPort.ReadBufferSize) As Byte
    Dim SMSMessage As String = Nothing
    Dim Strpos As Integer = 0
    Dim TmpStr As String = Nothing   
	    While SMSPort.IsOpen = True
	    If (SMSPort.BytesToRead <> 0) And (
		    SMSPort.IsOpen = True) Then
		    While SMSPort.BytesToRead <> 0
			    SMSPort.Read(RXBuffer, 0, SMSPort.ReadBufferSize)
			    SerialIn =
				    SerialIn & System.Text.Encoding.ASCII.GetString(
				    RXBuffer)
			    If SerialIn.Contains(">") = True Then
				    _ContSMS = True
			    End If
			    If SerialIn.Contains("+CMGS:") = True Then
				    _Continue = True
				    RaiseEvent Sending(True)
				    _Wait = False
				    SerialIn = String.Empty
				    ReDim RXBuffer(SMSPort.ReadBufferSize)
			    End If
		    End While
		    RaiseEvent DataReceived(SerialIn)
		    SerialIn = String.Empty
		    ReDim RXBuffer(SMSPort.ReadBufferSize)
	    End If
    End While
   End Sub   
   Public ReadOnly Property IsOpen() As Boolean
    Get
	    If SMSPort.IsOpen = True Then
		    IsOpen = True
	    Else
		    IsOpen = False
	    End If
    End Get
   End Property   
   Public Sub Open()
    If IsOpen = False Then
	    SMSPort.Open()
	    ReadThread.Start()
    End If
   End Sub   
   Public Sub Close()
    If IsOpen = True Then
	    SMSPort.Close()
    End If
   End Sub   
End Class

Para enviar um sms seria algo como:

SMSEngine = New SMSCOMMS("COM1")
SMSEngine.Open()
SMSEngine.SendSMS("919888888888","SMS Testing")
SMSEngine.Close()

Podes encontrar toda a documentação deste exemplo aqui.

Cordiais cumprimentos,

Apocsantos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Link to comment
Share on other sites

Boa tarde,

Em que linguagem: qualquer: Qualquer linguagem de programação, uma vez que apenas envias comandos a um equipamento que os sabe interpretar".

Pen's 3G uma para enviar mensagems... Se fores por a ideia toda em pratica, diria que 3 pois em portugal tens 3 operadoras: TMN, Vodafone, Optimus.

Vê a seguinte class em vb.net:

Option Explicit On  
Imports System
Imports System.Threading
Imports System.ComponentModel
Imports System.IO.PortsPublic Class SMSCOMMS  
Private WithEvents SMSPort As SerialPort  
Private SMSThread As Thread
Private ReadThread As Thread
Shared _Continue As Boolean = False
Shared _ContSMS As Boolean = False
Private _Wait As Boolean = False
Shared _ReadPort As Boolean = False
Public Event Sending(ByVal Done As Boolean)
Public Event DataReceived(ByVal Message As String)  
Public Sub New(ByRef COMMPORT As String)
	SMSPort = New SerialPort
	With SMSPort
		.PortName = COMMPORT
		.BaudRate = 9600
		.Parity = Parity.None
		.DataBits = 8
		.StopBits = StopBits.One
		.Handshake = Handshake.RequestToSend
			.DtrEnable = True
		  .RtsEnable = True
		.NewLine = vbCrLf
	End With
	ReadThread = New Thread(AddressOf ReadPort)
	End Sub  
Public Function SendSMS(ByVal CellNumber As String,
	ByVal SMSMessage As String) As Boolean
	Dim MyMessage As String = Nothing
	'Check if Message Length <= 160
	If SMSMessage.Length <= 160 Then
		MyMessage = SMSMessage
	Else
		  MyMessage = Mid(SMSMessage, 1, 160)
	End If
	If IsOpen = True Then
			SMSPort.WriteLine("AT+CMGS=" & CellNumber & vbCr)
			_ContSMS = False
			SMSPort.WriteLine(MyMessage & vbCrLf & Chr(26))
			_Continue = False
			RaiseEvent Sending(False)
	End If
End Function  
Private Sub ReadPort()
	  Dim SerialIn As String = Nothing
	Dim RXBuffer(SMSPort.ReadBufferSize) As Byte
	Dim SMSMessage As String = Nothing
	Dim Strpos As Integer = 0
	Dim TmpStr As String = Nothing  
		While SMSPort.IsOpen = True
		If (SMSPort.BytesToRead <> 0) And (
			SMSPort.IsOpen = True) Then
			While SMSPort.BytesToRead <> 0
				SMSPort.Read(RXBuffer, 0, SMSPort.ReadBufferSize)
				SerialIn =
					SerialIn & System.Text.Encoding.ASCII.GetString(
					RXBuffer)
				If SerialIn.Contains(">") = True Then
					_ContSMS = True
				End If
				If SerialIn.Contains("+CMGS:") = True Then
					_Continue = True
					RaiseEvent Sending(True)
					_Wait = False
					SerialIn = String.Empty
					ReDim RXBuffer(SMSPort.ReadBufferSize)
				End If
			End While
			RaiseEvent DataReceived(SerialIn)
			SerialIn = String.Empty
			ReDim RXBuffer(SMSPort.ReadBufferSize)
		End If
	End While
End Sub  
Public ReadOnly Property IsOpen() As Boolean
	Get
		If SMSPort.IsOpen = True Then
			IsOpen = True
		Else
			IsOpen = False
		End If
	End Get
End Property  
Public Sub Open()
	If IsOpen = False Then
		SMSPort.Open()
		ReadThread.Start()
	End If
End Sub  
Public Sub Close()
	If IsOpen = True Then
		SMSPort.Close()
	End If
End Sub  
End Class

Para enviar um sms seria algo como:

SMSEngine = New SMSCOMMS("COM1")
SMSEngine.Open()
SMSEngine.SendSMS("919888888888","SMS Testing")
SMSEngine.Close()

Podes encontrar toda a documentação deste exemplo aqui.

Cordiais cumprimentos,

Apocsantos

Muito agradecido, talvez prossiga com esta ideia.

vou explorar mais este assunto.

obrigado.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.