RaspberryPi(二) SIM7020C NB-IoT MQTT通信 树莓派4B

主处理器:树莓派4B
服务器:阿里云轻量级服务器
MQTT代理服务器:
apollo 具体搭建链接:https://blog.csdn.net/ddxxii/article/details/80890293?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158757431019725211921004%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=158757431019725211921004&biz_id=0&utm_source=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v25-1

使用模块:微雪电子SIM7020C
这款为NB-IoT模块,但官方文档和微雪示例十分不友好,踩了很多坑
mqtt-apollo操作界面:Eclipse paho
具体AT指令

以上为微雪示例
以上为微雪示例,在我的案例中,需要更改第二条,第四条
AT+CMQCON=0,3,“myclient”,6000,0,0,“admin”,“password” 需要加入admin和password,不加的话无法连接。

AT+CMQPUB=0,“test”,0,0,0,3,“111”
这一条需要注意字符长度和前面设置的长度要一致才能发送,官方文档有说明在这里插入图片描述
在编程时,可以先判断数据长度,之后再发送,这个可以实现数据的连续发送。
具体程序如下:

import struct, os
import serial
import time
import re
import sys
longitude = "35.923212"
a = len(longitude)

print(a)
ser = serial.Serial("/dev/ttyUSB0",115200,timeout = 1)
def reboot():
        print("Waiting for module\n")
        time.sleep(1)
        comdata = ""
        ser.write(("AT\r\n").encode('utf-8'))
        while (comdata.find("OK")== -1):
                time.sleep(0.1)
                while (ser.inWaiting()>0):
                        comdata = ser.read(ser.inWaiting())
                        comdata = comdata.decode("ascii")
                        comdata = comdata.strip()
                        print(comdata)
                        if (comdata.find("ERROR")==-1):
                                continue
                       
        print("Sim7020c Start Succeed! \n")
        return

def connect_mqtt():
    print("connect new MQTT")
    time.sleep(1)
    comdata = ""
    ser.write("AT+CMQDISCON=0\r\n".encode('utf-8'))
    time.sleep(1)
    ser.write('AT+CMQNEW="182.92.56.252","61613",12000,100\r\n'.encode('utf-8'))
    while (comdata.find("OK")==-1):
                time.sleep(0.1)
                while (ser.inWaiting()>0):
                        comdata = ser.read(ser.inWaiting())
                        comdata = comdata.decode("ascii")
                        comdata = comdata.strip()
                        print(comdata)
def send_mqtt():
    comdata = ""
    ser.write('AT+CMQCON=0,3,"myclient",6000,0,0,"admin","password"\r\n'.encode('utf-8'))
    while (comdata.find("OK")==-1):
                time.sleep(0.1)
                while (ser.inWaiting()>0):
                        comdata = ser.read(ser.inWaiting())
                        comdata = comdata.decode("ascii")
                        comdata = comdata.strip()
                        print(comdata)
def send_topic():
    comdata = ""
    ser.write('AT+CMQPUB=0,"test",1,0,0,"{}","{}"\r\n'.format(a,longitude).encode('utf-8'))
    time.sleep(1)
    while (comdata.find("OK")==-1):
                time.sleep(0.1)
                while (ser.inWaiting()>0):
                        comdata = ser.read(ser.inWaiting())
                        comdata = comdata.decode("ascii")
                        comdata = comdata.strip()
                        print(comdata)                       
reboot()
connect_mqtt()
time.sleep(0.5)
send_mqtt()
time.sleep(0.5)
send_topic()

此为测试程序,仅供参考。
成功示例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
阿里云服务器:

在这里插入图片描述
至此,使用树莓派4B连接NB-IoT模块(SIM7020C)与MQTT服务器通信实现数据上传云端全部完成。
波特率在变,要改波特率!

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值