×

NET nanoframework和RAK WisBlock传感器开源

消耗积分:0 | 格式:zip | 大小:0.00 MB | 2023-06-12

乐骞添

分享资料个

描述

 

介绍

RAKwireless RAK11200 WisBlock WiFi 核心模块RAK2305 WiFi Espressif ESP32 无线模块基于.NET nanoFramework支持Expressif ESP32 处理器

RAKWisBlock 系统广泛的传感器选择,我想看看让它们的代表性样本工作有多难。

小心RAK11200RAK2305 40 针连接器,如果处理不当,它们会损坏(WisBlock 模块也应拧到主板上)。

SHT3C温湿度传感器

SHT3C 传感器模块是最便宜的模块之一(2023 年 2 月 4.60 美元)并且具有。NET nanoFramework IoT.Device支持,因此它看起来是一个不错的起点。

poYBAGSBRYiAW-q8AAYo_hYa_Xw748.jpg
RAK5005基板、RAK1901传感器和RAK11200核心WisBlock模块
 

示例代码适用于RAK11200 CoreRAK2305 无线模块。

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包)可能存在版本控制问题,因此可能需要进行一些“修补”。

pYYBAGSBRYuALFicAACChnfto48911.jpg
显示温度和湿度读数的 Visual Studio 2022 输出窗口
 

GNSS GPS 定位模块 u-Blox MAX-7Q 传感器

我使用TinyGPSPlusNF库来处理RAK1910 GNSS GPS 定位模块上的u-blox7 GNSS 模块生成的NMEA0183消息。

pYYBAGSBRZCAA26uAAjdg4aIEO0890.jpg
RAK5005 主板上的 RAK 11200 和 RAK1910
 
poYBAGSBRbOAb03zAAm4rT0Qahg263.jpg
RAK5005 主板上的 RAK 2305 和 RAK1910
 

RAK WisBlock Pin Mapper工具输出用于RAK1910、RAK5005-O WisBlock 底板RAK11200

poYBAGSBRbaAWz1gAADY4f78GS0612.jpg
RAK WisBlock 引脚映射器
 
poYBAGSBRcOAXkddAAXATNcy3BM172.png
RAK5005 WisBlock基板框图
 

为了节省电力,GPIO27 用于打开/关闭 RAK1910 模块。

pYYBAGSBRcWAFs1FAABEfaDxq6M317.png
 

在查看 RAK2305 和 RAK5005 原理图并进行一些实验后,我发现串行端口 TX/RX 线也必须颠倒,因为这两个设备通常会连接到WisBlock 核心模块。

pYYBAGSBRciAY77LAAE2uf6nf9E403.jpg
RAK2305模块原理图
 
pYYBAGSBRNyAU4AYAAJ61sPW5QE337.png
 

该演示应用程序基于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)可能存在版本控制问题,因此可能需要进行一些“修补”。

pYYBAGSBRc6AFVtAAAEhhW36WEE063.jpg
显示位置信息的 Visual Studio 2K22 输出窗口
 

123456

和别人玩得开心

RAK11200 WisBlock WiFi 模块有两个 I2C 端口,在RAK5005 WisBlock 基板上,Wisblock 传感器和RAK1920 WisBlock 传感器适配器模块 Grove 插座重新连接到 I2C1。

poYBAGSBRdSAYiPCAAjsz09H_Nk063.jpg
带有 Seeedstudio Grove SHT31 传感器的 RAK1920 Wisblock 传感器适配器
 

123456

pYYBAGSBRd2AUH7sAAq08qIh-60217.jpg
RAK1920 Wisblock 传感器适配器与 Adafruit SHT31-D 传感器
 

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)可能存在版本控制问题,因此可能需要进行一些“修补”。

poYBAGSBReCAd9pmAACyy1Q0AH8720.jpg
Visual Studio 2K22 输出窗口显示温度和湿度信息
 

执行摘要

.NET nanoFramework 库按预期运行良好。我最终花了更长的时间让 GPS 工作,因为我不得不参考原理图来弄清楚它是如何连接的。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !