毕设(六)——通过pico用NB模块传输测试

简介: 毕设(六)——通过pico用NB模块传输测试

一、使用串口助手的情况如下

二、代码

from machine import UART,Pin
import utime
#串口配置

uart1 = UART(0, baudrate=115200, tx=Pin(12), rx=Pin(13))


while True:
    uart1.write('AT+CREG?\r')
    while uart1.any() > 0:
        rxData_One = uart1.read()
        print(rxData_One)
    utime.sleep(1)

提个醒,这里波特率要设置成115200

嗯,返回成功,很开心

在每一次判断时候加个延时(之后看看能不能到ms秒吧)

from machine import UART,Pin
import utime
#串口配置

uart1 = UART(0, baudrate=115200, tx=Pin(12), rx=Pin(13))
number_part_flag = 0
msgid_part_flag = 0

while True:
    uart1.write('AT+CREG?\r')
    utime.sleep_ms(100)
    while uart1.any() > 0:
        rxData_One = uart1.read()
        str = rxData_One.decode('utf-8')
        while '+CREG: 0,2' in str:
            print("上网失败,再次尝试测试")
            utime.sleep_ms(100)
            uart1.write('AT+CREG?\r')
            while uart1.any() > 0:
                rxData_One = uart1.read()
                str = rxData_One.decode('utf-8')
        print("上网成功")
    utime.sleep_ms(500)
    while uart1.any() > 0:
        rxData_One = uart1.read()
    # 创建实例
    uart1.write('AT+MIPLCREATE\r')
    utime.sleep_ms(100)
    while uart1.any() > 0:
        rxData_two = uart1.read()
        str = rxData_two.decode('utf-8')
        if 'ERROR' in str:
            print("创建实例-失败")
        else:
            print("创建实例-成功")
    utime.sleep_ms(500)
    while uart1.any() > 0:
        rxData_One = uart1.read()
    # 创建对象
    uart1.write('AT+MIPLADDOBJ=0,3301,1,"1",7,1\r')
    utime.sleep_ms(100)
    while uart1.any() > 0:
        rxData_three = uart1.read()
        str = rxData_three.decode('utf-8')
        if 'ERROR' in str:
            print("创建对象-失败")
        else:
            print("创建对象-成功")
    utime.sleep_ms(500)
    while uart1.any() > 0:
        rxData_One = uart1.read()
    # 注册(循环等待,等到0,68719,1,3301,0,-1),提取68719这个位置的数
    uart1.write('AT+MIPLOPEN=0,30,120\r')
    utime.sleep_ms(100)
    while number_part_flag == 0:
        while uart1.any() > 0:
            rxData_four = uart1.read()
            rxData_four_str = rxData_four.decode('utf-8')
            # 检查是否存在 3301
            if '3301' in rxData_four_str:  
                print("响应中存在 3301.")
                comma_index = rxData_four_str.find(',') # 找到第一个逗号的位置
                second_comma_index = rxData_four_str.find(',', comma_index + 1) # 找到第二个逗号的位置
                third_comma_index = rxData_four_str.find(',', second_comma_index + 1)  # 找到第三个逗号的位置
                number_part = rxData_four_str[second_comma_index + 1: third_comma_index] # 提取出数字部分
                try: # 将提取出的部分转换成整数
                    number_one = int(number_part)
                    print("提取的第一次数字为:", number_one)
                    number_part_flag = 1
                except ValueError:
                    print("提取的第一次数字不是有效的整数。")
            else:
                print("响应中不存在 3301.")
    utime.sleep_ms(500)
    while uart1.any() > 0:
        rxData_One = uart1.read()
    # 发送观察结果
    uart1.write('AT+MIPLOBSERVERSP=0,%d,1\r' % (number_one))
    utime.sleep_ms(100)
    while msgid_part_flag == 0:
        while uart1.any() > 0:
            rxData_five = uart1.read()
            rxData_five_str = rxData_five.decode('utf-8')
            if '3301' in rxData_five_str:
                first_comma_index = rxData_five_str.find(',') # 找到第一个逗号的位置
                second_comma_index = rxData_five_str.find(',', first_comma_index + 1) # 找到第二个逗号的位置
                number_part = rxData_five_str[first_comma_index + 1: second_comma_index] # 提取出数字部分
                # 将提取出的部分转换成整数
                try:
                    number_two = int(number_part)
                    print("提取的第二次数字为:", number_two)
                    msgid_part_flag = 1
                except ValueError:
                    print("提取的第二次数字不是有效的整数。")
            else:
                print("失败")
    utime.sleep_ms(500)
    while uart1.any() > 0:
        rxData_One = uart1.read()
    # 发送对象属性
    uart1.write('AT+MIPLDISCOVERRSP=0,%d,1,29,"5700;5601;5602;5603;5604;5701"\r' % (number_two))
    utime.sleep_ms(100)
    while uart1.any() > 0:
        rxData_One = uart1.read()
        
    # 通知属性变化(数字)
    uart1.write('AT+MIPLNOTIFY=0,%d,3301,0,5700,4,4,17.5,0,0,116\r' % (number_one))
    utime.sleep_ms(100)
    while uart1.any() > 0:
        rxData_One = uart1.read()
        rxData_One_str = rxData_One.decode('utf-8')
        if '0,26,116' in rxData_One_str:
            print("修改成功")
        else:
            print("修改失败")
    utime.sleep_ms(100)
    while uart1.any() > 0:
        rxData_One = uart1.read()
