×

使用分组无线电从500m外发送秘密消息

消耗积分:0 | 格式:zip | 大小:0.15 MB | 2022-11-24

张虎豹

分享资料个

描述

理念

对某些无线网络/协议的依赖可能会给项目增加大量成本,并限制它们的距离。WiFi 和蓝牙都使用 2.4GHz 频段,这将它们限制在距离接入点约 50-60 米的范围内。如果您只想在两点之间发送简单的消息,这可能是有害的。此外,其他协议没有内置加密标准,这会使消息容易被窥探。

该设备解决了这些问题。通过使用 RFM69 无线电模块,可以将消息发送到 500 米以外,同时还可以使用 AES-128 密码进行加密。

 
 
 
pYYBAGN-uBeAeQc0AACsZXtDeWQ694.png
 
1 / 2
 

硬件

构建这个项目所需的硬件非常简单,由三个主要组件组成:一个带有 RFM69 分组无线电的 Adafruit Feather M0、一个 128 x 64 像素的 OLED 显示器和一个模拟操纵杆。从这些项目中,可以创建一对相同的设备并用于来回传递消息。整个东西都放在一个迷你面包板上,可以很容易地适应 PCB 格式。

接线和设置

OLED 屏幕在引脚 D20 (SDA) 和 D21 (SCL) 上连接到 Feather 的 I2C 总线,这使得添加变得简单。操纵杆的两个轴分别连接到 X 和 Y 轴的模拟 0 和模拟 1 引脚。它读取一个介于 0 和其模拟分辨率之间的值,并将其转换为介于 -1 和 1 之间的数字。最后,三个瞬时按钮开关连接到数字引脚 5、6 和 9,它们控制诸如绘图、配对和发送消息。

Adafruit Feather 板没有 PCB 天线,因此您必须将其焊接到背面的引脚上。由于 EM 频率与天线的长度相关,因此您需要在 7.8 厘米长的电线上焊接 915MHz 型号。

软件概述

我编写的软件在开机时会经过几个步骤,然后进入一个 while 循环,不断检查几件事并执行相应的操作。有三个不同的类来处理这个问题:RadioComms 类、InputManager 类和 Display 类。使用封装大大简化和清理了开发过程,而不是使用一个单一的 ino 文件。

pYYBAGN-uCSAE2x1AAAsfFai7s4563.png
 

连接

当设备首次启动时,它不知道自己的地址或需要连接到哪个其他地址。这样做是为了简化编程并允许两个以上可能在未来一起工作。有一个板载按钮可以在广播数据包的发送者和接受潜在连接的接收者之间进行选择。首先,两个设备都为自己分配一个介于 0 到 50 之间的随机 ID,这使得它们相同的概率约为 2%。这些可能性很小,因此如果两个匹配,代码无法重新分配 ID,尽管它可以更改。然后发送者去向每个ID发送一个测试包,直到它得到响应,从而使接收者与包发送者的ID绑定,发送者与响应包发送者的ID绑定。他们两个都得救了,他们'

poYBAGN-uCaAZfznAAEJEQDz1Cc151.png
 

发送和接收消息

程序进入主循环后,它会不断检查新的传入消息和来自操纵杆的输入。消息使用位封装(因为显示为黑色或白色)以二维数组编码,这使得消息的大小为原来的 1/8。如果有新消息可用,程序会获取该消息并将其放入结构内的缓冲区中,然后在其中显示。

pYYBAGN-uCqAWKcVAADFu_WlGa8578.png
 

反之,按下发送按钮将导致当前屏幕缓冲区被复制到一个数据包中。接下来,数据包被发送到目标地址以进行传播和显示。

显示器

对于显示器,我选择了 DFRobot 的 128 x 64 OLED 屏幕。它使用简单,并具有 SSD1306 驱动程序,使其与 Adafruit SSD1306 和 Adafruit GFX 库兼容。Display 类包含一个 OLED 对象,并通过显示某些屏幕(在枚举中定义)和显示消息来控制它。

poYBAGN-uCyAdRMpAAB46wT4aGc403.png

未来的改进

这个系统并不完美。我想添加同时支持多个连接的功能,并列出潜在的发送者和接收者。

 

 


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !