Direktkommunikation mellan Raspberry Pi och Arduino med Nanpy

Arduino och Raspberry Pi har vissa likheter, men det är också mycket som skiljer dem åt. Även på tillbehörssidan ser det lite annorlunda ut, särskilt som Arduinon har massor av så kallade ”shields” för att bygga ut funktionaliteten och även analoga portar, vilket Raspberry Pi saknar. Pi:n å andra sidan är en fullfjädrad dator och kan således göra mer avancerade beräkningar och köra de flesta program som går att kompilera på Linux.

Men om man vill ha det bästa av två världar, vad gör man då? Man kan såklart använda en ADC, Analog-till-Digital-konverterare, för att använda analoga inputs. Men det löser bara ett av problemen.

Därför ska vi nu titta på Nanpy, vilket man kan använda för att direktkommunicera mellan en Pi och en Arduino över USB! 😀

RPi + Arduino = Love

Observera att import av Arduino-bibliotek inte är helt trivialt i Nanpy och att dessa måste portas innan de kan användas. Därför lämpar sig i dagsläget inte Nanpy till allt (även om det är en bit på vägen!).

Nanpy består av två delar, en firmware som man flashar Arduinon med för att förbereda den på ”det nya sättet att arbeta”, och så ett Python-bibliotek som man importerar på Pi:n för att skicka kommandon och ta emot data från Arduinon. Funktionerna i biblioteket, i sin tur, påminner väldigt mycket om de funktioner man använder när man kodar direkt mot Arduino, så det är lätt att komma igång om man är van med Arduino (se här för en introduktion till Arduino respektive USB!).

Dessa steg görs förslagsvis på din Raspberry Pi. Det går såklart göra på en vanlig dator också, om man hellre vill det.

Till att börja med måste vi ge användarkontot behörighet att arbeta mot seriellportarna (USB-portarna). Detta görs genom att skriva följande i terminalen (byt ut ”pi” mot ditt användarnamn om du har något annat):

Sen vill vi installera Arduino IDE (och python-setuptools, vilket kommer behövas senare), också det från terminalen:

Nanpy finns att ladda ner på Github, först behöver man ladda ner och konfigurera Arduino-firmwaren (direktlänk till nedladdning).

Efter att ha packat upp denna fil måste man konfigurera firmwaren. Detta görs genom att redigera filen ”sample_cfg.h” som ligger i firmware-mappen. Den ser ut så här:

Om man t.ex. vill använda sig av DS18B20-temperatursensorer behöver man ändra motsvarande #define för USE_OneWire och USE_DallasTemperature till 1. Observera att för att detta ska fungera behöver man också ha dessa paket installerade i Arduino IDE! Vi kan gå igenom hur man gör detta i ett senare inlägg.

När man är nöjd med config-filen förbereder man firmwaren för installation på Arduinon genom att skriva följande när man står i firmware-mappen i terminalen:

Sedan kopierar man in mappen, som heter ”Nanpy”, i Arduinos sketchbook-mapp. Sen startar man IDE:n, klickar på File -> Sketchbook -> Nanpy och i det nya fönster som öppnas klickar man på Upload (den runda knappen högst upp med en pil som pekar åt höger)!

Därefter kan man avsluta Arduino IDE, och ladda ner Python-biblioteket (också det från Github (direktlänk till nedladdning)), och packar upp filen.

Att installera detta paket är om möjligt ännu enklare än firmwaren, när man står i mappen (”nanpy-master” i mitt fall) i terminalen så finns ett Python-script, setup.py, som man kan köra för att installera det:

Då var det installerat och klart! Nu kan vi importera biblioteket i Python och använda det i vår kod! Här är ett enkelt exempel som tänder och släcker lampan med 1 sekunds mellanrum:

Nanpy test (281 nedladdningar)

Inga konstigheter, eller hur? Vad man nu kan tänkas vilja använda detta till vet jag inte, men visst är det häftigt att ha möjligheten?

Om det är något paket du känner saknas till Nanpy så kan det hända att det är hyfsat enkelt att porta. Hör i så fall av dig i kommentarer e.d. så kan jag titta vidare på det!

Förslag på fortsättningsprojekt mottages också! 🙂

Kommentera