
如何设置STM32 LoRa发现工具包,从多传感器板获取数据并发送到物联网。 ![]() 项目中使用的东西 硬件组件 STM32 LoRa Discovery Kit (B-L072Z-LRWAN1) ×1 STM32L0 Discovery kit LoRa,低功耗无线网络 意法半导体X-NUCLEO-IKS01A1 ×1 用于STM32核子的运动MEMS和环境传感器扩展板 Laird - Sentrius RG1XX LoRa网关 ×1 Sentrius RG1XX LoRa启用网关+ wi - fi /蓝牙/以太网 软件应用和在线服务 Keil - uVision 5 MDK单片机开发工具包 意法半导体STM32Cube(I-CUBE-LRWAN) STM32Cube (UM2073) LoRaWAN软件扩展 介绍 这个项目是为了提出一个完整的LoRa解决方案。 这是完整工作坊的第二部分,内容包括: 1 -建立Laird Sentrius RG1xxLoRa网关 2 -使用LoRa和STM32进行环境感知 3 -将STM32 LoRa发现包连接到AWS物联网 为开始本项目,我假设您已经完成了车间的第一部分,已经设置了网关,并在网络上运行了一个应用程序。 在这一部分,我们将为STM32 LoRa Discovery kit编写带有核心展开的程序,以获取传感器数据,连接到网关并发送到Things Network。 1)在物联网上创建设备 在Things网络上访问您的应用程序 ![]() 选择设备并单击Register Device ![]() 创建一个设备ID来识别网络上的设备。在设备EUI上,点击random按钮生成,然后点击Register。 ![]() 该设备是在网络上创建的。激活方法默认为OTAA,单击Settings更改。 ![]() 选择激活方法ABP和禁止帧计数器检查设备地址,将自动生成网络会话密钥和App会话密钥。单击Save。 ![]() 2)配置STM32 LoRa发现包 现在,我们将STM32 LoRa Discovery Kit B-L072Z-LRWAN1和Nucleo Expansion (X-NUCLEO-IKS01A1)作为节点设备进行编程。打开I-CUBE-LRWAN并启动Keil uVision。 在Keil上,点击Project > Open> Open Project…,选择未压缩的I-CUBE-LRWAN中的项目 ![]() 原先的演示最初设置在欧洲频率868MHz,因此需要修改它以在915MHz频率上工作。 右键单击项目并选择“目标‘mlm32l07x01’选项……” ![]() 选择“C / c++”选项卡,将“REGION_EU868”更改为“REGION_US915”,并添加定义“X_NUCLEO_IKS01A1”。单击OK继续。 ![]() 右击“Drivers/BSP/X_NUCLEO_IKS01A2”组>选项… ![]() 取消勾选“包含在目标构建中”。单击Ok。 ![]() 然后右键单击“Drivers/BSP/X_NUCLEO_IKS01A1”组的>选项… ![]() 检查“包含在目标构建中”。单击Ok。 ![]() 打开文件“commission .h” ![]() 在第77行更改以下代码: #defineOVER_THE_AIR_ACTIVATION 0 89行: #defineSTATIC_DEVICE_EUI 1 ![]() 和122行: #defineSTATIC_DEVICE_ADDRESS 1 ![]() 在Things Network上打开设备的“设备概述”。使用这些信息可以更改第96、102、107、128、133和138行,如下图所示。 ![]() ![]() ![]() 3)修改硬件应用 默认情况下,应用程序是在低功耗模式下配置的,发送消息的时间间隔很长,并且不允许通过USB接口进行调试。为了使我们的演示更有效,我们将停用低功耗模式。 打开hw_conf.h文件: ![]() 从第129、133和136行删除评论: ![]() 您的应用程序已经完成!将您的电路板连接到计算机,保存所有修改文件、构建和下载代码。完成后复位板。 ![]() 4)处理数据 您必须在Things网络上接收十六进制的负载。让我们处理这些数据以便更好地理解。 访问TTN上的应用程序并选择有效负载格式。输入以下代码: functionDecoder(bytes, port) { // Decode an uplinkmessage from a buffer // (array) of bytes toan object of fields. var decoded = {}; // Decode bytes to int var batteryInt = bytes[7] var humidityInt = (bytes[5] << 8) | bytes[6]; var pressureInt = (bytes[1] << 8) | bytes[2]; var temperatureInt = (bytes[3] << 8) | bytes[4]; // Decode int to float decoded.battery = (batteryInt*100)/254 // Battery in % decoded.humidity = humidityInt / 10; // Humidity in % decoded.pressure = pressureInt / 10; // Pressue in hPa decoded.temperature = temperatureInt / 100; // Temperaturein °C return decoded; } ![]() 保存并转到Data: ![]() 恭喜你!您的设备已连接并接收环境数据! 按照研讨会的下一部分将数据转发到云web服务。 |