Pyserial AT командные вопросы - PullRequest
0 голосов
/ 28 мая 2019

Я хочу отправить простую команду через pyserial, но обнаружил, что когда я отправляю символ "" в pyserial.write, он меняется на другой формат.

Могу ли я узнать, как отправить символ "" с помощью pyserial?

import serial
import time
import sys


class SIMComModem(object):

def __init__(self):
    self.open()

def open(self):
    self.ser = serial.Serial('COM9', 115200, timeout=5)
    print("Send AT OK command \n ")
    self.SendCommand('AT\r')
    time.sleep(0.5)


def SendCommand(self, command, getline=True):
    self.ser.flushInput()
    self.ser.flushOutput()
    print(command.encode())
    self.ser.write(command.encode())
    data = ''
    if getline:
        data = self.ReadLine()
    return data

def ReadLine(self):
    data = self.ser.readline()
    data = self.ser.readline()
    print(data)
    return data

def SetGPS(self):
    pass

def GetGpsOne(self):
    print("Set APN")
    self.SendCommand('AT+CGSOCKCONT=1,”IP”,”mobile”\r')
    time.sleep(0.5)
    print("Donwnload GpsOneData")
    self.SendCommand('AT+CGPSXD=0\r')
    time.sleep(0.5)
    self.SendCommand('AT+CHTPSERV=\\”ADD\\”,\\”www.google.com\\”,80,1\r')
    time.sleep(0.5)
    print("Update Time zone")
    self.SendCommand('AT+CTZU=1\r')
    time.sleep(0.5)
    self.SendCommand('AT+CCLK?\r')
    time.sleep(0.5)

Я ожидаю, что когда я вызову функцию GetGpsOne, она отправит AT+CGSOCKCONT=1,"IP","mobile" на COM-порт, но результат будет следующим:


b'AT\r'
b'OK\r\n'
Set APN
b'AT+CGSOCKCONT=1,\xe2\x80\x9dIP\xe2\x80\x9d,\xe2\x80\x9dmobile\xe2\x80\x9d\r'

1 Ответ

0 голосов
/ 28 мая 2019

Вам понадобятся "прямые" цитаты , а не "типографские" цитаты , которые вы используете в настоящее время.

Попробуйте

print("Set APN")
self.SendCommand('AT+CGSOCKCONT=1,"IP","mobile"\r')
time.sleep(0.5)
print("Donwnload GpsOneData")
self.SendCommand('AT+CGPSXD=0\r')
time.sleep(0.5)
self.SendCommand('AT+CHTPSERV="ADD","www.google.com",80,1\r')
time.sleep(0.5)
print("Update Time zone")
self.SendCommand('AT+CTZU=1\r')
time.sleep(0.5)
self.SendCommand('AT+CCLK?\r')
time.sleep(0.5)

вместо.

Чтобы уточнить, вот что не так с вашей типографской цитатой:

>>> ord('”')  # <-- the quote used by the original code
8221
>>> '”'.encode('utf-8')
b'\xe2\x80\x9d'  # <-- the UTF-8 encoding you saw



>>> ord('"')  # <-- the correct ASCII quote
34
>>> '"'.encode('utf-8')  # <-- its UTF-8 encoding
b'\x22'
...