..........接上一贴
三、无线接收机设计

无线接收机的主要功能是通过无线信道接收节点数据,将其转换为串口信号发送到后台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

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