diff --git a/A2Flower/A2Flower.csproj b/A2Flower/A2Flower.csproj
index e25dac2..7558d0e 100644
--- a/A2Flower/A2Flower.csproj
+++ b/A2Flower/A2Flower.csproj
@@ -20,8 +20,8 @@
</PropertyGroup>
<ItemGroup>
- <PackageReference Include="NewLife.Core" Version="11.5.2025.501" />
- <PackageReference Include="NewLife.Stardust" Version="3.3.2025.506" />
+ <PackageReference Include="NewLife.Core" Version="11.5.2025.519-beta1544" />
+ <PackageReference Include="NewLife.Stardust" Version="3.3.2025.516-beta1457" />
</ItemGroup>
<ItemGroup>
diff --git a/Samples/BuzzerTest/BuzzerTest.csproj b/Samples/BuzzerTest/BuzzerTest.csproj
index 42bb8a6..9cc5bc1 100644
--- a/Samples/BuzzerTest/BuzzerTest.csproj
+++ b/Samples/BuzzerTest/BuzzerTest.csproj
@@ -21,7 +21,7 @@
</ItemGroup>
<ItemGroup>
- <PackageReference Include="NewLife.IoT" Version="2.4.2025.520-beta1708" />
+ <PackageReference Include="NewLife.IoT" Version="2.5.2025.522-beta1610" />
</ItemGroup>
</Project>
diff --git a/Samples/FullTest/FullTest.csproj b/Samples/FullTest/FullTest.csproj
index 591c5d5..8e7b39e 100644
--- a/Samples/FullTest/FullTest.csproj
+++ b/Samples/FullTest/FullTest.csproj
@@ -17,8 +17,8 @@
</PropertyGroup>
<ItemGroup>
- <PackageReference Include="NewLife.MQTT" Version="2.0.2025.415" />
- <PackageReference Include="NewLife.Stardust" Version="3.3.2025.506" />
+ <PackageReference Include="NewLife.MQTT" Version="2.1.2025.519-beta1637" />
+ <PackageReference Include="NewLife.Stardust" Version="3.3.2025.516-beta1457" />
</ItemGroup>
<ItemGroup>
diff --git a/Samples/FullTest/Program.cs b/Samples/FullTest/Program.cs
index 266ac60..a74fe04 100644
--- a/Samples/FullTest/Program.cs
+++ b/Samples/FullTest/Program.cs
@@ -1,7 +1,9 @@
using FullTest;
+using NewLife.IoT.Controllers;
using NewLife.Log;
using NewLife.Model;
using NewLife.MQTT;
+using SmartA2;
using Stardust;
// 启用控制台日志,拦截所有异常
@@ -14,11 +16,17 @@ services.AddSingleton(XTrace.Log);
// 配置星尘。自动读取配置文件 config/star.config 中的服务器地址
var star = services.AddStardust();
+// 注入业务所需服务
+var board = new A2();
+services.AddSingleton(board);
+services.AddSingleton<IBoard>(board);
+
// 初始化Redis、MQTT、RocketMQ,注册服务到容器
InitMqtt(services, star?.Tracer);
// 注册后台任务 IHostedService
services.AddHostedService<Worker>();
+services.AddHostedService<TestWorker>();
// 异步阻塞,友好退出
var host = services.BuildHost();
diff --git a/Samples/FullTest/TestWorker.cs b/Samples/FullTest/TestWorker.cs
new file mode 100644
index 0000000..47a39c1
--- /dev/null
+++ b/Samples/FullTest/TestWorker.cs
@@ -0,0 +1,101 @@
+using System.IO.Ports;
+using NewLife;
+using NewLife.IoT.Controllers;
+using NewLife.Log;
+using NewLife.Model;
+using SmartA2;
+
+namespace FullTest;
+
+internal class TestWorker(IBoard board) : IHostedService
+{
+ public Task StartAsync(CancellationToken cancellationToken)
+ {
+ _ = Task.Run(DoWork);
+
+ return Task.CompletedTask;
+ }
+
+ public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask;
+
+ private async Task DoWork()
+ {
+ var a2 = board as A2;
+
+ XTrace.WriteLine("输入输出测试");
+ {
+ var key = a2.Key;
+ key.KeyDown += (s, e) => XTrace.WriteLine("按键按下");
+ key.KeyUp += (s, e) => XTrace.WriteLine("按键弹起");
+
+ // 闪烁灯光、蜂鸣器若干次
+ var led = a2.Led;
+ //var buzzer = a2.Buzzer;
+ for (var i = 0; i < 5; i++)
+ {
+ led.Write(true);
+ //buzzer.Write(true);
+ await Task.Delay(500);
+
+ led.Write(false);
+ //buzzer.Write(false);
+ await Task.Delay(500);
+ }
+ }
+
+ XTrace.WriteLine("串口测试");
+ {
+ // 列出所有串口
+ var ports = SerialPort.GetPortNames();
+ XTrace.WriteLine("串口列表[{0}]:", ports.Length);
+ foreach (var item in ports)
+ {
+ XTrace.WriteLine(item);
+ }
+
+ // 打开串口并发送数据,然后关闭串口
+ using var port = a2.CreateSerial(Coms.COM1, 115200);
+ port.Open();
+
+ var buf = "Hello NewLife".GetBytes();
+ port.Write(buf, 0, buf.Length);
+ }
+
+ XTrace.WriteLine("温湿度传感器测试");
+ {
+ // 打开Modbus读取数据
+ using var modbus = a2.CreateModbus(Coms.COM2, 9600);
+ var sensor = new TemperatureSensor { Modbus = modbus };
+
+ XTrace.WriteLine("地址:{0:X2}", sensor.ReadAddress());
+ XTrace.WriteLine("标识:{0}", sensor.ReadID().ToHex());
+
+ var (hard, soft) = sensor.ReadVersion();
+ XTrace.WriteLine("硬件:{0}", hard);
+ XTrace.WriteLine("软件:{0}", soft);
+
+ var (temp, humi) = sensor.ReadValues();
+ XTrace.WriteLine("温度:{0:n1}", temp);
+ XTrace.WriteLine("湿度:{0:p1}", humi);
+ }
+
+ XTrace.WriteLine("继电器测试");
+ {
+ // 打开Modbus读取数据
+ using var modbus = a2.CreateModbus(Coms.COM3, 115200);
+ var relay = new RelayControl { Modbus = modbus };
+
+ XTrace.WriteLine("点位1:{0}", relay.Read(1));
+
+ for (var i = 0; i < 4; i++)
+ {
+ for (var j = 0; j < 4; j++)
+ {
+ relay.Invert(j);
+ }
+
+ await Task.Delay(500);
+ }
+ }
+ }
+}
diff --git a/Samples/KeyTest/KeyTest.csproj b/Samples/KeyTest/KeyTest.csproj
index 634cadd..21fa6e2 100644
--- a/Samples/KeyTest/KeyTest.csproj
+++ b/Samples/KeyTest/KeyTest.csproj
@@ -21,7 +21,7 @@
</ItemGroup>
<ItemGroup>
- <PackageReference Include="NewLife.IoT" Version="2.4.2025.520-beta1708" />
+ <PackageReference Include="NewLife.IoT" Version="2.5.2025.522-beta1610" />
</ItemGroup>
</Project>
diff --git a/Samples/LedTest/LedTest.csproj b/Samples/LedTest/LedTest.csproj
index 81e46f0..53ff76b 100644
--- a/Samples/LedTest/LedTest.csproj
+++ b/Samples/LedTest/LedTest.csproj
@@ -21,7 +21,7 @@
</ItemGroup>
<ItemGroup>
- <PackageReference Include="NewLife.IoT" Version="2.4.2025.520-beta1708" />
+ <PackageReference Include="NewLife.IoT" Version="2.5.2025.522-beta1610" />
</ItemGroup>
</Project>
diff --git a/Samples/NetClientTest/NetClientTest.csproj b/Samples/NetClientTest/NetClientTest.csproj
index fa5820d..a5f2987 100644
--- a/Samples/NetClientTest/NetClientTest.csproj
+++ b/Samples/NetClientTest/NetClientTest.csproj
@@ -17,7 +17,7 @@
</PropertyGroup>
<ItemGroup>
- <PackageReference Include="NewLife.Core" Version="11.5.2025.501" />
+ <PackageReference Include="NewLife.Core" Version="11.5.2025.519-beta1544" />
</ItemGroup>
</Project>
diff --git a/Samples/NetServerTest/NetServerTest.csproj b/Samples/NetServerTest/NetServerTest.csproj
index dd752b6..279991e 100644
--- a/Samples/NetServerTest/NetServerTest.csproj
+++ b/Samples/NetServerTest/NetServerTest.csproj
@@ -17,7 +17,7 @@
</PropertyGroup>
<ItemGroup>
- <PackageReference Include="NewLife.Core" Version="11.5.2025.501" />
+ <PackageReference Include="NewLife.Core" Version="11.5.2025.519-beta1544" />
</ItemGroup>
</Project>
diff --git a/Samples/Serial2NetClientTest/Serial2NetClientTest.csproj b/Samples/Serial2NetClientTest/Serial2NetClientTest.csproj
index 77fe7d3..9c8f8dc 100644
--- a/Samples/Serial2NetClientTest/Serial2NetClientTest.csproj
+++ b/Samples/Serial2NetClientTest/Serial2NetClientTest.csproj
@@ -17,7 +17,7 @@
</PropertyGroup>
<ItemGroup>
- <PackageReference Include="NewLife.Core" Version="11.5.2025.501" />
+ <PackageReference Include="NewLife.Core" Version="11.5.2025.519-beta1544" />
</ItemGroup>
<ItemGroup>
diff --git a/Samples/Serial2NetServerTest/Serial2NetServerTest.csproj b/Samples/Serial2NetServerTest/Serial2NetServerTest.csproj
index b6ae440..681b028 100644
--- a/Samples/Serial2NetServerTest/Serial2NetServerTest.csproj
+++ b/Samples/Serial2NetServerTest/Serial2NetServerTest.csproj
@@ -17,7 +17,7 @@
</PropertyGroup>
<ItemGroup>
- <PackageReference Include="NewLife.Core" Version="11.5.2025.501" />
+ <PackageReference Include="NewLife.Core" Version="11.5.2025.519-beta1544" />
</ItemGroup>
</Project>
diff --git a/Samples/SerialTest/SerialTest.csproj b/Samples/SerialTest/SerialTest.csproj
index 3d1ce64..23eaa23 100644
--- a/Samples/SerialTest/SerialTest.csproj
+++ b/Samples/SerialTest/SerialTest.csproj
@@ -17,8 +17,8 @@
</PropertyGroup>
<ItemGroup>
- <PackageReference Include="NewLife.Core" Version="11.5.2025.501" />
- <PackageReference Include="NewLife.IoT" Version="2.4.2025.520-beta1708" />
+ <PackageReference Include="NewLife.Core" Version="11.5.2025.519-beta1544" />
+ <PackageReference Include="NewLife.IoT" Version="2.5.2025.522-beta1610" />
</ItemGroup>
<ItemGroup>
diff --git a/Samples/UsbPowerTest/UsbPowerTest.csproj b/Samples/UsbPowerTest/UsbPowerTest.csproj
index ee74106..3c531eb 100644
--- a/Samples/UsbPowerTest/UsbPowerTest.csproj
+++ b/Samples/UsbPowerTest/UsbPowerTest.csproj
@@ -21,7 +21,7 @@
</ItemGroup>
<ItemGroup>
- <PackageReference Include="NewLife.IoT" Version="2.4.2025.520-beta1708" />
+ <PackageReference Include="NewLife.IoT" Version="2.5.2025.522-beta1610" />
</ItemGroup>
</Project>
diff --git a/SmartA2/RelayControl.cs b/SmartA2/RelayControl.cs
index 378003e..cebe5ae 100644
--- a/SmartA2/RelayControl.cs
+++ b/SmartA2/RelayControl.cs
@@ -1,5 +1,4 @@
-using NewLife;
-using NewLife.IoT.Protocols;
+using NewLife.IoT.Controllers;
namespace SmartA2;
@@ -7,7 +6,7 @@ namespace SmartA2;
public class RelayControl
{
/// <summary>Modbus对象</summary>
- public Modbus Modbus { get; set; }
+ public IModbus Modbus { get; set; }
/// <summary>主机地址</summary>
public Byte Host { get; set; } = 1;
diff --git a/SmartA2/SmartA2.csproj b/SmartA2/SmartA2.csproj
index 8ae059c..ba78a0b 100644
--- a/SmartA2/SmartA2.csproj
+++ b/SmartA2/SmartA2.csproj
@@ -49,8 +49,8 @@
</ItemGroup>
<ItemGroup>
- <PackageReference Include="NewLife.IoT" Version="2.4.2025.520-beta1708" />
- <PackageReference Include="NewLife.ModbusRTU" Version="2.0.2025.516-beta1501" />
+ <PackageReference Include="NewLife.IoT" Version="2.5.2025.522-beta1610" />
+ <PackageReference Include="NewLife.ModbusRTU" Version="2.0.2025.522-beta1626" />
</ItemGroup>
<ItemGroup>
diff --git a/SmartA2/TemperatureSensor.cs b/SmartA2/TemperatureSensor.cs
index ebc8364..6f1b42b 100644
--- a/SmartA2/TemperatureSensor.cs
+++ b/SmartA2/TemperatureSensor.cs
@@ -1,5 +1,5 @@
using NewLife;
-using NewLife.IoT.Protocols;
+using NewLife.IoT.Controllers;
namespace SmartA2;
@@ -7,7 +7,7 @@ namespace SmartA2;
public class TemperatureSensor
{
/// <summary>Modbus对象</summary>
- public Modbus Modbus { get; set; }
+ public IModbus Modbus { get; set; }
/// <summary>主机地址</summary>
public Byte Host { get; set; } = 1;
diff --git a/XUnitTest/XUnitTest.csproj b/XUnitTest/XUnitTest.csproj
index 92bca2f..05fe9c4 100644
--- a/XUnitTest/XUnitTest.csproj
+++ b/XUnitTest/XUnitTest.csproj
@@ -10,7 +10,7 @@
</PropertyGroup>
<ItemGroup>
- <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
+ <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.0" />
<PackageReference Include="NewLife.UnitTest" Version="1.0.2025.101" />
<PackageReference Include="System.Speech" Version="9.0.5" />
<PackageReference Include="xunit" Version="2.9.3" />