Sim808 с Mqtt (AT + CIPSEND) - PullRequest
       122

Sim808 с Mqtt (AT + CIPSEND)

0 голосов
/ 26 мая 2020

Я использую модуль GPS Sim808 для отправки широты и долготы и использую MQTT для отправки подписчику. Я следовал руководству от здесь до публикации sh сообщения MQTT через Sim808, но все равно не повезло. Вот мой пример кода:

def cmd(cmd, ser):
    out = b''; prev = b"101001011"
    ser.flushInput(); ser.flushOutput()
    ser.write(cmd + b'\r');

    while True :
        out += ser.read(1)
        if prev == out:
            return out
        prev = out
    return out

def gprs():
    command1 = cmd(b'AT', ser)  # Check module status
    print(str(command1.replace(b"\r", b"").replace(b"\n", b' '), 'utf-8'))
    sleep(1)

    command2 = cmd(b'AT+CPIN?', ser)    # Check if module ready for sms, call,gps, etc.
    print(str(command2.replace(b"\r", b"").replace(b"\n", b' '), 'utf-8'))
    sleep(1)

    command3 = cmd(b'AT+CFUN=1', ser)   # Activate GPRS
    print(str(command3.replace(b"\r", b"").replace(b"\n", b' '), 'utf-8'))
    sleep(1)

    command4 = cmd(b'AT+CSTT="Internet","",""', ser)    # Setting APN
    print(str(command4.replace(b"\r", b"").replace(b"\n", b' '), 'utf-8'))
    while b"ERROR" in command4:
    sleep(3)

    command5 = cmd(b'AT+CIICR', ser)    # Start connection with GPRS
    print(str(command5.replace(b"\r", b"").replace(b"\n", b' '), 'utf-8'))
    sleep(1)

    command6 = cmd(b'AT+CIFSR', ser)    # IP Adress from carrier
    print(str(command6.replace(b"\r", b"").replace(b"\n", b' '), 'utf-8'))
    sleep(1)

    command7 = cmd(b'AT+CIPSTART="TCP","test.mosquitto.org","1883"', ser)
    print(str(command7.replace(b"\r", b"").replace(b"\n", b' '), 'utf-8'))

def gprs_send(pub):
    command = cmd(b'AT+CIPSEND', ser)
    print(str(command.replace(b"\r", b"").replace(b"\n", b' '), 'utf-8'))
    if b">" in command:
        pub = cmd(pub, ser)
        return pub

At main (я создал фиктивные данные для hex-byte, чтобы проверить, работает ли он):

if __name__ == '__main__' :
    gprs()
    sleep(3)
    pub_msg = b'\x10\x0F\x00\x04\x4D\x51\x54\x54\x04\x02\x00\x3C\x00\x03\x41\x42\x43\x30\x18\x00\x0F\x77\x70\x2D\x69\x6F\x74\x2F\x6F\x62\x64\x32\x2F\x72\x70\x6D\x00\x04\x38\x38\x38\x38\x1A'

    print(gprs_send(pub_msg))

И результат:

AT OK 
AT+CPIN? +CPIN: READY  OK  
AT+CFUN=1 OK
AT+CSTT="Internet","","" OK 
AT+CIICR
AT+CIFSR 10.241.141.152 
AT+CIPSTART="TCP","test.mosquitto.org","1883" OK 
AT+CIPSEND > 
b'\x10\x0f\x00\x04MQTT\x04\x02\x00<\x00\x03ABC0\x18\x00\x0fwp-iot/obd2/rpm\x00\x048888\x1a\r'

На стороне подписчика отображается только это, но сообщение от Издателя не отображается (Connected with result code 0 появляется после публикации сообщения) :

Connecting to broker..
Connected with result code 0

Кто-нибудь знаком с этим делом? Любая помощь будет оценена. Спасибо.

...