Så installerar du libnfc på Ubuntu 18.04

NFC-läsaren ACR122U

Programbiblioteket libnfc behövs för att kunna skriva till och läsa från bland annat ett Mifare-kort (men kan göra mycket mer än så också). libnfc finns för alla vanligt förekommande operativsystem. Detta programbibliotek är möjligen det mest populära när man vill koppla en NFC-läsare till sin dator och använda den på olika sätt. Däremot var det länge sedan libnfc uppdaterades och de beskrivningar som finns av hur man installerar programbiblioteket börjar bli utdaterade. Det är inte helt självklart hur man faktiskt installerar den, och speciellt inte om man vill att den ska lira snällt med andra mjukvaror. I den här guiden kommer vi beskriva hur man installerar libnfc på Ubuntu 18.04 LTS på bästa möjliga sätt.

Vad du behöver

1. En dator med en Linux-distribution installerat (eller Windows med en virtuell maskin). I den här guiden använder vi Ubuntu 18.04.2 LTS.
2. En NFC-läsare, och vi rekommenderar ACR122U.

Ladda ned och installera libnfc

Man kan installera libnfc på flera olika sätt. Vi rekommenderar att man laddar ned den senaste utvecklingsversionen från GitHub och kompilerar koden själv. Vi följde instruktionerna för installation av libnfc som finns på denna sida, men det funkar inte att följa instruktionerna rakt av, så vi gjorde med några variationer som är beskrivet här nedan.

1. Ladda ned källkoden från GitHub.

2. Extrahera mappen från zipfilen.

3. Öppna terminalen och byt mapp till libnfc-mappen som du precis laddade ned och extraherade.

4. Se till att installera dh-autoreconf med

sudo apt-get install dh-autoreconf

5. Kör sedan autoreconf i den mappen där alla filer för libnfc finns med

autoreconf -v -i -s

6. Nu ska du köra ./configure. Men det finns vissa saker att tänka på innan du gör det. För det första kommer configure kontrollera att du har diverse andra programbibliotek installerade innan den skapar makefilen. Vi saknade doxygen. Det var bara att installera med sudo apt-get install doxygen.

Det andra man behöver tänka på är var man vill installera nfclib. Vi rekommenderar att man installerar enligt kommandot nedan då den binära filen bör hamna i en mapp som vanligtvis finns med i PATH-variabeln (då kan operativsystemet hitta det). Och konfigurationsfilerna hamnar i etc-mappen (vilket är standard). Om du är nöjd med detta kan du köra följande kommando

./configure --enable-doc --prefix=/usr --sysconfdir=/etc

Förhoppningsvis får du inga felmeddelanden. Om det kommer ett felmeddelande om att det saknas ett programbibliotek så kan du prova om du kan installera det med sudo apt-get install.

7. Kör kommandot make. Koden kommer nu att kompileras.

Testa om libnfc kan hitta läsaren och läsa ett kort
Innan vi forsätter installationen ska vi testa så att libnfc kan hitta läsaren och även läsa av ett kort. I mappen utils finns det verktyg för att testa dessa saker.

1. Sätt in din läsare i USB-porten och skriv i terminalen:

utils/nfc-scan-device -v

Du kommer troligen få ett felmeddelande i stil med:

Unable to claim USB interface (Device or resource busy)

Felmeddelandet innebär att en modul håller USB-gränssnittet upptaget. Följ instruktionerna nedan för att lösa problemet.

2. För att se vilken modul som hållet gränssnittet upptaget skriv

lsmod | grep nfc

Du får en output i likhet med:

nfc 118784 1 pn533

För att ta bort denna modul (tillfälligt) skriv:

sudo rmmod pn533_usb pn533

3. Testa igen att skriva:

utils/nfc-scan-device -v

Denna gång bör du få ett meddelande i stil med:

1 NFC device(s) found:
- ACS / ACR122U PICC Interface:
acr122_usb:002:004

4. Lägg nu ett Mifare-kort på läsaren. Vi ska testa om nfclib kan använda läsaren för att läsa av kortet. Skriv i terminalen:

utils/nfc-list

Du får grundläggande information om chippet i stil med:

NFC device: ACS / ACR122U PICC Interface opened
1 ISO14443A passive target(s) found:
ISO/IEC 14443A (106 kbps) target:
ATQA (SENS_RES): 00 02
UID (NFCID1): 8e 37 b1 51
SAK (SEL_RES): 18

Du kanske även får felmeddelandet Command Code verification failed. Vi kunde inte någon lösning på detta felmeddelande och fortsatte installationen utan att ha löst problemet. Det verkar lösa sig efter att man genomfört det sista steget.

Slutför installationen av libnfc

Nu kan du avsluta installationen av nfclib genom att skriva följande i terminalen:

sudo make install

Nu ska libnfc vara installerat. Du kan testa genom att lägga ett kort på läsaren och skriva

nfc-list

Den här gången behöver man inte skriva utils före efter som operativsystemet kommer leta efter verktyget i /usr mappen som du angav när du installerade programmet. Om du återigen får information om kortet så har installationen lyckats.

Det finns inget program/kommando som heter nfclib. libnfc består av en rad olika program/kommandon/verktyg och en lista på dessa finns här. Det finns bland annat verktyg att skriva och läsa från Mifare Classic- och Ultralight-kort. Vi kommer visa hur dessa verktyg fungerar i kommande inlägg.

Enkelt låssystem med NFC Shield för Arduino

Om man vill använda sitt chip till något som det inte finns någon lösning för är det inte omöjligt att man själv kan bygga en lösning för problemet. Har man motivationen och kan lite elektronik och programmering kan man komma ganska långt. Då behöver man bara hårdvaran. Vi kommer skriva om den hårdvara som finns i dagsläget på marknaden och som antingen fungerar bra eller åtminstone hyfsat bra med chippen, och vi börjar med läsaren som kallas för NFC Shield V2.1. Detta är en (som kan tolkas ur namnet på den) en NFC (13,56 MHz) shield för Arduino och har utvecklats av Seeed Studio. Det är open source hårdvara så dokumentationen för läsaren är väldigt bra. Det är en läsare som fungerar ovanligt bra med chippen NTAG216 och Mifare Classic. Eftersom det är en shield finns det inte mycket att tänka på för att komma igång, och en annan bra grej med den här shielden är att själva antennen hänger löst i en tråd, så det är lättare att placera den på ett sätt som passar ens tilltänkta användningsområde bättre. Här visar vi hur du kan använda denna shield för att läsa av ett chip (eller en nyckeltagg/kort) för att sedan tända en LED, baserat på om id-numret på chippet stämmer med det numret som finns sparat i koden. Istället för att tända en LED skulle man självklart kunna låsa upp ett lås istället. Denna applikation finns även beskrivet på dokumentation-sidan för shielden.

NFC Shield V2.1
NFC Shield V2.1 från Seeed Studio.

Hårdvara och material

  • 1 st Arduino (vilken modell som helst, förutom Intel Edison)
  • 1 st NFC Shield V2.0 eller V2.1
  • 1 st Kopplingsplatta
  • 2 st LED (förslagsvis en röd och en grön)
  • 2 st 1kΩ resistor
  • Kopplingstråd

Installera nödvändiga programbibliotek

Innan vi börjar koppla ihop allting behöver vi installera några programbibliotek. Om du inte redan har installerat Arduinos IDE kan du ladda ned det här och installera enligt instruktionerna för ditt operativsystem (det finns även en online-editor, men jag har inte testat den). Sedan behöver vi ladda ned programbiblioteken för att kunna använda NFC shielden.

  1. Stäng ned IDEn om det inte redan är nedstängt
  2. Ladda ned zipfilen programbiblioteket för PN532 och extrahera filerna.
  3. Kopiera mapparna för PN532, PN532_HSU, PN532_SPI, and PN532_I2C till mappen i din Arduino-mapp som heter libraries.
  4. Ladda ned Dons NDEF programbibliotek och extrahera filerna.
  5. Byt namn på mappen NDEF-master till NDEF och kopiera även denna mapp till mappen libraries i din Arduino-mapp.
  6. Starta nu Arduinos IDE. Nu ska du kunna se NDEF och PN532 som alternativ under File > Examples.

Läsa av ett chip med NFC Shield

Nu kan vi ta reda på vilket id-nummer som ditt chip har, och därefter kan vi spara den i koden och jämföra med det id-numret som vi kommer läsa från ditt chip. Sätt ihop din shield och sätt den på din Arduino, om det inte redan levereras som ett färdigt paket. Kopiera sedan koden nedan till din Arduino IDE och ladda upp koden till din Arduino.

Sedan behöver du göra följande:

  1. Öppna Serial monitor-fönstret under Verktyg > Seriell Monitor.
  2. Sätt baudrate till 115200.
  3. Håll nu läsarens antenn mot ditt chip. Id-numret på chippet och annan information kommer läsas av och printas ut i monitorn (se bilden nedan).
  4. Anteckna id-numret på chippet, vilket är markerat i bilden.

Dörrlåssystem med NFC Shield

Nu kan vi fortsätta med att bygga dörrlåssystemet. Det här är ett väldigt enkelt exempel. Systemet kommer läsa av id-numret av ett chip (eller kort) och jämföra det med ett id-numer som finns sparat i en variabel i koden. Om numret i variabeln stämmer överens med numret som finns på chippet kommer den gröna LEDn att blinka. Annars börjar den röda LEDn blinka.

Sätt ihop alla delar på enligt schemat nedan.

Kopplingsschema för dörrlås
Kopplingsschema för enkelt dörrlåssystem. Bild från seeedstudio.com

Öppna sedan upp en ny sketch och kopiera in koden nedan:

På rad 6 hittar du variabeln myUID. Ändra denna till ditt eget UID som du läste av i första delen. Ladda sedan koden till din Arduino. Öppna Seriell Monitor igen och läs först av ditt eget chip. Den gröna LEDn ska börja blinka. Läs sedan av till exempel ditt busskort. Den röda LEDn ska börja blinka.

Detta går sedan att bygga ut och koppla till exempel diverse lås. Resultatet går se i Youtube-videon nedan.

Chipster.io – Chip, IoT och smarta hem

Chipster.io är en del av Chipster, som verkar inom fälten för chippning, NFC, RFID, smarta hem och närliggande områden. Chipster.io är ett försök att fokusera på de mer tekniska aspekterna av chippen. För att uppmuntra de som är chippade att bygga sina egna lösningar vill vi sprida kunskap om teknikerna som chippen bygger på och hur man kan integrera dem med annan teknik. Till exempel vill vi visa hur man skriver kod för att läsa av ett chip med NFC-läsare, hur man använder en Proxmark3 för att undersöka ett chip och klona informationen, hur man använder en PN532-läsare med Arduino, vi kommer tipsa om hårdvara som funkar med chippen och massa andra saker med lite mer teknisk djup än vad man hittar på Chipster.nu.

Vi har märkt att de som är chippade eller som är intresserade av att chippa sig ofta också är intresserade av teknik i övrigt och då speciellt smarta hem och IoT. Men information om hur man kan integrera chippen i det smarta hemmet är väldigt bristfälligt, och produkter som funkar med chippen är få. Vi vill med den här bloggen dela med oss av den kunskap vi har kring de tekniska aspekterna av chippen, visa på hårdvara som fungerar med chippen, visa hur man integrerar chippen med annan hårdvara och ge inspiration till vad man kan göra med chippen. Nivån på texterna kommer rikta sig till de som redan har en bra grundläggande förståelse för hård- och mjukvara. Det är med andra ord inte en blogg som vänder sig till den absoluta nybörjaren. För den absoluta nybörjaren rekommenderar vi guiderna som går att hitta på Chipster.nu.

Men vi kommer även att skriva, berätta om och visa på annan teknik som inte har en direkt koppling till chippen men ligger nära chippen som teknikområde, som till exempel smarta hem, IoT och annan teknik och elektronik som ligger nära dessa områden och som är vanligt förekommande i gör-det-själv-rörelser (som till exempel 3D-printing, Arduino, Raspberry Pi och så vidare). Förhoppningen är som sagt att kunna förmedla vår kunskap och erfarenhet så andra kan bygga sina egna lösningar (och gärna dela dessa med oss och andra så vi kan fortsätta den positiva spiralen).

Redan under helgen kommer ett första superenkla exempel på vad man kan göra med en PN532-läsare som är en NFC-läsare till Arduino. Vill man ha en NFC-läsare för Arduino rekommenderas denna, men mer om det i nästa och kommande inlägg.