#     uart1.write('AT+MIPLNOTIFY=0,%d,3301,0,5601,4,4,25.5,0,0,116\r' % (number_one))
#     uart1.write('AT+MIPLNOTIFY=0,%d,3301,0,5602,4,4,22.5,0,0,116\r' % (number_one))
#     uart1.write('AT+MIPLNOTIFY=0,%d,3301,0,5603,4,4,22.5,0,0,116\r' % (number_one))
    
    # 通知属性变化(文本)
    uart1.write('AT+MIPLNOTIFY=0,%d,3301,0,5701,1,4,29cm,0,0,116\r' % (number_one))
    utime.sleep_ms(100)
    while uart1.any() > 0:
        rxData_One = uart1.read()
        rxData_One_str = rxData_One.decode('utf-8')
        if '0,26,116' in rxData_One_str:
            print("修改成功")
        else:
            print("修改失败")


        

三、对于IPSO的补充

AT+MIPLADDOBJ=0,3301,1,“1”,7,1\r

AT+MIPLADDOBJ=:这是一条AT命令的前缀,用于与模块进行通信。在这个命令中,MIPLADDOBJ表示添加一个新的对象。

0:这是对象实例的ID,指定了新对象的实例ID。在这里,设定为0,表示对象实例的ID为0。

3301:这是新对象的Object ID,指定了新对象的类型。在这里,Object ID为3301,可能对应着某种传感器或者设备状态。

1:这是新对象实例的属性数量,指定了新对象实例包含的属性数量。在这里,属性数量为1。

“1”:这是新对象实例的第一个属性的资源ID。在这个命令中,资源ID被指定为1。

7:这是新对象实例的第一个属性的资源类型,指定了资源的数据类型。在这里,资源类型为7,可能表示float类型的数据。

1:这是新对象实例的第一个属性的资源权限,指定了资源的读写权限。在这里,权限为1,可能表示该资源可读可写。

综上所述,这条命令的作用是向LwM2M设备添加一个Object ID为3301的新对象实例,该对象实例包含一个资源,资源ID为1,资源类型为float,且该资源可读可写。


AT+MIPLOPEN=0,30,120\r

AT+MIPLOPEN=:这是一条AT命令的前缀,用于与模块进行通信。在这个命令中,MIPLOPEN表示打开LwM2M客户端。

0:这是LwM2M客户端的实例ID,用于标识不同的LwM2M客户端实例。在这里,实例ID为0,表示是第一个实例。

30:这是连接的持续时间,以秒为单位。在这里,指定的持续时间为30秒,表示客户端将在30秒后关闭连接。

120:这是连接的空闲超时时间,以秒为单位。在这里,指定的空闲超时时间为120秒,表示如果在120秒内没有数据交换,连接将被关闭。

综上所述,这条命令的作用是打开LwM2M客户端,设置连接的持续时间为30秒,并设置空闲超时时间为120秒。


AT+MIPLDISCOVERRSP=0,3184,1,19,“5700;5601;5602;5603”\r

这个命令是针对LwM2M设备的,用于发送LwM2M服务器的发现响应。让我解释一下命令的各个部分:

AT+MIPLDISCOVERRSP=:这是一条AT命令的前缀,用于与模块进行通信。在这个命令中,MIPLDISCOVERRSP表示发送LwM2M服务器的发现响应。

0:这是LwM2M客户端实例的ID,用于标识客户端的不同实例。在这里,实例ID为0,表示第一个实例。

3184:这是发现请求的消息ID,用于标识发现请求的消息。在这里,消息ID为3184。

1:这是响应代码,指示了发现请求的结果。在这里,代码为1,可能表示成功。

19:这是所发现的对象实例的数量,表示在发现响应中包含的对象实例数量。在这里,数量为19。

“5700;5601;5602;5603”:这是所发现的对象实例的信息,每个实例的信息包括对象ID和对象实例ID。在这里,列出了4个对象ID,分别为5700、5601、5602和5603。

综上所述,这条命令的作用是向LwM2M服务器发送发现响应,回复客户端支持的对象实例,并提供这些对象实例的详细信息。

上面这个19是表示5700;5601;5602;5603,这个是19个字符,如果像我用到了6个属性5700;5601;5602;5603;5604;5701

AT+MIPLNOTIFY=0,68719,3301,0,5601,4,4,22.5,0,0,116\r

这个命令是用于发送LwM2M通知的,让我解释一下各个部分的含义:

AT+MIPLNOTIFY=:这是一条AT命令的前缀,用于与模块进行通信。在这个命令中,MIPLNOTIFY表示发送LwM2M通知。

0:这是LwM2M客户端实例的ID,用于标识客户端的不同实例。在这里,实例ID为0,表示第一个实例。

68719:这是通知的消息ID,用于标识通知消息。在这里,消息ID为68719。

3301:这是通知所涉及的Object ID,表示通知涉及的对象。

0:这是通知所涉及的Object Instance ID,表示通知涉及的对象实例。

5601:这是通知所涉及的资源ID,表示通知涉及的资源。

4:这是资源的数据类型,表示资源的数据类型为float。

4:这是资源的大小,表示资源的大小为4字节。

22.5:这是通知的值,表示资源的值为22.5。

0:这是资源的最小值,表示资源的最小值为0。

0:这是资源的最大值,表示资源的最大值为0。

116:这是资源的单位,表示资源的单位为116。

综上所述,这条命令的作用是向LwM2M服务器发送通知,通知服务器某个对象实例的某个资源的状态或值发生了变化,具体变化为资源ID为5601的资源的值变为22.5,资源的数据类型为float,大小为4字节,单位为116。

四、注意

这个NB模块上电之后,需要1-3秒的反应时间,这个时候,可以理解为还没上网

调了一个小时,搞定!

我的划分是,5700和5601放GPS的经纬度,5602,5603,5604放陀螺仪,5701就放字符串化后的超声波数据(在可视化界面进行文本显示吧)

发出信息后,等100ms,再查询缓冲区。

在下个命令来之前,把缓存区东西都读出来

