RAKwireless RAK11200 WisBlock WiFi 核心模块和RAK2305 WiFi Espressif ESP32 无线模块基于.NET nanoFramework支持的Expressif ESP32 处理器。
RAKWisBlock 系统有广泛的传感器选择,我想看看让它们的代表性样本工作有多难。
小心RAK11200和RAK2305 40 针连接器,如果处理不当,它们会损坏(WisBlock 模块也应拧到主板上)。
SHT3C 传感器模块是最便宜的模块之一(2023 年 2 月 4.60 美元)并且具有。NET nanoFramework IoT.Device支持,因此它看起来是一个不错的起点。
示例代码适用于RAK11200 Core和RAK2305 无线模块。
public class Program
{
public static void Main()
{
Debug.WriteLine("devMobile.IoT.RAK.Wisblock.RAK11200RAK1901 starting");
try
{
// RAK11200 & RAK2305
Configuration.SetPinFunction(Gpio.IO04, DeviceFunction.I2C1_DATA);
Configuration.SetPinFunction(Gpio.IO05, DeviceFunction.I2C1_CLOCK);
I2cConnectionSettings settings = new(1, Shtc3.DefaultI2cAddress);
using (I2cDevice device = I2cDevice.Create(settings))
using (Shtc3 shtc3 = new(device))
{
while (true)
{
if (shtc3.TryGetTemperatureAndHumidity(out var temperature, out var relativeHumidity))
{
Debug.WriteLine($"Temperature {temperature.DegreesCelsius:F1}°C Humidity {relativeHumidity.Value:F0}%");
}
Thread.Sleep(10000);
}
}
}
catch (Exception ex)
{
Debug.WriteLine($"SHTC3 initialisation or read failed {ex.Message}");
Thread.Sleep(Timeout.Infinite);
}
}
}
NuGet 包(尤其是Units.Net包)可能存在版本控制问题,因此可能需要进行一些“修补”。
我使用TinyGPSPlusNF库来处理RAK1910 GNSS GPS 定位模块上的u-blox7 GNSS 模块生成的NMEA0183消息。
RAK WisBlock Pin Mapper工具输出用于RAK1910、RAK5005-O WisBlock 底板和RAK11200 。
为了节省电力,GPIO27 用于打开/关闭 RAK1910 模块。
在查看 RAK2305 和 RAK5005 原理图并进行一些实验后,我发现串行端口 TX/RX 线也必须颠倒,因为这两个设备通常会连接到WisBlock 核心模块。
该演示应用程序基于MBoude的TinyGPSPlusNF库,该库解析RAK1910生成的NMEA 0183语句。
public class Program
{
private static TinyGPSPlus _gps;
public static void Main()
{
Debug.WriteLine($"devMobile.IoT.RAK.Wisblock.RAK1910 starting TinyGPS {TinyGPSPlus.LibraryVersion}");
try
{
Configuration.SetPinFunction(Gpio.IO21, DeviceFunction.COM2_TX);
Configuration.SetPinFunction(Gpio.IO19, DeviceFunction.COM2_RX);
_gps = new TinyGPSPlus();
// UART1 with default Max7Q baudrate
SerialPort serialPort = new SerialPort("COM2", 9600);
serialPort.DataReceived += SerialDevice_DataReceived;
serialPort.Open();
serialPort.WatchChar = '\n';
// Enable the GPS module GPS 3V3_S/RESET_GPS - IO2 - GPIO27
GpioController gpioController = new GpioController();
GpioPin Gps3V3 = gpioController.OpenPin(Gpio.IO27, PinMode.Output);
Gps3V3.Write(PinValue.High);
Debug.WriteLine("Waiting...");
Thread.Sleep(Timeout.Infinite);
}
catch (Exception ex)
{
Debug.WriteLine($"UBlox MAX7Q initialisation failed {ex.Message}");
Thread.Sleep(Timeout.Infinite);
}
}
private static void SerialDevice_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
// we only care if got EoL character
if (e.EventType != SerialData.WatchChar)
{
return;
}
SerialPort serialDevice = (SerialPort)sender;
string sentence = serialDevice.ReadExisting();
if (_gps.Encode(sentence))
{
if (_gps.Date.IsValid)
{
Debug.Write($"{_gps.Date.Year}-{_gps.Date.Month:D2}-{_gps.Date.Day:D2} ");
}
if (_gps.Time.IsValid)
{
Debug.Write($"{_gps.Time.Hour:D2}:{_gps.Time.Minute:D2}:{_gps.Time.Second:D2}.{_gps.Time.Centisecond:D2} ");
}
if (_gps.Location.IsValid)
{
Debug.Write($"Lat:{_gps.Location.Latitude.Degrees:F5}° Lon:{_gps.Location.Longitude.Degrees:F5}° ");
}
if (_gps.Altitude.IsValid)
{
Debug.Write($"Alt:{_gps.Altitude.Meters:F1}M ");
}
if (_gps.Location.IsValid)
{
Debug.Write($"Hdop:{_gps.Hdop.Value:F2}");
}
if (_gps.Date.IsValid || _gps.Time.IsValid || _gps.Location.IsValid || _gps.Altitude.IsValid)
{
Debug.WriteLine("");
}
}
}
}
NuGet 包(尤其是Units.Net o nes)可能存在版本控制问题,因此可能需要进行一些“修补”。
123456
RAK11200 WisBlock WiFi 模块有两个 I2C 端口,在RAK5005 WisBlock 基板上,Wisblock 传感器和RAK1920 WisBlock 传感器适配器模块 Grove 插座重新连接到 I2C1。
123456
123456
public class Program
{
public static void Main()
{
Debug.WriteLine("devMobile.IoT.RAK.Wisblock.RAK1920SHT31 starting");
try
{
Configuration.SetPinFunction(Gpio.IO04, DeviceFunction.I2C1_DATA);
Configuration.SetPinFunction(Gpio.IO05, DeviceFunction.I2C1_CLOCK);
I2cConnectionSettings settings = new(1, (byte)I2cAddress.AddrLow);
using (I2cDevice device = I2cDevice.Create(settings))
using (Sht3x sht31 = new(device))
{
while (true)
{
var temperature = sht31.Temperature;
var relativeHumidity = sht31.Humidity;
Debug.WriteLine($"Temperature {temperature.DegreesCelsius:F1}°C Humidity {relativeHumidity.Value:F0}%");
Thread.Sleep(10000);
}
}
}
catch (Exception ex)
{
Debug.WriteLine($"SHT31 initialisation or read failed {ex.Message}");
Thread.Sleep(Timeout.Infinite);
}
}
}
NuGet 包(尤其是Units.Net on es)可能存在版本控制问题,因此可能需要进行一些“修补”。
.NET nanoFramework 库按预期运行良好。我最终花了更长的时间让 GPS 工作,因为我不得不参考原理图来弄清楚它是如何连接的。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !