利用LoRa模块SX1278实现Arduino与树莓派的无线通信
扫描二维码
随时随地手机看文章
无论是物联网、M2M还是工业4.0,LoRa都是最流行的无线通信媒介之一。LoRa网络日益普及,在世界各地都有许多LoRaWAN网络。它消耗非常低的功率,可以进行远程通信。以前我们使用LoRa进行Arduino到Arduino和ESP32到ESP32的通信。
在本教程中,我们将使用LoRa模块SX1278在树莓派和Arduino之间进行点对点通信。这里Arduino将作为发射器/服务器和树莓派作为接收器/客户端。一个DHT 11传感器连接到发送端,将温度和湿度数据发送到接收端。在接收端,树莓派将在卡宴仪表板上发布这些读数。
组件的要求
•树莓派4
•Arduino Uno
•SX1278 433MHz LoRa收发模块
•DHT11
线路图
LoRa发送器/服务器和接收器/客户端部分的电路图如下所示。在这个项目中,我们将使用LoRa SX1278模块将温度和湿度值从Arduino发送到树莓派。DHT11传感器连接到发送端,Arduino将从DHT11获取温度和湿度值,然后通过LoRa SX1278模块将其发送给树莓派。这些湿度和温度值将被上传到卡宴物联网平台,该平台可以通过互联网从世界任何地方进行监控。
发送部分- LoRa与Arduino UNO的接口
在发送端,Arduino UNO与LoRa模块和DHT11传感器接口。Arduino UNO与LoRa和DHT11的接口如下图所示。另外,请查看Arduino Uno与LoRa接口的详细说明。
LoRa模块由16个引脚组成,其中6个引脚是GPIO引脚,4个是接地引脚。这个LoRa模块工作在3.3V,因此LoRa上的3.3V引脚连接到Arduino UNO板上的3.3V引脚。下表给出了完整的连接。DHT11传感器连接到Arduino的A0引脚。
接收器部分-接口树莓派与LoRa模块
在接收端,Raspberry Pi用于从LoRa receiver获取数据并将其发送到Cayenne平台。
LoRa模块与树莓派之间的完整连接如下表所示。
LoRa通信的卡宴设置
卡宴是一个物联网平台,允许您控制微控制器。它还用于将任何传感器数据上传到卡宴云。在这里,来自DHT11传感器的温度和湿度数据将被上传到卡宴。
首先,登录/注册到你的Cayenne账户,然后进入Cayenne仪表盘,点击“添加新”,然后点击“设备/小部件”。
之后,向下滚动并点击“带你自己的东西”。
将出现一个显示设备详细信息的窗口。复制这些细节;它将在python代码中使用。
基于LoRa通信的Arduino编程
Arduino和Raspberry Pi之间的通信使用Radiohead库。这个库可以从这里下载。在这里,Arduino作为发射器/服务器工作,并将DHT传感器数据发送到树莓派。
完整的Arduino代码在页面末尾给出。这里我们将解释代码的一些重要部分。
像往常一样,通过包含所有必需的库来开始代码。SPI库用于Arduino和LoRa模块之间的SPI通信。RH_RF95库用于LoRa通信,DHT库用于读取DHT传感器的温湿度值。
然后定义DHT类型和连接DHT传感器的引脚。
在真空循环中,读取温度和湿度值。
现在要将温度和湿度值发送给树莓派,必须将它们转换为字符数组。为此,首先将整数值转换为字符串,然后将温度和湿度值添加到单个字符串中。
现在将字符串值转换为字符数组。这里‘ data ’是字符串,‘ d ’是字符数组。
最后,将值发送到LoRa接收器。
树莓派设置LoRa通信
如前所述,Radiohead库用于Arduino和Raspberry Pi之间的点对点通信。LoRa模块与SPI协议一起工作,因此我们必须在树莓派中启用SPI接口。使用下面的命令进入配置窗口。
现在在配置窗口中,转到接口选项并启用SPI接口。
启用SPI接口之后,现在使用下面的命令安装spidev包。它是一个python模块,用于通过spidev Linux内核驱动程序从用户空间连接SPI设备。
然后使用下面的命令安装pyLoRa包。此包安装LoRa通信所需的模型。
树莓派LoRa通信编程
这里树莓派作为Receiver/client,接收Arduino发送的DHT传感器数据。
完整的Python程序在本页末尾给出。在这里,我将解释代码的一些重要部分。
在代码的开头,导入所有必需的库。MQTT库用于将温度和湿度值发送到辣椒平台。
现在输入Raspberry Pi和Cayenne之间MQTT通信所需的凭据。
之后,为温度和湿度值创建两个通道。
现在创建一个带有三个函数的LoRa类,即init、class和on_rx_done。init函数用于初始化433MHz带宽为125khz的LoRa模块。
start功能用于将模块配置为接收器,获取RSSI值、工作频率等。
on_rx_done函数用于读取传入的值。然后将接收到的值移动到一个名为payload的变量中,并使用utf-8进行解码,然后移动到一个名为data的变量中。
现在将温度和湿度值拆分并发布在Cayenne平台上
建立Arduino与树莓派之间的通信
硬件和程序准备好后,将Arduino代码上传到Arduino板,并在Pi中启动python代码。如果一切正常,您应该看到通过shell窗口在pi中接收到的温度和湿度值,如下所示。
现在使用默认浏览器打开Cayenne,您应该在仪表板上看到温度和湿度值,如下所示。
这就是Arduino如何使用LoRa模块与树莓派进行无线通信,进一步的树莓派可以将传感器数据上传到任何云,这样就可以从任何地方监控它。
本文编译自iotdesignpro