目录
打赏
0
0
0
0
36
分享
相关文章
【硬件测试】基于FPGA的1024QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的1024QAM基带通信系统的硬件测试版本,包含testbench、高斯信道模块和误码率统计模块。系统新增ila在线数据采集和vio在线SNR设置模块,支持不同SNR条件下的性能测试。1024QAM调制将10比特映射到复平面上的1024个星座点之一,实现高效数据传输。硬件测试结果表明,在SNR=32dB和40dB时,系统表现出良好的性能。Verilog核心程序展示了各模块的连接与功能实现。
43 7
【硬件测试】基于FPGA的MSK调制解调系统系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文基于FPGA实现MSK调制解调系统,采用Verilog开发,包含同步模块、高斯信道模拟、误码率统计等功能。相比仿真版本,新增ILA数据采集与VIO在线SNR设置模块。通过硬件测试验证,展示不同SNR(如10dB和16dB)下的性能表现。研究聚焦软件无线电领域,优化算法复杂度以适应硬件限制,利用MSK恒定包络、相位连续等特性提升频谱效率。核心代码实现信号生成、调制解调、滤波及误码统计,提供完整的硬件设计与分析方案。
51 19
【硬件测试】基于FPGA的4ASK调制解调通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的4ASK调制解调系统的硬件测试版本,该系统包括testbench、高斯信道模块和误码率统计模块,并新增了ILA在线数据采集和VIO在线SNR设置功能。通过VIO设置不同SNR(如15dB和25dB),实现了对系统性能的实时监测与调整。4ASK是一种通过改变载波幅度表示数据的数字调制方式,适用于多种通信场景。FPGA平台的高效性和灵活性使其成为构建高性能通信系统的理想选择。
65 17
【硬件测试】基于FPGA的16QAM调制+软解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文基于之前开发的16QAM调制与软解调系统,增加了硬件测试功能。该系统包含FPGA实现的16QAM调制、软解调、高斯信道、误码率统计模块,并新增了ILA在线数据采集和VIO在线SNR设置模块。通过硬件测试,验证了不同SNR条件下的系统性能。16QAM软解调通过比较接收信号采样值与16个调制点的距离,选择最近的调制点来恢复原始数据。核心Verilog代码实现了整个系统的功能,包括SNR设置、信号处理及误码率统计。硬件测试结果表明系统在不同SNR下表现良好,详细操作步骤可参考配套视频。
49 13
【硬件测试】基于FPGA的4FSK调制解调通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文基于之前的文章《基于FPGA的4FSK调制解调系统》,增加了ILA在线数据采集模块和VIO在线SNR设置模块,实现了硬件测试版本。通过VIO设置不同SNR(如10dB和20dB),并展示了ILA采集的数据结果。四频移键控(4FSK)是一种数字调制方法,利用四个不同频率传输二进制数据,具有较高的频带利用率和抗干扰性能。输入的二进制数据分为两组,每组两个比特,对应四个频率f1、f2、f3、f4,分别代表二进制组合00、01、10、11。调制过程中选择相应频率输出,并进行幅度调制以增强抗干扰能力。接收端通过带通滤波器提取信号并还原为原始二进制数据。
34 7
【硬件测试】基于FPGA的256QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的256QAM基带通信系统的硬件测试版本,包含testbench、高斯信道模块和误码率统计模块。系统新增ila在线数据采集和vio在线SNR设置模块,支持不同信噪比(如30dB和40dB)的仿真测试,并提供配套操作视频。256QAM调制方案每个符号携带8比特信息,通过复数值星座图映射实现高效传输。Verilog代码展示了核心模块设计,包括SNR设置、数据处理和ILA测试分析,确保系统在实际硬件环境中的稳定性和性能。
22 2
【硬件测试】基于FPGA的16QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的16QAM基带通信系统硬件测试版本。该系统在仿真基础上增加了ILA在线数据采集和VIO在线SNR设置模块,支持不同信噪比(如15dB、25dB)的测试。16QAM是一种正交幅度调制方式,通过两路4ASK信号叠加实现,每个符号包含4比特信息。系统采用正交调幅法生成16QAM信号,并通过DAC转换为模拟信号。解调时使用正交相干解调,经低通滤波器恢复电平信号。开发板内完成发射与接收,无需定时同步模块。代码可移植至其他开发板,具体步骤见配套文档。
32 2
【硬件测试】基于FPGA的2ASK调制解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍基于FPGA的2ASK调制解调系统,涵盖仿真效果、理论知识、Verilog核心程序及开发板使用说明。系统包含testbench、高斯信道模块和误码率统计模块,支持不同SNR设置。硬件测试版本增加了ILA在线数据采集和VIO在线SNR设置功能。2ASK调制通过改变载波振幅传输二进制信号,FPGA实现包括系统设计、Verilog编码、仿真测试和硬件部署。详细操作步骤见配套视频,代码适用于多种开发板,提供移植方法。
40 1
【硬件测试】基于FPGA的64QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的64QAM基带通信系统的硬件测试版本,包含testbench、高斯信道模块和误码率统计模块。系统新增ila在线数据采集模块和vio在线SNR设置模块,支持不同SNR条件下的仿真与测试。通过设置SNR为25dB和30dB进行测试,验证了系统的可行性和性能。此外,本文详细阐述了64QAM调制解调的工作原理,包括信号生成、调制、解调及误码率测试等环节,并提供了Verilog核心程序代码。
22 0
【硬件测试】基于FPGA的16psk调制解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的16PSK调制解调系统的硬件测试版本。系统在原有仿真基础上增加了ILA在线数据采集和VIO在线SNR设置模块,支持不同信噪比下的性能测试。16PSK通过改变载波相位传输4比特信息,广泛应用于高速数据传输。硬件测试操作详见配套视频。开发板使用及移植方法也一并提供。
54 6

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等