1
Im玩弄Raspberry Pi,Breakout Board和GSM模塊。我在串行讀取數據時遇到問題。它看起來很不尋常,很多空白行和各種奇怪的條目都來自終端(ssh登錄字段提示)。我只是試圖讀取AT命令的輸入響應。爲我的GSM閱讀AT Command manual,響應非常具體,所以我期待閱讀只是尋找響應。我是新來的串行接口,所以任何有關最佳實踐的建議也將不勝感激。使用pyserial寫入和讀取來自GSM模塊的AT命令數據
#!/usr/bin/python
import time
import serial
import traceback
import netifaces as ni
import RPi.GPIO as GPIO
def resetModule(resetModulePin):
GPIO.output(resetModulePin, GPIO.HIGH)
time.sleep(0.5)
GPIO.output(resetModulePin, GPIO.LOW)
time.sleep(0.1)
def switch(onModulePin):
GPIO.output(onModulePin, GPIO.HIGH)
time.sleep(2)
GPIO.output(onModulePin, GPIO.LOW)
def writeAT():
i = 0
while True:
ser.flushInput()
ser.flush()
out = ''
ser.write('AT\r')
time.sleep(1)
if ser.inWaiting() > 0:
out += ser.read(12)
print 'GSM Is Up'
return out
else:
i += 1
if i > 3:
print 'GSM Down'
print 'Resetting Module'
resetModule(resetModulePin)
time.sleep(5)
print 'Turning On GSM'
switch(onModulePin)
time.sleep(5)
i = 0
try:
resetModulePin = 15
onModulePin = 13
GPIO.setmode(GPIO.BOARD)
GPIO.setup(onModulePin , GPIO.OUT)
GPIO.setup(resetModulePin, GPIO.OUT)
ser = serial.Serial(port='/dev/ttyAMA0', baudrate=115200)
ser.isOpen()
answers = ['yes', 'y']
while True:
out = writeAT()
if out != '':
print out
break
question = raw_input('Do you want to powerdown GSM?:').lower()
if question in answers:
print 'Powering Off GSM'
switch(onModulePin)
ser.close()
GPIO.cleanup()
except KeyboardInterrupt, e:
GPIO.cleanup()
except Exception,e :
traceback.print_exc()
GPIO.cleanup()
OUTPUT(注意空行)#Debugging
[email protected]:~/Desktop $ sudo python Newpy
GSM Down
Resetting Module
Turning On GSM
GSM Is Up
Do you want to powerdown GSM?:
我特別設置了波特率,但是我會試一試。 – iNoob
@iNoob聽起來不錯!我看到你正在專門設置RPi上的波特率,但這並不意味着GSM具有相同的設置。當我讀到你的症狀時,我首先想到的是「波特率不匹配!」所以我檢查了谷歌,看看它是否發生在其他人身上。 – cxw
我仍然獲得奇數輸出'GSM向下 設模塊 開啓GSM GSM是最多 IIIIIIIIIIII 你想關機GSM:' – iNoob