在过去的几个月里,我一直在为使用Seeed LoRa-E5 (STM32WLE5JC) 模块的客户开展概念验证 (PoC) 项目,因此我的办公桌上有几个备用开发套件。
我也一直在移植我的一些Windows 10 IoT Core项目。NET Core 5 ,因此它们可以在RaspberryPiOS 上运行的Raspberry PI3 / 4设备上工作。这让我想到,像 Raspberry PI 这样功能强大的设备的LoRaWAN连接可能对某些专业应用很有用。
在对System.IO.PortsNuGet包进行了一些实验之后。我决定做一个 .NET Core 5 版本的 Seeed LoRa-E5 库。
许多其他作者已经详细记录了在RaspberryPI 设备上安装.NET Core ARM32/64 运行时的过程,因此我不会在这里介绍。
我主要使用Microsoft Visual Studio 2019 (而不是Visual Studio Code ),所以我花了一些时间探索使部署和调试更容易的工具。为了改善我使用的开发体验
我用珠宝商的螺丝刀提起了 Grove 连接器上用于传输和接收线的锁定片,这样我就可以交换它们了。(我用结标记交叉电缆,因此很明显它们已被修改)
nanoFramework / TinyCLR串口库之间有一些细微的差别。
// set parameters
serialDevice.BaudRate = baudRate;
serialDevice.Parity = serialParity;
serialDevice.StopBits = stopBitCount;
serialDevice.Handshake = Handshake.None;
serialDevice.DataBits = dataBits;
serialDevice.NewLine = "\r\n";
atCommandExpectedResponse = string.Empty;
serialDevice.Open();
serialDevice.WatchChar = '\n';
serialDevice.DataReceived += SerialDevice_DataReceived;
//Ignoring the return from this is intentional
this.SendCommand("+LOWPOWER: WAKEUP", "AT+LOWPOWER: WAKEUP", SendTimeoutMinimum);
例如,nanoFramework 具有 watchChar ,因此更容易过滤对DataReceived 事件的调用
private static void SerialDevice_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
switch (e.EventType)
{
case SerialData.Chars:
//Debug.WriteLine("RX SerialData.Chars");
break;
case SerialData.WatchChar:
Debug.WriteLine("RX: SerialData.WatchChar");
SerialPort serialDevice = (SerialPort)sender;
// Uncomment this to see buffer size ebb and flow
//Debug.WriteLine($"RX: SerialData.WatchChar Bytes:{serialDevice.BytesToRead}");
string response = serialDevice.ReadExisting();
Debug.WriteLine($"RX :{response.Trim()} bytes:{response.Length} read from {serialDevice.PortName}");
break;
default:
Debug.Assert(false, $"e.EventType {e.EventType} unknown");
break;
}
}
但是.Net Core 没有
private static void SerialDevice_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort serialPort = (SerialPort)sender;
switch (e.EventType)
{
case SerialData.Chars:
string response = serialPort.ReadExisting();
Debug.WriteLine($"RX:{response.Trim()} bytes:{response.Length}");
break;
case SerialData.Eof:
Debug.WriteLine("RX :EoF");
break;
default:
Debug.Assert(false, $"e.EventType {e.EventType} unknown");
break;
}
}
TinyCLR串口库只支持字节数组的发送,所以AT 命令需要转换。
while (true)
{
byte[] txBuffer = UTF8Encoding.UTF8.GetBytes(ATCommand);
int txByteCount = serialDevice.Write(txBuffer);
Debug.WriteLine($"TX: {txByteCount} bytes");
...
}
这些实现细节只是不同的“哲学”方法,所以不是主要问题。
我假设读者熟悉LoRaWAN、配置 LoRaWAN 模块和 LoRaWAN 网络。
The Things Network(TTN)网关、应用程序和设备的配置已经在其他几个Hackster.IO项目中详细介绍过,因此在此不再赘述。
该项目是我博客上一系列帖子的摘要,其中我详细介绍了Seeed LoRa-E5 LoRaWAN库的构建。
该库旨在为 .NET 开发人员构建用于 .Net Core 驱动设备的 LoRaWAN 连接应用程序的“管道”。
Github 存储库包含一个示例应用程序,该应用程序展示了如何使用库发送和接收消息以及支持的不同配置选项。
Visual Studio 2019的RaspberryDebugger扩展使.NET Core项目在RaspberryPI 设备上的部署和调试成为“无摩擦”过程。它工作得很好,我受到启发下载了RaspberryDebugger 代码(它第一次编译的奖励),并且正在修复几个问题。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !