Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mikegoatly/pijuicesharp
An implementation of the PiJuice client library in .NET
https://github.com/mikegoatly/pijuicesharp
battery battery-monitoring csharp dotnet dotnet-core pijuice raspberry-pi
Last synced: about 2 months ago
JSON representation
An implementation of the PiJuice client library in .NET
- Host: GitHub
- URL: https://github.com/mikegoatly/pijuicesharp
- Owner: mikegoatly
- License: mit
- Created: 2023-09-04T15:48:32.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2023-11-14T10:50:35.000Z (about 1 year ago)
- Last Synced: 2024-10-31T18:07:23.890Z (2 months ago)
- Topics: battery, battery-monitoring, csharp, dotnet, dotnet-core, pijuice, raspberry-pi
- Language: C#
- Homepage:
- Size: 61.5 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# PiJuiceSharp
![PiJuiceSharp logo](/docs/favicon-256.png)
An implementation of the PiJuice client library based on the original [PiJuice Python library](https://github.com/PiSupply/PiJuice/blob/master/Software/Source/pijuice.py)
in pure .NET. Currently packaged as a .NET 6 library with only a dependency on `System.Device.Gpio`.Only a subset of the Status APIs are currently supported, and other APIs such as the RTC and Power Management are not yet implemented.
Implementing others should be fairly straightforward, but I just don't have a need for them at the moment - contributions are welcome if you
need to extend it!This library is safe to use even if you don't know that the device will have a PiJuice attached. When a PiJuice isn't present,
default values will be returned for all APIs, and a value of `NoPiJuice` for `GetStatus().BatteryStatus`.## Installation
You can install the library from [NuGet](https://www.nuget.org/packages/PiJuiceSharp/):
``` bash
dotnet add package PiJuiceSharp
```## PiJuiceStatus
You can use the `PiJuiceStatus` class to get various point-in-time status values of the PiJuice board.
To construct a `PiJuiceStatus`, call `PiJuiceStatus.Create()`. This returns an implementation of `IPiJuiceStatus` which will be either a
fully connected `PiJuiceStatus` instance or an `AbsentPiJuiceStatus` instance which handles the case when no PiJuice was present.``` csharp
var piJuiceStatus = PiJuiceStatus.Create();
```If you're using dependency injection, you can configure the `IPiJuiceStatus` interface as a singleton:
``` csharp
services.AddSingleton(PiJuiceStatus.Create());
```## PiJuice Status APIs
`GetStatus()` returns an object containing basic status information, defined as:
``` csharp
public enum BatteryStatus
{
Normal = 0,
ChargingFromIn = 1,
ChargingFrom5vIo = 2,
NotPresent = 3,
NoPiJuice = 8000
}public enum PowerInputStatus
{
NotPresent = 0,
Bad = 1,
Weak = 2,
Present = 3
}public record struct StatusInfo(
bool IsFault,
bool IsButton,
BatteryStatus BatteryStatus,
PowerInputStatus PowerInput,
PowerInputStatus PowerInput5vIo);
````GetChargeLevel()` returns the current charge level of the battery, as a percentage.
`GetFaultStatus()` returns a dictionary containing the current fault status information of the PiJuice board:
```
forced_power_off: True
````GetBatteryVoltage()` returns the current voltage of the battery, in volts.
`GetBatteryCurrent()` returns the current current of the battery, in amps.
`GetBatteryTemperature()` returns the current temperature of the battery, in degrees Celsius.
`GetIoVoltage()` returns the current voltage of the GPIO pins, in volts.
`GetIoCurrent()` returns the current current of the GPIO pins, in amps.
### Working with LEDs
The status API also allows you to read and set the LED colors, including a temporary blinking state.
`GetLedState(Led led)` returns a `Color` struct containing the RGB state of either the `Led.D1` or `Led.D2` LED
`SetLedState(Led led, Color color)` sets the RGB state of either the `Led.D1` or `Led.D2` LED to the given `Color`. (Note that if the LED is not in a user configurable state, this will have no effect.)
`GetLedBlinkState(Led led)` returns an `LedBlinkState` struct containing the current blinking state of either the `Led.D1` or `Led.D2` LED. `LedBlinkState` is defined as:
``` csharp
public record struct LedBlinkState(byte Count, Color Rgb1, short Period1, Color Rgb2, short Period2);
````SetLedBlinkState(Led led, LedBlinkState state)` sets the blinking state of either the `Led.D1` or `Led.D2` LED to the given `LedBlinkState`. (Note that if the LED is not in a user configurable state, this will have no effect.)
## Thread safety
By using a single `SemaphoreSlim` instance across all instances of `PiJuiceInterface`, the library guarantees that thread safety is enforced
when communicating with the PiJuice.