Lägga till Bluetooth 4.0 till din Arduino projekt [IoT] - kontrolleras av Smartphone (3 / 8 steg)
Steg 3: SPI, REQ, RDY och RST stift (valfritt)
Om du inte har den Arduino UNO som i schematiskt, ägna stor uppmärksamhet åt den Arduino pin-kod som du ansluter kablarna till. De första 3 finnar, märkt SCK, MISO och MOSI, måste gå till stift 13, 12 och 11 respektive. Detta bör vara samma för alla ATMega328P baserad Arduinos (Uno/Duemilanove). Om du har en annan Arduino, måste du ta reda på vilket stift är SPI och koppla dem istället.
---------SPI-----------
Dessa tre stift är viktiga eftersom de utgör en speciell hårdvara enhet på Arduino kallas seriellt perifera gränssnitt eller SPI. Arduino stift 13 är SCK (seriell klocka), 12 MISO (Master i slav ute) och 11 MOSI (Master ut slav i). Arduino SPI är ansluten till en motsvarande 3 stift SPI enhet på nRF8001. Arduino fungerar som master och nRF som slav, men rollerna kan vändas i teorin. Begreppet SPI är ganska enkel. SCK pin klick upp och ner i ett regelbundet fördelade square wave (square wave vilket betyder att den har två värden, hög eller låg). För varje klick av SCK pin, slaven ser på MOSI och siffror om spänningen är hög eller låg. Mästaren gör samma på MISO. Om en hög spänning är läst, är som en '1'. Om en låg spänning är läst, är som en '0'. På detta sätt en sekvens av 1: or och 0: or överförs och översatt till bokstäver, siffror och kommandon som programvaran kan sedan agera på. För nRF8001, dessa översatt bokstäver och siffror sänds över Bluetooth-anslutningen till telefonen. Bokstäver och siffror som nRF8001 skickar till din Arduino är vad det fått från telefonen via Bluetooth.
SPI är en användbar kommunikationsstandard eftersom det endast krävs 3 stift. Tekniskt SPI är endast ett protokoll och har ingenting att göra med hårdvaran. Du kan implementera ett SPI gränssnitt någonstans så länge du har 3 nåla fast gratis och kan vända dem på och av. Många mikrokontrollers har idag SPI hårdvarumoduler där genomförandet sker i kretsarna själva i stället för i programvara. Med detta kan kommunikationen över SPI göras mycket snabbare och mer exakt än möjligt om gjort i kod. Den enda nackdelen är att du måste använda dedikerad hårdvara SPI stiften, i motsats till några allmänna ändamål IO pinnar.
-----------REQ--------------
Strängt taget krävs bara 3 pins för att överföra data via ett SPI gränssnitt. Dock kan ytterligare stift användas att kontrollera informationsflödet. Dessa stift behöver inte vara del av hårdvara kretsen en SPI-modul och kan implementeras i programvara, eftersom de inte är inblandade i hög fartdata överför själva. En 4 pin är standard, kallas den slav Markera eller Chip pin. På nRF8001 tar REQ pin rollen som slav Välj (SS) PIN-koden. SS stiftet gör flera SPI slav enheter kan anslutas till samma 3 hårdvara stiften i bakgrunden (SCK, MOSI, MISO). Det vill säga, kan du ansluta 1 master SPI enhet till 2, 3 eller fler slavar och överföra data till någon av dem. Uppenbarligen är det osannolikt att alla slavar behöver samma information skickas till dem över MOSI samtidigt. Det är där SS stiftet kommer in. En slav kommer bara läsa instruktionerna kommer över sin MOSI linje om det har valts som "aktiva slave" genom att ha sin slav Välj linje hållas låg. Master måste därför en SS pin tillägnad varje slav ansluten till SPI raderna. När man vill prata med en viss slav, rymmer det SS pin motsvarar den slaven låg, samtidigt som alla andra SS stift hög. Endast den valda slaven kommer att kommunicera tills dess SS pin ligger högt. NRF8001 använder REQ linjen för att veta när det tillåts att kommunicera med befälhavaren Arduino. Om du behöver kommunicera med andra SPI enheter (till exempel, en sensor eller LCD-skärm), behöver du bara krok en annan gratis IO stift till att enhetens SS stift, och du kan ansluta enhetens SPI pins till samma 3 Arduino SPI stiften.
REQ PIN-koden behöver inte vara stift 10 på Arduino. Men om du ändrar det du kommer att behöva ändra raden i koden som säger "#define ADAFRUITBLE_REQ 10" där talet 10 bör ersättas med pin ansluten du REQ till.
---RDY och RST---
REQ PIN-koden anger att nRF som Arduino vill kommunicera över SPI. När Arduino begär att börja kommunicera genom att växla REQ stiftet, väntar det tills RDY växlar innan du faktiskt skickar data som indikerar att nRF är redo att ta emot. På samma sätt RDY PIN-koden anger till Arduino som nRF vill kommunicera. Och jämväl, efter växla RDY PIN-koden, nRF väntar tills Arduino växlar REQ PIN-koden innan du faktiskt börjar skicka data.
RDY PIN-koden är speciell. Som SPI stiften, kan det helt enkelt inte åter mappade till någon Arduino stift. Det måste vara nytt mappade till ett annat avbrott kan stift. Ett avbrott pin är en som övervakas av Arduino på hårdvara nivå. Om en signal kommer på avbryta pin, stannar Arduino allt det gör och går in i en särskild del av koden på adress avbryta PIN-koden. Detta är bra eftersom Arduino behöver inte sitta och kontrollera om nRF vill prata med det var några millisekunder. Arduinoen kan göra sin egen sak och om uppgifterna kommer, det meddelas omedelbart. Detta sparar batteriet, kan den Arduino fokuseringen på andra uppgifter (inklusive sova!) 99,9% av tiden som inga data som kommer in via Bluetooth och gör säker Arduino är mycket lyhörda när data slutligen ankommer. Ur användarkod behöver vi inte ta itu med alla Detaljer för kommunikation med Bluetooth-enheten alls. När information finns det "magiskt" får placeras i en särskild plats i minne (genom att avbryta koden bakom kulisserna) och vi behöver bara läsa den.
RST PIN-koden är enkel. Det i princip "startar om" nRF8001 när det ska växlas. Detta utförs av koden automatiskt när Arduino sig återställs. Som REQ stift, kan första stiftet mappas till eventuella oanvända Arduino pin, som "#define ADAFRUITBLE_RST 9" i början av koden ändras på lämpligt sätt.