From ee19a5bb26561613df071c3f55a4f3cb9f40a651 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Sat, 18 Jan 2025 12:36:49 -0800 Subject: [PATCH] Release 2.0.1 --- Hardware/v4.b/Schematic_v4b.pdf | Bin 0 -> 349571 bytes README.md | 4 +-- .../Meadow.ProjectLab/ConnectorProviderV3e.cs | 30 ++++++++++++------ Source/Meadow.ProjectLab/Constants.cs | 6 ++++ .../Meadow.ProjectLab/IProjectLabHardware.cs | 5 +++ .../Meadow.ProjectLab.csproj | 16 +++++----- .../ProjectLabHardwareBase.cs | 15 +++++++++ .../Meadow.ProjectLab/ProjectLabHardwareV4.cs | 30 +++++++++++------- Source/ProjectLab_Demo/DisplayController.cs | 4 +-- Source/ProjectLab_Demo/MeadowApp.cs | 6 ++-- Source/ProjectLab_Demo/ProjectLab_Demo.csproj | 4 +-- 11 files changed, 82 insertions(+), 38 deletions(-) create mode 100644 Hardware/v4.b/Schematic_v4b.pdf create mode 100644 Source/Meadow.ProjectLab/Constants.cs diff --git a/Hardware/v4.b/Schematic_v4b.pdf b/Hardware/v4.b/Schematic_v4b.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7b5e74057057159c1b3d44dbd90ff1f4932a1241 GIT binary patch literal 349571 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%0DP4Q@Y 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

XiaGjv;voxoKja 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 NMTJP%*;VvZ{~sl2nn(Zu literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 879bb6a..cf4370f 100644 --- a/README.md +++ b/README.md @@ -150,5 +150,5 @@ The enclosure was designed in Autodesk Fusion 360. The source file can be found ## Support Having trouble building/running these projects? -* File an [issue](https://github.com/WildernessLabs/Meadow_Issues/issues) with a repro case to investigate, and/or -* Join our [public Slack](http://slackinvite.wildernesslabs.co/), where we have an awesome community helping, sharing and building amazing things using Meadow. +* File an [issue](https://github.com/WildernessLabs/Meadow.Desktop.Samples/issues) with a repro case to investigate, and/or +* Join our [public Slack](http://slackinvite.wildernesslabs.co/), where we have an awesome community helping, sharing and building amazing things using Meadow. \ No newline at end of file diff --git a/Source/Meadow.ProjectLab/ConnectorProviderV3e.cs b/Source/Meadow.ProjectLab/ConnectorProviderV3e.cs index 02b06df..6ae264d 100644 --- a/Source/Meadow.ProjectLab/ConnectorProviderV3e.cs +++ b/Source/Meadow.ProjectLab/ConnectorProviderV3e.cs @@ -9,6 +9,7 @@ namespace Meadow.Devices; internal class ConnectorProviderV3e : IConnectorProvider { private readonly Sc16is752 _uartExpander; + private ModbusRtuClient? _client; public ConnectorProviderV3e(ProjectLabHardwareBase projLab, II2cBus i2CBus) { @@ -19,18 +20,27 @@ public ModbusRtuClient GetModbusRtuClient(ProjectLabHardwareBase projLab, int ba { if (Resolver.Device is not F7CoreComputeV2) throw new NotSupportedException(); - try + lock (_uartExpander) { - // v3.e+ uses an SC16is I2C UART expander for the RS485 - var port = _uartExpander.PortB.CreateRs485SerialPort(baudRate, dataBits, parity, stopBits, false); - Resolver.Log.Trace($"485 port created"); - return new ModbusRtuClient(port); - } - catch (Exception ex) - { - Resolver.Log.Warn($"Error creating 485 port: {ex.Message}"); - throw new Exception("Unable to connect to UART expander"); + if (_client == null) + { + try + { + Resolver.Log.Info($"Creating 485 port...", Constants.LogGroup); + // v3.e+ uses an SC16is I2C UART expander for the RS485 + var port = _uartExpander.PortB.CreateRs485SerialPort(baudRate, dataBits, parity, stopBits, false); + Resolver.Log.Trace($"485 port created", Constants.LogGroup); + _client = new ModbusRtuClient(port); + } + catch (Exception ex) + { + Resolver.Log.Warn($"Error creating 485 port: {ex.Message}", Constants.LogGroup); + throw new Exception("Unable to connect to UART expander"); + } + } } + + return _client; } public MikroBusConnector CreateMikroBus1(IF7CoreComputeMeadowDevice device, Mcp23008 mcp2) diff --git a/Source/Meadow.ProjectLab/Constants.cs b/Source/Meadow.ProjectLab/Constants.cs new file mode 100644 index 0000000..23aa00f --- /dev/null +++ b/Source/Meadow.ProjectLab/Constants.cs @@ -0,0 +1,6 @@ +namespace Meadow.Devices; + +internal static class Constants +{ + public const string LogGroup = "proj_lab"; +} diff --git a/Source/Meadow.ProjectLab/IProjectLabHardware.cs b/Source/Meadow.ProjectLab/IProjectLabHardware.cs index 8edc061..fc6d301 100644 --- a/Source/Meadow.ProjectLab/IProjectLabHardware.cs +++ b/Source/Meadow.ProjectLab/IProjectLabHardware.cs @@ -57,6 +57,11 @@ public interface IProjectLabHardware : IMeadowAppEmbeddedHardware /// public ITemperatureSensor? TemperatureSensor { get; } + ///

+ /// Gets the second/alternate ITemperatureSensor on the Project Lab board. + /// + public ITemperatureSensor? TemperatureSensor2 { get; } + /// /// Gets the IHumiditySensor on the Project Lab board. /// diff --git a/Source/Meadow.ProjectLab/Meadow.ProjectLab.csproj b/Source/Meadow.ProjectLab/Meadow.ProjectLab.csproj index 9e70414..3326262 100644 --- a/Source/Meadow.ProjectLab/Meadow.ProjectLab.csproj +++ b/Source/Meadow.ProjectLab/Meadow.ProjectLab.csproj @@ -24,13 +24,13 @@ - - - - - - - - + + + + + + + + diff --git a/Source/Meadow.ProjectLab/ProjectLabHardwareBase.cs b/Source/Meadow.ProjectLab/ProjectLabHardwareBase.cs index 4b5b4f7..b51dadf 100644 --- a/Source/Meadow.ProjectLab/ProjectLabHardwareBase.cs +++ b/Source/Meadow.ProjectLab/ProjectLabHardwareBase.cs @@ -30,6 +30,7 @@ public abstract class ProjectLabHardwareBase : IProjectLabHardware private IGyroscope? _gyroscope; private IAccelerometer? _accelerometer; private ITemperatureSensor? _temperatureSensor; + private ITemperatureSensor? _temperatureSensor2; private IHumiditySensor? _humiditySensor; private IBarometricPressureSensor? _barometricPressureSensor; private IGasResistanceSensor? _gasResistanceSensor; @@ -81,6 +82,9 @@ public abstract class ProjectLabHardwareBase : IProjectLabHardware /// public ITemperatureSensor? TemperatureSensor => GetTemperatureSensor(); + /// + public ITemperatureSensor? TemperatureSensor2 => GetTemperatureSensor2(); + /// public IHumiditySensor? HumiditySensor => GetHumiditySensor(); @@ -213,6 +217,16 @@ internal ProjectLabHardwareBase(IMeadowDevice compute, II2cBus peripheralI2cBus) return _temperatureSensor; } + private ITemperatureSensor? GetTemperatureSensor2() + { + if (_temperatureSensor2 == null) + { + InitializeBme688(); + } + + return _temperatureSensor2; + } + private void InitializeBmi270() { try @@ -317,6 +331,7 @@ private void InitializeBme688() _humiditySensor = bme; _barometricPressureSensor = bme; _gasResistanceSensor = bme; + _temperatureSensor2 = bme; Resolver.SensorService.RegisterSensor(bme); Logger?.Trace("Atmospheric sensor up"); } diff --git a/Source/Meadow.ProjectLab/ProjectLabHardwareV4.cs b/Source/Meadow.ProjectLab/ProjectLabHardwareV4.cs index 5b6f9d9..8947a10 100644 --- a/Source/Meadow.ProjectLab/ProjectLabHardwareV4.cs +++ b/Source/Meadow.ProjectLab/ProjectLabHardwareV4.cs @@ -171,7 +171,7 @@ internal ProjectLabHardwareV4(IF7CoreComputeMeadowDevice device, II2cBus i2cBus) }; ((Ili9341)_display).SetRotation(RotationType._270Degrees); - ((Ili9341)_display).InvertDisplay(true); + ((Ili9341)_display).InvertDisplayColor(true); Logger?.Trace("Display up"); } @@ -390,21 +390,29 @@ public override string RevisionString } } + private ModbusRtuClient? _client; + /// public override ModbusRtuClient GetModbusRtuClient(int baudRate = 19200, int dataBits = 8, Parity parity = Parity.None, StopBits stopBits = StopBits.One) { - try - { - // v3.e+ uses an SC16is I2C UART expander for the RS485 - var port = _uartExpander.PortB.CreateRs485SerialPort(baudRate, dataBits, parity, stopBits, false); - Resolver.Log.Trace($"485 port created"); - return new ModbusRtuClient(port); - } - catch (Exception ex) + if (_client == null) { - Resolver.Log.Warn($"Error creating 485 port: {ex.Message}"); - throw new Exception("Unable to connect to UART expander"); + try + { + Resolver.Log.Info($"Creating 485 port...", Constants.LogGroup); + + // v3.e+ uses an SC16is I2C UART expander for the RS485 + var port = _uartExpander.PortB.CreateRs485SerialPort(baudRate, dataBits, parity, stopBits, false); + Resolver.Log.Trace($"485 port created", Constants.LogGroup); + _client = new ModbusRtuClient(port); + } + catch (Exception ex) + { + Resolver.Log.Warn($"Error creating 485 port: {ex.Message}", Constants.LogGroup); + throw new Exception("Unable to connect to UART expander"); + } } + return _client; } /// diff --git a/Source/ProjectLab_Demo/DisplayController.cs b/Source/ProjectLab_Demo/DisplayController.cs index 643f6da..8447754 100644 --- a/Source/ProjectLab_Demo/DisplayController.cs +++ b/Source/ProjectLab_Demo/DisplayController.cs @@ -94,9 +94,9 @@ private Label CreateRightLabel(string text, Color color, int left, int top, int }; } - public void UpdateTemperatureValue(Temperature temperature) + public void UpdateTemperatureValue(Temperature temperature, Temperature temperature2) { - this.temperature.Text = $"{temperature.Celsius:N1}ºC"; + this.temperature.Text = $"{temperature2.Celsius:N1}ºC/{temperature.Celsius:N1}ºC"; } public void UpdatePressureValue(Pressure pressure) diff --git a/Source/ProjectLab_Demo/MeadowApp.cs b/Source/ProjectLab_Demo/MeadowApp.cs index 3fc908a..549b384 100644 --- a/Source/ProjectLab_Demo/MeadowApp.cs +++ b/Source/ProjectLab_Demo/MeadowApp.cs @@ -8,8 +8,8 @@ namespace ProjectLab_Demo; -// Change F7FeatherV2 to F7FeatherV1 if using Feather V1 Meadow boards -// Change to F7CoreComputeV2 for Project Lab V3.x +// Change to ProjectLabFeatherApp for Project Lab V1 or V2 +// Change to ProjectLabCoreComputeApp for Project Lab V3+ public class MeadowApp : ProjectLabCoreComputeApp { private DisplayController? displayController; @@ -107,7 +107,7 @@ public override Task Initialize() private void OnTemperatureSensorUpdated(object sender, IChangeResult e) { Resolver.Log.Info($"TEMPERATURE: {e.New.Celsius:N1}C"); - displayController!.UpdateTemperatureValue(e.New); + displayController!.UpdateTemperatureValue(e.New, Hardware.TemperatureSensor2?.Temperature ?? new Temperature(0)); } private void OnPressureSensorUpdated(object sender, IChangeResult e) diff --git a/Source/ProjectLab_Demo/ProjectLab_Demo.csproj b/Source/ProjectLab_Demo/ProjectLab_Demo.csproj index 967a3d3..1458914 100644 --- a/Source/ProjectLab_Demo/ProjectLab_Demo.csproj +++ b/Source/ProjectLab_Demo/ProjectLab_Demo.csproj @@ -19,8 +19,8 @@ - - + +