本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

如使用 Arduino 将 Modbus 数据发送到 LoraWAN

发布时间:2021-06-16
分享到:

如使用 Arduino 将 Modbus 数据发送到 LoraWAN

发布时间:2021-06-16
分享到:

Bastwan板是一款基于LoRa管理的低功耗工具,除了兼容Arduino IDE之外,其羽毛格式的呈现使其成为项目开发的绝佳选择。

Bastwan板:

  • RAK4260处理器
  • 32位电源
  • micro USB接口,方便编程
  • 3.3V逻辑操作
  • 256K FLASH,32K内存

 RS485 如何工作?

RS485 是业界广泛使用的通信标准,可以在 Bastwan 等处理器中使用它来读取或写入其他设备。

Wing RS485 是 Bastwan 板的屏蔽,有助于与通过 Modbus 协议管理的设备进行通信,这通过其通信引脚(Re、De、Di、Ro)工作。一般配合Modbus通讯协议使用

引脚说明:

  • RO :接收器(RX)
  • DI   : 发射器 (TX)
  • RE  :数字引脚(对应于 Bastwan 引脚 10)
  • DE  : 数字引脚(对应于 Bastwan 引脚 11)

什么是Modbus?

Modbus 是一种基于客户端/服务器架构的通信协议,旨在与可编程逻辑控制器 (PLC) 配合使用。

Modbus 允许控制设备网络并将结果传送到计算机。

此协议可与 RS485 或 RS232 配合使用。

C4E Modbus 传感器:

  • C4E 传感器是一种温度和电导率传感器
  • 使用 Modbus 协议来提供读数
  • 能够在 5v-12v 的电压范围内工作
  • 有 4 个电极(2 个图形和 2 个铂金)来感应电导率水平
  • 能够感应范围为 -10 ° - 60 ° 和 5 个压力棒

对于该项目,将仅使用引脚 1 (V)、3 (GND)、4 (B) 和 5 (A)。

连接:

将 Wing 安装在 Bastwan 板上,然后识别配置的引脚,并连接传感器;

只需要四个连接:

  • 5-12V :是传感器电源电压(在这种情况下,建议连接 Bastwan 卡的 VBUS)
  • GND :是电路的接地引脚(Bastwan 也有引脚)
  • B : 它将连接到 Wing RS485 Modbus 的同名 (B) 输出
  • A : 它将连接到 Wing RS485 Modbus 的同名 (A) 输出

知道 De 和 Re 必须转到启用它们的数字引脚,剩下的就是安装电路板并记住哪些引脚是要在程序中声明的激活器(在本例中它们是 D10 和 D11)。

发送 C4E 传感器读数的代码

在该项目中,所使用的的库:

#include <SPI.h>
#include <LoRa.h>
#include <AqualaboSensors.h>

如何安装库呢?

  1. 将打开 Arduino IDE
  2. 单击工具栏并选择“工具”
  3. 在工具菜单中,查找“库管理器”部分
  4. 打开图书馆管理器时,会出现一个带有搜索引擎的窗口。
  5. 在这个搜索引擎中,输入库的名称“AqualabSensor”
  6. 安装库

(aqualab库)

1、命名要操作的设备类型:aqualaboModbusSensorsClass aqualaboModbusSensors

2、以 9600 波特启动串行端口 1 以读取板上的引脚并等待它打开:

void setup () {
Serial.begin (9600);
Serial1.begin (9600);
while (!Serial);
Serial.println("Modbus Sensor C4E");

3、声明连接到 Wing 的从设备或设备(可以找到传感器的引脚以及传感器的默认 ID)

aqualaboModbusSensors.begin(30, 11, 10, Serial1 );

传感器和 LoRa 参数设置

通过带有 Modbus 扩展板的 Bastwan 卡 (Lora) 读取传感器获取的数据并将其发送到另一个 Bastwan 板。

通过Lora发送信息包

(读取C4E Sensor串口数据)

发射器打印正在发送的数据、电导率和温度

数据的接收代码:

#include <SPI.h>
#include <LoRa.h>

将速度激活为 9600 波特,并将 LoRa 卡的参数声明为接收器:

寻找一个信息包:

读取收到的包并打印包内的数据:

接收器正在通过 LoRa 打印温度、电导率和弹簧系数来获取数据:

将数据发送到物联网

物联网旨在为物联网提供一个开放的通信网络。

在这个网络中,我们可以创建应用程序,注册我们的设备以便能够从网站管理它们,这个平台能够接收和发送模拟 LoRa 工作的通信的数据。

众所周知,数据可以通过 LoRa 技术从一个板块读取到另一个板块,请记住,我们的模块还具有 LaRaWan,能够在 Cayenne LPP 库的帮助下将数据传输到物联网平台。

注册后,我们将可以访问我们的控制台,我们可以在其中找到应用程序和网关。

添加一个应用程序来注册我们的传感器。

启动应用程序时,它会将我们发送到一个部分,我们将在该部分为我们的设备添加一个标识符(小写字母且不带空格)和一个描述。

当我们确定我们的应用程序后,它会向我们显示以下菜单,我们将在其中找到一般描述,没有设备。

将进入“设备”部分,在那里我们将注册我们的 Bastwan 车牌。

将为我们的车牌制作一个标识符并自动生成“设备 EUI”。

在我们的应用程序中注册我们的设备后,将显示以下面板,我们可以在其中看到我们的应用程序密钥、设备密钥和配置。

还有一个工具栏,我们可以在其中选择查看我们设备的描述和状态、观察我们正在接收的数据以及我们的通信设置。

将找到设备的常规设置和本地设置,一般情况下,我们会找到我们设备的标签及其激活方法,我们必须在其中更改为 ABP。

选择 ABP 方法时,将显示一个面板,我们必须在其中生成稍后将使用的密钥。在本节中,保存数据就足够了。

更改激活方法后,我们将获得将设备连接到 The Things 网络所需的密钥。

向物联网发送数据的程序

1、需要以下库:

#include <AqualaboSensors.h>
#include<CayenneLPP.h>
#include <SPI.h>
#include <lorawan.h>
CayenneLPP lpp(51);

2、如何安装cayenne LPP或Beelan库?

要获取库,我们必须在Github上进入我们的平台:我们将在其中选择 master 分支。

选择主分支后,我们将转到“代码”图标并选择下载 ZIP 文件的选项。

下载文件后,我们将其打开并解压缩 Arduino 库文件夹中的文件。

3、将从事物网络或我们之前获得的密钥分配凭据:

const char *devAddr = "26013557";
const char *nwkSKey = "040A022068FB1C137888440CE072ACF0";
const char *appSKey = "3D3E011CBB4CEF72885D12B91C85D680";

4、将在每个发送的信息包之间分配一个时间间隔以及一个计数器,以帮助了解发送了多少个包:

const unsigned long interval = 5000;
unsigned long previousMillis = 0;
unsigned int counter = 0;
char myStr[50];
char outStr[255];
byte recvStatus = 0;

5、声明我们将在 Lora 模块中使用的引脚,并启动传感器

const sRFM_pins RFM_pins = {
.CS = SS,
.RST = RFM_RST,
.DIO0 = RFM_DIO0,
.DIO1 = RFM_DIO1,
.DIO2 = RFM_DIO2,
.DIO5 = RFM_DIO5,
};
aqualaboModbusSensorsClass aqualaboModbusSensors;

6、将启动串行 9600 波特来监控传感器的读数

void setup () {
Serial.begin (9600);
while (! Serial);

7、将开始 Lora 模块

Serial.println("Modbus Sensor C4E");
if(!lora.init()){
Serial.println("RFM95 not detected");
delay(5000);
return;
}
pinMode(RFM_TCX_ON,OUTPUT);
pinMode(RFM_SWITCH,OUTPUT);
pinMode(LED_BUILTIN,OUTPUT);

8、声明将使用的设备类型,在本例中为它的类:

lora.setDeviceClass (CLASS_A);
lora.setDataRate (SF8BW125);
lora.setChannel (MULTI);

9、这将把我们之前定义的 ABP 键

lora.setNwkSKey(nwkSKey);
lora.setAppSKey(appSKey);
lora.setDevAddr(devAddr);

10、将通过 Serial1 发起 Modbus 通信

Serial1.begin(9600);

11、将在其中找到 Modbus 设备的引脚

aqualaboModbusSensors.begin(30, 11, 10, Serial1 );

12、设置传感器的参数

Serial.println("Init sensor");
aqualaboModbusSensors.initSensor();
Serial.println("Ready... ");
}

13、从传感器的读数开始

void loop() {
aqualaboModbusSensors.read();

14、将变量分配给摄氏度

Serial.print("Temperature: ");
Serial.println(aqualaboModbusSensors.sensorC4E.temperature, 2);

15、将电导率变量指定为 μS/cm

Serial.print("Conductivity: ");
Serial.println(aqualaboModbusSensors.sensorC4E.conductivity, 2);

16、将数据发送到物联网

if(millis() - previousMillis > interval) {
previousMillis = millis();
Serial.print("Sending: ");
printVariables();
lora.sendUplink((char *)lpp.getBuffer(), lpp.getSize(), 0, 1);
}
recvStatus = lora.readData(outStr);
if(recvStatus) {
Serial.println("Received: ");
Serial.println(outStr);
}
lora.update();
}

17、在事物网络中打印变量

void printVariables()
{
lpp.reset();
int sensorValue = aqualaboModbusSensors.sensorC4E.conductivity;
Serial.print(F("conductivity="));
Serial.print(sensorValue, 2);
lpp.addBarometricPressure(1, sensorValue);
int temp = aqualaboModbusSensors.sensorC4E.temperature;
Serial.print(F(", Tempetarure="));
Serial.print(temp, 2);
lpp.addTemperature(2, temp);
}

与 Ubidots 的联系

要将我们的设备连接到可视化应用程序,例如 Ubidots,我们需要进入任务栏中的“集成”部分。

添加设备的集成:

开始集成时,将显示一个应用程序列表,我们必须在其中查找 Ubidots 中的应用程序。

选择我们的应用程序时,它会要求我们提供令牌、访问密钥和标识符,用于在 Ubidots 中识别设备。

我们的标识符必须是您的设备或应用程序位于 Ubidots 中的标识符。

访问密钥是默认的

 

将在 API 凭证部分的 Ubidots 配置文件中找到此令牌

打开此部分时,我们所要做的就是复制我们的令牌编号并将其粘贴到 The Things Network 中。

集成完成后,我们将能够在设备描述中看到 Ubidots 徽标

之后,我们可以在 Ubidots 的设备部分看到我们组件的名称

现在我们将转到数据部分,我们将在其中选择仪表板,在本部分中,我们将能够自定义样本和处理从我们的传感器获得的数据。

添加小部件以查看我们的数据时,它会向我们显示大量选项,以便能够可视化我们设备的行为。

选择小部件后,我们将必须添加变量,在这种情况下,将根据我们选择的通道显示温度和电导率。

选择变量后,我们必须为小部件添加一个名称,在这种情况下,它们已根据变量命名。

保存 Widget 后,我​​们将能够以完全个性化的方式观察传感器的变化。

只需与我们的串行监视器和丁字裤网络进行比较,即可验证数据是否相同。

 

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论