• 2
    回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

【 2025 DigiKey 杯】星型组网的低功耗无线传感系统(二)

..........接上一贴

三、无线接收机设计

      无线接收机的主要功能是通过无线信道接收节点数据,将其转换为串口信号发送到后台PC进行分析处理及数据展示。在接收机中不用考虑功耗问题。因此其主控MCU选用STM32F103C8T6,射频芯片同样选用nRF24L01p。

      在无线接收机中不需考虑功耗,但需要考虑通信距离,因此将其接收灵敏度配置为最高,从上文可知其接收灵敏度在250kbps 速率下,可达 -94dBm。配置代码如下

SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x08);// 使能接收通道3

           SPI_RW_Reg(WRITE_REG + RF_CH, 0x00); // 选择射频通道0x40

              SPI_RW_Reg(WRITE_REG + SETUP_AW, 0x03);

SPI_RW_Reg(WRITE_REG + DYNPD, 0x08);

SPI_RW_Reg(WRITE_REG + FEATURE, 0x04);

           SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x26); // 数据传输率250Kbps,低噪声放大器增益-94dBm

           SPI_RW_Reg(WRITE_REG + CONFIG, 0x3f); // CRC使能,16位CRC校验,上电,接收模式

四、PC端软件

      接收机接收到大量节点数据后通过串口转发到PC,在PC端写了一个简单的软件,进行数据展示,并将数据记录在HEX.txt文件中。界面布置如下:

      程序流程图如下所示,主要功能是串口接收数据,解析数据,以图线展示数据,记录数据到文本文件。

 

      绘图程序段,接收到数据报文后将温度和湿度数据取出来,换算成十进制后在右侧绘图区域描点绘图。因测试目标为常规环境的温湿度,故温度显示范围为0~50℃,湿度显示范围为0~100%RH。如代码所示,温度曲线为红色,湿度曲线为蓝色。

        If temperature_x >= 9990 Or humidity_x >= 9990 Then

            temperature_x = 0

            humidity_x = 0

            Picture1.Cls        '清除图片,重新画图

        End If   

        temperature_x = temperature_x + 10

        humidity_x = humidity_x + 10

        Picture1.Circle (temperature_x, t_temp * 180), 10, vbRed '温度描点

        Picture1.Circle (humidity_x, h_temp * 90), 10, vbBlue '湿度描点

 

在文本框Text22中显示接收数据报文数据

 Text22.SelStart = Len(Text22.Text)

 Text22.Text = Text22.Text + vbCrLf

 Text22.Text = Text22.Text & "Receive:"

 Text22.SelStart = Len(Text22.Text)

         For i = 6 To 16

               If Len(Hex(recdata_buffer(i))) = 1 Then

                      rec_temp = "0" & Hex(recdata_buffer(i))

               ElseIf Len(Hex(recdata_buffer(i))) = 2 Then

                      rec_temp = Hex(recdata_buffer(i))

               End If

            Text22.Text = Text22.Text & rec_temp + Space(1)

            Text22.SelStart = Len(Text22.Text)

         Next

         Text22.Text = Text22.Text + vbCrLf

Text22.Text = Text22.Text & "Address:" & H_add & Space(1) & L_add & Space(2)  & "Temperature:" & t_temp & "℃" & Space(2) & "Humidity:" & h_temp & "%RH" & Space(2) & "Votage:" & v_temp & "V" & Space(2) & "Time:" & Now

         Text22.SelLength = 1

        Text22.SelStart = Len(Text22.Text)

        Length_1 = Len(Text22.Text)

End If

End If 

      将数据写入名为HEX.txt的文本文件,该文件存储位置与程序存储位置相同。写入内容是在文本尾部追加。每条数据报文占用一行,逐行追加。

If Length_1 > Length_0 Then

    Text22.SelStart = Length_0 'A.Length_0为写入新数据前文本长度

    Text22.SelLength = Length_1 - Length_0 'B.两者的差为新数据长度

    Dim FileNumber

    FileNumber = FreeFile

       Open App.Path & "/HEX.txt" For Append As #1 '文件保存位置与程序一致

       Print #1, Text22.SelText '将上边A,B两式计算得到的新数据写入文本

       Close #1

   Length_0 = 0

   Length_1 = 0

End If

未完待续......................

全部回复(2)
正序查看
倒序查看
fzwwj95
LV.7
2
03-24 17:15

【DigiKey杯点评】第二篇把接收机部分接上之后,整套系统的闭环感就出来了。节点强调低功耗,接收端强调接收灵敏度和距离,这种角色划分很合理,也说明作者对无线系统不是停留在单点模块层面,而是在按整网去思考。

0
回复
only one
LV.8
3
03-25 23:59

在无线接收机中不需考虑功耗,但需要考虑通信距离,因此将其接收灵敏度配置为最高,从上文可知其接收灵敏度在250kbps 速率下,可达 -94dBm,速度这么快

0
回复