- 命令行脚本和Python测试物联网中零配置网络协议集:通用即插即用UPnP协议,多播域名系统mDNS协议,域名系统服务发现DNS-SD协议和Web服务动态发现WS-Discovery协议。
- Arduino或STM32板使用C/C++利用物联网硬件调试端口:利用通用异步接收器-发送器UART和串行线调试SWD逻辑分析,使用开源在线调试工具与SMT32通讯获取硬件结构信息。Python和Arduino C 使用SPI和I2C方式获取硬件底层信息。
- 命令行脚本和 C 测试物联网硬件中固件:固件枚举,动态分析。
- Python物联网网络和短程无线电测试:使用Kali Linux 网络映射探针测试MQTT。测试短程无线电:RFID 系统,测试欺骗低功耗蓝牙设备。测试中程无线电:通过WiFi抓取凭证。测试远程无线电:利用抓取的LoRa流量。
无线电Python控制设备示例
LoRa
LoRa使用低功耗无线电通信,使用三种频率传输数据:433 MHz、868 MHz 和 915 MHz。 您应该使用哪个频率最终取决于您所在的国家(有时甚至是地区)。 我将使用 915 MHz 无线电,与使用 433 MHz 相比,没有额外的限制。
在测试过程中,我能够使用基本天线实现 215 米的范围,使用更先进的天线,您可以获得更大的范围 - 最终取决于您的环境。 如果天线之间有视线,则覆盖范围会更大。
射频
射频每天都在我们身边 — WiFi、无线鼠标/键盘、蓝牙、GPS 等等。 然而,根据应用(和所需的吞吐量),它们都以不同的频率运行。 LoRa 使用较低 UHF 频率的好处是,与 WiFi 或蓝牙相比,即使使用基本天线,我们也能获得相当好的覆盖范围。 然而,这样做的缺点是我们每个数据包可以发送的数据量非常有限。
由于 LoRa 不是直接通信协议,因此我们发送的任何数据都可以被范围内的其他无线电看到。 没有办法只将数据发送到特定的侦听器(除非您使用 LoRaWAN),因此我们在构建解决方案时,必须牢记这一点。 解决此问题的一种方法是对我们发送的数据进行加密,这样只有那些拥有加密密钥的人才能破译我们发送的内容,例如:
Encrypted: 240e805f37511b9ea82911de60775c623024a2730125f12805500b94
Decrypted: {"channel": 1, "message": "..."}
然而,并非所有微控制器都支持加密。 就我而言,却成为一个限制因素,因而从工作流程中删除了加密。 但这是我认为这是一种有趣的方法,并且保证没有第三方窥探。
LoRaWAN
LoRaWAN 是 LoRa 之上的网络协议。 节点连接到网关,网关充当桥梁,允许节点从整个网络发送/接收数据包,而不是仅在范围内发送/接收数据包。 如果您正在围绕 LoRa 构建整个智能家居或想要整合多个设备,那么使用 LoRaWAN 是正确的选择。 由于我想要的项目仅使用两个节点,因此我可以只使用 LoRa。
Python控制设备示例
为了打开仓库房门,我将连接到其中一根 RFM95射频模块。 对于我的仓库房门系统,我有一个硬连线按钮,可以按下它来打开。
在电源中继板的背面,我们可以焊接一个跳线垫,将信号线连接到模块上的特定引脚。然后我们要做的就是将该引脚的输出设置为高电平,以触发电源中继:
import board
import digitalio
import time
relay = digitalio.DigitalInOut(board.A0)
relay.direction = digitalio.Direction.OUTPUT
relay.value = True
time.sleep(0.1)
relay.value = False
为了跟踪货车的位置,我为另一台配备了 GPS模块。 它将通过 UART 与射频模块进行通信,并允许我们查看货车的位置、速度、高度以及更多信息(如果需要)。使此 GPS 模块使我们能够通过几个简短的命令轻松获取坐标。
我们可以像这样获取我们的位置:
import gps
import board
import busio
import time
uart = busio.UART(board.TX, board.RX, baudrate=9600, timeout=10)
gps = gps.GPS(uart, debug=False)
gps.send_command(b"PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0")
gps.send_command(b"PMTK220,1000")
last_print = time.monotonic()
while True:
current = time.monotonic()
gps.update()
if current - last_print >= 1.0:
last_print = current
if not gps.has_fix:
print("Waiting for GPS location fix...")
continue
print(f"GPS Location: {gps.latitude}, {gps.longitude}")
为了检查我们是否应该打开仓库门,货车的射频模块将使用 GPS 模块每秒获取其活动位置。 然后,它使用半正弦公式计算从其位置到触发区域的距离。 如果距离在 15 米以内,它会发出“开门”消息。 为了防止在我们离开社区时触发此消息,我们首先必须保持至少 200 米的距离才能“激活”触发区域。
发送指令
我的所有消息都包含以下字段:
字段 | 描述 |
---|---|
ID | 消息的伪随机唯一标识符 |
通道 | 通道消息 |
消息 | 指令ID |
目标 | 此消息是回复的目标消息 ID |
每当发送消息时,我们都会使用Python的struct库将数据打包成二进制数据。这使有效负载大小保持最小,同时仍然为我们提供了一种稍后解码消息的简单方法:
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!
内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!