随着印度的全面封锁,包括邮件服务在内的一切都已关闭。没有新的 PCB 项目,没有新的组件,什么都没有!因此,为了克服无聊并让自己忙碌起来,我决定用家里已有的零件制作一些东西。我开始从一堆电子垃圾中搜索,发现一个破旧的模拟万用表。我从中挽救了“仪表运动”,并决定显示某种信息,但不知道具体是什么。首先,我想展示 COVID-19 统计数据,但互联网上已经有很多更好的项目。此外,数据会在几个小时后更新,仪表的静止指针会很无聊。我想要快速变化的数据,每秒都在变化。我在 Instagram 上征求建议,我的一位追随者回复了 Internet Speedometer。
在本教程中,我将向您展示如何使用 SNMP 从我的 WiFi 路由器中获取数据,并在仪表上显示上传和下载速度。
让我们开始吧!
和往常一样,在开始这个项目之前,我在互联网上做了一些研究。我发现了一些与这个主题相关的项目。它们有两种。一种通过测量 WiFi 信号的“强度”来显示互联网速度的方法。我不是网络专家,但这听起来不对。其他人测量延迟并将速度分类为慢、中或快。延迟是发送请求和获得响应之间的时间延迟,因此它不能代表互联网速度的实际表现。我们可以称之为网络响应速度!然后是一些合法的项目,它们测量下载一些数据所需的时间,并据此计算互联网速度。
但正是在这个项目(由Alistair 编写)中,我了解了简单网络管理协议或 SNMP。使用 SNMP,我们可以与 WiFi 路由器通信并直接从中获取所需的数据。容易,对吧?其实,不!因为不同型号的 WiFi 路由器使用有不同的设置,需要大量的反复试验才能最终得到输出。不要害怕。我将简要解释我对 SNMP 的了解以及在接下来的步骤中遇到的困难。
所以计划是使用NodeMCU连接WiFi路由器。这些是获得最终输出的步骤:
我将使用 DAC 或数模转换器来控制仪表。
1x NodeMCU
1x 模拟仪表运动
1x MPU4725 DAC
1x 单刀双掷开关
1x 10k 电位器
1x 电阻
注意:跳转到第 7 步进行实际构建!
如果您已经知道仪表的满量程偏转电流,请跳过此步骤。我的仪表没有提到它,所以我不得不计算。但首先,让我们快速了解一下这种运动是如何运作的。它由一个悬挂在磁场中的线圈组成。当电流流过线圈时,根据法拉第定律,它会受到力。允许线圈在磁场中自由旋转,附在线圈上的指针也是如此。使指针在“刻度末端”移动的电流大小称为满刻度偏转电流。这也是必须允许流过线圈的最大电流。
还有很多事情要做,但这对于我们正在做的事情来说已经足够了。我们现在有了运动。它可以通过串联一个高电阻用作电压表,也可以通过并联一个小电阻用作电流表。我们将使用它作为电压表来显示与互联网速度成正比的电压。因此,我们需要计算要串联添加的电阻。为此,我们首先需要计算满量程偏转电流。
我们使用的 DAC 的输出电压范围为 0 到 VCC(由于 NodeMCU 为 3.3V)。这意味着当向仪表施加 3.3V 时,它应该指向刻度的末端。当施加 3.3V 电压时满量程偏转电流流过电路时,就会发生这种情况。使用欧姆定律,3.3/(满量程偏转电流)给出了串联插入的电阻值。
简单网络管理协议 (SNMP)是一种 Internet 标准协议,用于收集和组织有关 IP 网络上受管设备的信息,并用于修改该信息以更改设备行为。通常支持 SNMP 的设备包括电缆调制解调器、路由器、交换机、服务器、工作站、打印机等。对于这个构建,我们将使用 SNMP 与我们的 WiFi 路由器通信并获取所需的数据。
但首先,我们需要向路由器发送一个称为“GET 请求”的请求,其中提及我们想要的数据的详细信息。GET 请求格式如图所示。该请求由多个部分组成。我已经突出显示了您可能想要更改的字节。
请注意,一切都是十六进制的。
SNMP 消息- 就我而言,整个消息的长度为 40(灰色),转换为十六进制时为 0x28。
SNMP 社区字符串- 值“PUBLIC”以十六进制写为“70 75 62 6C 69 63”,长度为 6(黄色)。
SNMP PDU 类型- 在我的例子中,消息的长度是 27(蓝色),即 0x1B。
Varbind 列表类型- 在我的例子中,消息的长度是 16(绿色),即 0x10。
Varbind 类型- 在我的例子中,消息的长度是 14(粉红色),即 0x0E。
对象标识符-
如前所述,支持 SNMP 的网络设备(例如路由器、交换机等)将系统状态、可用性和性能信息作为对象维护一个数据库,由 OID 标识。您需要为上传和下载数据包识别路由器的 OID。可以使用像这样的免费MIB 浏览器来完成。
输入地址为192.168.1.1 ,OID 为.1.3.6.1.2.1.2.2.1.10.x (ifInOctets) 或.1.3.6.1.2.1.2.2.1.16.x。(ifOutOctets) 。选择获取操作并单击执行。您应该会看到 OID 及其值和类型。
就我而言,消息的长度是 10(红色),即 0x0A。将值替换为 OID。在这种情况下,'2B 06 01 02 01 02 02 01 10 10'
而已!您的请求消息已准备就绪。保持其余字节不变。
在路由器上打开 SNMP:
您可以跳过此步骤,但最好知道您是否需要进行一些故障排除。
上传代码并运行后,您可以通过串行监视器查看响应。它应该如图所示。您需要查找一些我已突出显示的字节。
从0开始,
第 15 个字节告诉 PDU 类型 - 0xA2 表示它是一个 GetResponse。
第 48 个字节告诉数据类型 - 0x41 表示数据类型是 Counter 。
第 49 个字节表示数据的长度 - 0x04 表示数据长度为 4 个字节。
字节 50、51、52、53 包含数据。
微控制器是不直接了解模拟电压的数字设备。我正在使用一个需要可变电压作为输入的模拟仪表。但微控制器只能输出高电平(NodeMCU 为 3.3V)和低电平(0V)。现在你可能会说为什么不只使用 PWM。它不起作用,因为仪表只会显示平均值。
我正在使用 MCP4725 DAC 来获得可变电压。它是一个 12 位 DAC,简单来说,它将 0 到 3.3V 分成 4096 (= 2^12) 个部分。分辨率为 3.3/4096 = 0.8056mV。也就是说0对应0V,1对应0.8056mV,2对应1.6112mV,......,4095对应3.3V。
互联网速度将从“0 到 7 mbps”“映射”到“0 到 4095”,然后将该值提供给 DAC 以输出与互联网速度成正比的电压。
连接非常简单。示意图已附在此处。
我设计并打印了秤。上一个是下载速度,下一个是上传速度。我把新秤粘在旧秤上。
我从万用表中删除了所有旧的东西,我把所有东西都塞进了里面。这是一个紧身。我不得不在前面钻一个孔来连接用于在上传和下载速度之间进行选择的拨动开关。
代码已附在此处。下载并在 Arduino IDE 中打开它。从 Adafruit安装MCP4725 库。
上传前:
点击上传!
启动它,享受在网上冲浪时观看针头跳舞的乐趣!
谢谢你坚持到最后。希望你们都喜欢这个项目,并在今天学到了一些新东西。如果你为自己做一个,请告诉我。订阅我的YouTube 频道了解更多此类项目。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !