From b9cc6e0aacf90eb02e1742396167c14ec7d6c784 Mon Sep 17 00:00:00 2001 From: Eveldee Date: Tue, 12 Jan 2021 18:17:41 +0100 Subject: [PATCH] Add README.md --- README.md | 68 ++++++++++++++++++ Sample.png | Bin 0 -> 43963 bytes .../README.md | 22 ++++++ 3 files changed, 90 insertions(+) create mode 100644 Sample.png create mode 100644 WaveshareUARTFingerprintSensor.Sample/README.md diff --git a/README.md b/README.md index e69de29..0b74a13 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,68 @@ +# Waveshare UART fingerprint sensor (C) + +A C# library for the [**Waveshare UART fingerprint sensor (C)**][Sensor], running on +.Net Framework 4.7 (**Mono**) on a **Raspberry Pi** + +This library is tested using a Raspberry Pi Zero (hence the use of Mono) +but should work on any Raspberry. +It should also be easily portable to any device that supports Mono +or an equivalent (*.Net Core*). + +## Usage + +- First install it from [**nuget**](https://www.nuget.org/packages/WaveshareUARTFingerprintSensor/) + +Then you only need to start the sensor + +```csharp +// PrimarySerialPort refers to /dev/ttyAMA0 +// SecondarySerialPort refers to /dev/ttyS0 +// You need to choose it according to your Raspberry +// Check the table below +var sensor = new FingerprintSensor(FingerprintSensor.PrimarySerialPort); + +sensor.Start(); + +// Do any command + +// Example: get the user count +if (sensor.TryGetUserCount(out ushort count)) +{ + Console.WriteLine($"User count: {count}"); +} +``` + +Here is a table of which serial port to use on which Raspberry Pi, +it may be different for you +| Model | Port | +| --------- | ---------------------- | +| Pi Zero | Primary (/dev/ttyAMA0) | +| Pi Zero W | Secondary (/dev/ttyS0) | +| Pi 1 | Primary (/dev/ttyAMA0) | +| Pi 2 | Primary (/dev/ttyAMA0) | +| Pi 3 | Secondary (/dev/ttyS0) | +| Pi Zero 4 | Secondary (/dev/ttyS0) | + +> The Secondary UART is **disabled by default**, you an activate it in `raspi-config` +> [**Source**](https://www.raspberrypi.org/documentation/configuration/uart.md) + +## Sample App + +You can find a [**sample app**](WaveshareUARTFingerprintSensor.Sample) which shows basic usages of +this library and may help you to understand how to use it + +## Contributing + +If you have a feature idea or want to report a bug, don't hesitate to create a new +[**Issue**](https://github.com/Eveldee/WaveshareUARTFingerprintSensor/issues) or do a +[**Pull Request**](https://github.com/Eveldee/WaveshareUARTFingerprintSensor/pulls) + +## Copyright and license + +*[**WaveshareUARTFingerprintSensor**](README.md)* library is licensed under the [MIT License](LICENSE). + +*[**Unosquare.Raspberry.IO**](https://github.com/migueldeicaza/gui.cs/)* library is under the [MIT License](https://github.com/unosquare/raspberryio/blob/master/LICENSE). + + + +[Sensor]: https://www.waveshare.com/wiki/UART_Fingerprint_Sensor_(C) \ No newline at end of file diff --git a/Sample.png b/Sample.png new file mode 100644 index 0000000000000000000000000000000000000000..a3df62db9b0cfe592b17dbdb023718d763ddba14 GIT binary patch literal 43963 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 literal 0 HcmV?d00001 diff --git a/WaveshareUARTFingerprintSensor.Sample/README.md b/WaveshareUARTFingerprintSensor.Sample/README.md new file mode 100644 index 0000000..205b929 --- /dev/null +++ b/WaveshareUARTFingerprintSensor.Sample/README.md @@ -0,0 +1,22 @@ +# Sample App + +A sample app for the [Waveshare UART fingerprint sensor (C) library](../README.md) + +![Sample](../Sample.png) + +## Build + +You can compile it using any **C# IDE** that supports **.Net Framework** or by running +`dotnet build` in a **terminal** using [**.Net CLI**](https://docs.microsoft.com/en-us/dotnet/core/tools/) + +## Usage + +- Install [**Mono**](https://www.mono-project.com/) on your Raspberry Pi +- [**Download**](https://github.com/Eveldee/WaveshareUARTFingerprintSensor/releases) or [**Build**](#build) the application +- Run it with `mono WaveshareUARTFingerprintSensor.Sample.exe` + +## Copyright and license + +*[**WaveshareUARTFingerprintSensor**](../README.md)* library is licensed under the [MIT License](../LICENSE). + +*[**gui.cs**](https://github.com/migueldeicaza/gui.cs/)* library is under the [MIT License](https://github.com/migueldeicaza/gui.cs/blob/master/LICENSE).