Daqifi.Core
0.22.0
dotnet add package Daqifi.Core --version 0.22.0
NuGet\Install-Package Daqifi.Core -Version 0.22.0
<PackageReference Include="Daqifi.Core" Version="0.22.0" />
<PackageVersion Include="Daqifi.Core" Version="0.22.0" />
<PackageReference Include="Daqifi.Core" />
paket add Daqifi.Core --version 0.22.0
#r "nuget: Daqifi.Core, 0.22.0"
#:package Daqifi.Core@0.22.0
#addin nuget:?package=Daqifi.Core&version=0.22.0
#tool nuget:?package=Daqifi.Core&version=0.22.0
DAQiFi Core
Revolutionizing the data collection experience with convenient, portable device connectivity.
The official cross-platform .NET SDK for DAQiFi wireless data acquisition devices.
daqifi.com · DAQiFi Desktop · Report an issue
What is DAQiFi Core?
DAQiFi builds wireless data acquisition hardware designed to get out of the way so you can focus on the data, not the collection process.
DAQiFi Core is how you integrate that hardware into your own .NET applications — custom dashboards, automated test rigs, research pipelines, production-monitoring tools. Discover devices, connect over WiFi or USB, stream samples in real time, configure networks, push firmware updates — all from one async, strongly-typed .NET API.
Prefer a ready-made GUI? Check out DAQiFi Desktop, which is built on top of this library.
See it in 30 seconds
dotnet add package Daqifi.Core
using Daqifi.Core.Device;
using Daqifi.Core.Communication.Producers;
// Connect — transport and device initialization handled for you
using var device = await DaqifiDeviceFactory.ConnectTcpAsync("192.168.1.100", 9760);
// Subscribe to incoming samples
device.MessageReceived += (_, e) =>
{
if (e.Message.Data is DaqifiOutMessage msg)
Console.WriteLine($"{msg.MsgTimeStamp}: {string.Join(", ", msg.AnalogInData)}");
};
// Enable analog channels via bitmask (0b11 = first 2 channels), then stream at 100 Hz
device.Send(ScpiMessageProducer.EnableAdcChannels("3"));
device.Send(ScpiMessageProducer.StartStreaming(100));
A real, working program — no GUI required.
Common applications
DAQiFi hardware is in the field for work like:
- Research labs — moon regolith testing and similar materials studies
- Medical R&D — prosthetic socket pressure testing
- Industrial monitoring — wireless multi-channel sensing
- Engineering education — SCPI command structure and LabVIEW compatibility
- Test automation — scripted benchtop measurements
More examples at daqifi.com.
Where DAQiFi Core fits
| Layer | What it is |
|---|---|
| Hardware | Nyquist 1 / Nyquist 3 — wireless DAQ devices (and their on-device firmware) |
| SDK | DAQiFi Core — this library |
| App | DAQiFi Desktop — GUI built on this SDK |
| Your code | Custom apps, dashboards, pipelines, test rigs |
What you can do
| Capability | What it gives you |
|---|---|
| Auto-discovery | Find any DAQiFi on WiFi or USB in seconds — no IP hunting, no config files |
| One-line connect | DaqifiDeviceFactory.ConnectTcpAsync(...) wraps transport setup and device init; retries are opt-in via DeviceConnectionOptions |
| Real-time streaming | Event-driven async API; no polling loops to write |
| SD card operations | List, download, delete, format, and start/stop SD logging over USB / serial |
| Network configuration | Push WiFi credentials and static LAN IPs from your app |
| Firmware updates | PIC32 and WiFi-module flashing with progress and cancellation |
| Cross-platform | .NET 9.0 and 10.0 on Windows, macOS, Linux |
Quick recipes
Connection options
Pick whichever transport fits your setup — each snippet is a standalone, copy-paste-ready starting point.
TCP with a resilient retry preset (5 retries, longer timeouts):
using var device = await DaqifiDeviceFactory.ConnectTcpAsync(
"192.168.1.100", 9760, DeviceConnectionOptions.Resilient);
Serial / USB:
// Replace with your OS-specific port:
// Windows: "COM3" • macOS: "/dev/cu.usbmodem1" • Linux: "/dev/ttyACM0"
using var device = await DaqifiDeviceFactory.ConnectSerialAsync("COM3");
From a discovered device:
using var finder = new WiFiDeviceFinder();
var devices = await finder.DiscoverAsync(TimeSpan.FromSeconds(5));
using var device = await DaqifiDeviceFactory.ConnectFromDeviceInfoAsync(devices.First());
Custom retry options
using Daqifi.Core.Communication.Transport;
var options = new DeviceConnectionOptions
{
DeviceName = "My DAQiFi",
ConnectionRetry = new ConnectionRetryOptions
{
MaxAttempts = 3,
ConnectionTimeout = TimeSpan.FromSeconds(10)
},
InitializeDevice = true
};
using var device = await DaqifiDeviceFactory.ConnectTcpAsync("192.168.1.100", 9760, options);
Device discovery
using Daqifi.Core.Device.Discovery;
// WiFi — UDP broadcast on port 30303 by default
using var wifiFinder = new WiFiDeviceFinder();
wifiFinder.DeviceDiscovered += (_, e) =>
Console.WriteLine($"Found: {e.DeviceInfo.Name} at {e.DeviceInfo.IPAddress}");
var wifiDevices = await wifiFinder.DiscoverAsync(TimeSpan.FromSeconds(5));
// USB / Serial
using var serialFinder = new SerialDeviceFinder();
var serialDevices = await serialFinder.DiscoverAsync();
Need fine-grained control? Pass a CancellationToken or override the discovery port:
using var cts = new CancellationTokenSource();
cts.CancelAfter(TimeSpan.FromSeconds(10));
var devices = await wifiFinder.DiscoverAsync(cts.Token);
using var customFinder = new WiFiDeviceFinder(discoveryPort: 12345);
Network configuration
Devices implementing INetworkConfigurable accept programmatic WiFi and LAN configuration. Mode, Ssid, and Password are always applied on every call; only StaticIP, SubnetMask, and Gateway honor null as "leave unchanged" — so DHCP-only callers can omit the static-IP fields without affecting their DHCP setup.
using System.Net;
using Daqifi.Core.Device.Network;
if (device is INetworkConfigurable networkDevice)
{
var config = new NetworkConfiguration
{
Ssid = "MyNetwork",
Password = "secret",
Mode = WifiMode.ExistingNetwork,
StaticIP = IPAddress.Parse("192.168.1.42"),
SubnetMask = IPAddress.Parse("255.255.255.0"),
Gateway = IPAddress.Parse("192.168.1.1"),
};
await networkDevice.UpdateNetworkConfigurationAsync(config);
}
Firmware updates
IFirmwareUpdateService orchestrates both PIC32 and WiFi-module flashing with explicit state transitions and IProgress<FirmwareUpdateProgress> for UI / CLI reporting.
UpdateFirmwareAsync(...)— PIC32 firmware flashing from a local Intel HEX fileUpdateWifiModuleAsync(...)— WiFi module flashing via an external tool runner. Automatically checks the device's current WiFi-chip firmware against the latest GitHub release and skips the flash if already up to date.
Note: The default WiFi flash tool config uses
winc_flash_tool.cmdconventions. On macOS / Linux, supply a compatible executable and argument template viaFirmwareUpdateServiceOptions.
Supported devices
| Device | Channels | Resolution | Range |
|---|---|---|---|
| Nyquist 1 | 16 analog in | 12-bit | 0–5 V |
| Nyquist 3 | 8 analog in | 18-bit | ±10 V |
Both are auto-detected by part number during discovery.
Don't have one yet? See the DAQiFi lineup →
Connection types
- WiFi — discovered via UDP broadcast (port 30303)
- Serial — USB-connected, enumerated as serial ports
- HID — used during firmware updates (HidSharp backend)
Requirements
- .NET 9.0 or .NET 10.0 on Windows, macOS, or Linux
- WiFi discovery: UDP port 30303 reachable (firewall may need configuring; admin may be required on Windows)
- Serial discovery: appropriate USB drivers for your platform
Community & support
- Open an issue for bugs or feature requests
- Reach the team via daqifi.com for commercial integrations and custom hardware needs
For maintainers
This library follows semantic versioning. Releases are automated via GitHub Actions:
- Create a new GitHub Release
- Tag it
vX.Y.Z(pre-releases use-alpha.1,-beta.1,-rc.1suffixes) - Publishing to NuGet happens automatically on release
<p align="center"> Built by <a href="https://daqifi.com">DAQiFi</a> · Licensed under <a href="LICENSE">MIT</a> </p>
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Google.Protobuf (>= 3.34.1)
- HidSharp (>= 2.6.4)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.8)
- System.IO.Ports (>= 10.0.8)
- System.Management (>= 10.0.8)
-
net9.0
- Google.Protobuf (>= 3.34.1)
- HidSharp (>= 2.6.4)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.8)
- System.IO.Ports (>= 10.0.8)
- System.Management (>= 10.0.8)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.22.0 | 124 | 5/28/2026 |
| 0.21.0 | 158 | 5/2/2026 |
| 0.20.0 | 121 | 4/25/2026 |
| 0.19.7 | 130 | 4/25/2026 |
| 0.19.6 | 112 | 4/20/2026 |
| 0.19.5 | 165 | 4/4/2026 |
| 0.19.4 | 166 | 3/20/2026 |
| 0.19.3 | 110 | 3/20/2026 |
| 0.19.2 | 125 | 3/16/2026 |
| 0.19.1 | 159 | 3/13/2026 |
| 0.19.0 | 127 | 3/11/2026 |
| 0.18.3 | 148 | 2/28/2026 |
| 0.18.2 | 121 | 2/28/2026 |
| 0.18.1 | 114 | 2/25/2026 |
| 0.18.0 | 134 | 2/21/2026 |
| 0.17.0 | 109 | 2/18/2026 |
| 0.16.0 | 117 | 2/13/2026 |
| 0.15.1 | 128 | 2/7/2026 |
| 0.15.0 | 119 | 2/6/2026 |
| 0.14.0 | 154 | 2/4/2026 |