0

我正在使用 Sim808 GPS 模块发送经纬度并使用 MQTT 将其发送给订阅者。我按照教程从这里通过 Sim808 发布 MQTT 消息,但仍然没有运气。这是我的示例代码:

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

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'

Subscriber的一侧只显示这个,但来自Publisher的消息没有出现(Connected with result code 0在消息发布后出现):

Connecting to broker..
Connected with result code 0

有熟悉这个案子的吗?任何帮助,将不胜感激。谢谢你。

4

0 回答 0