PythonでSMSコマンドを使用してAT)を送受信するのを誰かが手伝ってくれますか?
重要な場合は、Fedora8を使用しています。
Linux(Nokia、Sony Ericson、Samsung、.....)でどちらの電話が優れているでしょうか?すべての電話はSMS ATコマンドの使用)の送受信をサポートしますか?
始めるためのサンプルコードを次に示します(Python 3000):
_import time
import serial
recipient = "+1234567890"
message = "Hello, World!"
phone = serial.Serial("/dev/ttyACM0", 460800, timeout=5)
try:
time.sleep(0.5)
phone.write(b'ATZ\r')
time.sleep(0.5)
phone.write(b'AT+CMGF=1\r')
time.sleep(0.5)
phone.write(b'AT+CMGS="' + recipient.encode() + b'"\r')
time.sleep(0.5)
phone.write(message.encode() + b"\r")
time.sleep(0.5)
phone.write(bytes([26]))
time.sleep(0.5)
finally:
phone.close()
_
さらに2つのことを行う必要があります。
メッセージを適切な形式でエンコードします(ほとんどの場合 GSM 03.38 、便利な 翻訳テーブル がunicode.orgにあります)。 ASCII以外の文字を本当に気にしない場合は、すべての文字が_string.printable
_にあるかどうかを確認できます。
メッセージの長さを確認してください(エンコードに関係するかどうかはわかりませんが、140文字の場合もあれば、160文字の場合もあります)。
phone.readall()
を使用してエラーをチェックできますが、メッセージを電話に送信する前に、メッセージに問題がないことを確認することをお勧めします。睡眠が必要と思われることにも注意してください。
ほとんどの電話はこれを理解します。古いNokiaC5でシリアル接続を開くには、USBケーブルを挿入したときにポップアップするメニューから[PCスイート]を選択する必要がありました。これはBluetoothでも同様に機能するはずです。
コードは PySerial パッケージを使用し、python 2および3で使用できます。
参照:
atコマンドを使用してSMSを送信することを確認するには、これが役立ちます。
import serial
import time
class TextMessage:
def __init__(self, recipient="+2348065777685", message="TextMessage.content not set."):
self.recipient = recipient
self.content = message
def setRecipient(self, number):
self.recipient = number
def setContent(self, message):
self.content = message
def connectPhone(self):
self.ser = serial.Serial('COM70', 460800, timeout=5, xonxoff = False, rtscts = False, bytesize = serial.EIGHTBITS, parity = serial.PARITY_NONE, stopbits = serial.STOPBITS_ONE)
time.sleep(1)
def sendMessage(self):
self.ser.write('ATZ\r')
time.sleep(1)
self.ser.write('AT+CMGF=1\r')
time.sleep(1)
self.ser.write('''AT+CMGS="''' + self.recipient + '''"\r''')
time.sleep(1)
self.ser.write(self.content + "\r")
time.sleep(1)
self.ser.write(chr(26))
time.sleep(1)
def disconnectPhone(self):
self.ser.close()
sms = TextMessage("+2348063796720","Mummy i sent this message from my computer")
sms.connectPhone()
sms.sendMessage()
sms.disconnectPhone()
print "message sent successfully"
Atコマンドを使用してSMSを受信するには、これが役立つはずです
import serial
import time
import sys
class HuaweiModem(object):
def __init__(self):
self.open()
def open(self):
self.ser = serial.Serial('COM70', 406800, timeout=5)
self.SendCommand('ATZ\r')
self.SendCommand('AT+CMGF=1\r')
def SendCommand(self,command, getline=True):
self.ser.write(command)
data = ''
if getline:
data=self.ReadLine()
return data
def ReadLine(self):
data = self.ser.readline()
print data
return data
def GetAllSMS(self):
self.ser.flushInput()
self.ser.flushOutput()
command = 'AT+CMGL="REC UNREAD"\r\n'#gets incoming sms that has not been read
print self.SendCommand(command,getline=True)
data = self.ser.readall()
print data
h = HuaweiModem()
h.GetAllSMS()
電話で話すのは簡単です。適切な/dev/ttyACM*
デバイスを開いて、それに話しかけるだけです。どの電話がトリッキーです。 「テザリング」とATメッセージの完全なSMSコマンドセット)をサポートするすべての電話で問題ありません。
time.sleep
を、次の状態を続行する前にモデム「OK」からの応答を待機する条件ループに置き換えることをお勧めします。