https://github.com/peterhellberg/acr122u
A Go package for the ACR122U USB NFC Reader
https://github.com/peterhellberg/acr122u
acr122u go nfc reader
Last synced: 5 months ago
JSON representation
A Go package for the ACR122U USB NFC Reader
- Host: GitHub
- URL: https://github.com/peterhellberg/acr122u
- Owner: peterhellberg
- License: mit
- Created: 2018-10-21T21:03:38.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2023-04-28T10:39:54.000Z (almost 3 years ago)
- Last Synced: 2025-04-11T06:21:01.768Z (10 months ago)
- Topics: acr122u, go, nfc, reader
- Language: Go
- Homepage: https://godoc.org/github.com/peterhellberg/acr122u
- Size: 25.4 KB
- Stars: 41
- Watchers: 2
- Forks: 16
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# acr122u

[](httpsgithub.com/peterhellberg/acr122u/actions/workflows/test.yml)
[](https://goreportcard.com/report/github.com/peterhellberg/acr122u)
[](https://godoc.org/github.com/peterhellberg/acr122u)
[](https://github.com/peterhellberg/acr122u#license-mit)
This is a Go package for the ACR122U USB NFC Reader
## Requirements
- - ACR122U USB NFC Reader
- - Middleware to access a smart card using SCard API (PC/SC)
- - Go bindings to the PC/SC API
Under macOS `pcsc-lite` can be installed using homebrew: `brew install pcsc-lite`
## Installation
go get -u github.com/peterhellberg/acr122u
## Usage
### Minimal example
```go
package main
import (
"fmt"
"github.com/peterhellberg/acr122u"
)
func main() {
ctx, err := acr122u.EstablishContext()
if err != nil {
panic(err)
}
ctx.ServeFunc(func(c acr122u.Card) {
fmt.Printf("%x\n", c.UID())
})
}
```
### Using a struct that implements the `acr122u.Handler` interface
```go
package main
import (
"log"
"os"
"github.com/peterhellberg/acr122u"
)
func main() {
ctx, err := acr122u.EstablishContext()
if err != nil {
panic(err)
}
h := &handler{log.New(os.Stdout, "", 0)}
ctx.Serve(h)
}
type handler struct {
acr122u.Logger
}
func (h *handler) ServeCard(c acr122u.Card) {
h.Printf("%x\n", c.UID())
}
```
### NATS
[NATS](https://nats.io/) is my favorite messaging system,
so let’s see how we can use it with this package:
#### Publish each UID to a NATS subject
```go
package main
import (
nats "github.com/nats-io/go-nats"
acr122u "github.com/peterhellberg/acr122u"
)
func main() {
nc, err := nats.Connect(nats.DefaultURL)
if err != nil {
panic(err)
}
ctx, err := acr122u.EstablishContext()
if err != nil {
panic(err)
}
ctx.ServeFunc(func(c acr122u.Card) {
nc.Publish("acr122u", c.UID())
})
}
```
#### Subscribe to the NATS subject
```go
package main
import (
"fmt"
"runtime"
nats "github.com/nats-io/go-nats"
)
func main() {
nc, err := nats.Connect(nats.DefaultURL)
if err != nil {
panic(err)
}
nc.Subscribe("acr122u", func(m *nats.Msg) {
fmt.Printf("Received UID: %x\n", m.Data)
})
runtime.Goexit()
}
```
## License (MIT)
Copyright (c) 2018-2023 [Peter Hellberg](https://c7.se)
> Permission is hereby granted, free of charge, to any person obtaining
> a copy of this software and associated documentation files (the
> "Software"), to deal in the Software without restriction, including
> without limitation the rights to use, copy, modify, merge, publish,
> distribute, sublicense, and/or sell copies of the Software, and to
> permit persons to whom the Software is furnished to do so, subject to
> the following conditions:
>
> The above copyright notice and this permission notice shall be
> included in all copies or substantial portions of the Software.
>
> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
> LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
> OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
> WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.