2-weg data
|
Twee-weg communicatie, ofwel stuur een commando heen en krijg een antwoord terug. Een echte interactie tussen twee apparaten. Bijvoorbeeld te gebruiken voor het maken van een afstandsbediening waarbij men bepaalde zaken kan aansturen of uitlezen. Wat hebben we nodig? We beginnen met één Arduino Duemilanove of Uno en een touchscreen van 2,4" of 2,8". Verder een tweetal JeeNodes V4 of V5 met bijbehorende LCD-plugs en LCD's (16x4). |
Het touchscreen neemt enorm veel I/O poorten van de Arduino in beslag, er blijven slechts enkele poorten beschikbaar, waaronder analoog 4 en 5. Dat komt goed uit, want laat dit nu net de signalen zijn die gebruikt worden voor I²C: Analoog 4 = SDA, Analoog 5 = SCL of SCK. |
|
De JeeNode V4 en V5 bevatten naast de benodigde RF12 (voor de draadloze communicatie) ook een 4-tal softwarematige I²C poorten en één hardwarematige I²C poort (welke Analoog 4 en 5 gebruikt). |
Deze softwarematige I²C poorten kunnen op hun beurt allerlei I²C sensoren aansturen, maar ook extra digitale of analoge I/O poorten. Hiervan zijn bij JeeLabs diverse producten verkrijgbaar. Voor een eerste test wordt er gebruik gemaakt van een analoge temperatuur sensor, de TMP36. Deze hebben we ook gebruikt in de Oomlout CIRC lessen (zie les CIRC-10). Op de andere JeeNode wordt ook een LCD aangesloten op P1. De Arduino met touchscreen wordt met een 6-aderige kabel aangesloten op de JeeNode's I²C aansluiting (genaamd PSI, let op, dat is dus NIET de SPI/ISP connector!). Zorg daarbij dat zowel de analoog 4 (SDA) en analoog 5 (SCL of SCK) via een weerstand van ongeveer 1k8 Ohm naar de plus is geschakeld en verbind ook de GND en Power door. Voor het touchscreen is de tft_lib library nodig, welke op de site van nuelectronics.com is te downloaden. Installeer deze in de "libraries" directory in de programma directory van Arduino. De twee sketches, één voor beide JeeNode's en één voor de Arduino met touchscreen kunnen hier (laatste update: Zondag 21 november 2010) gedownload worden als RAR-bestand. Dit is inclusief de gebruikte achtergrond plaatjes en enkele noodzakelijke files, zoals een aangepast lettertype het font "SMG_LCD.h". Laat die extra files in de directory staan waar de sketch staat en zet de plaatjes op een SD-kaart.
Voordat we data gaan versturen, dienen we eerst te bepalen wat we ermee willen. Dit resulteert in een protocol, waarin vastgelegd wordt wat voor soort data we hebben en hoe het wordt verzonden en ontvangen, dit zowel voor de I²C verbinding tussen de Arduino en de Jeenode als voor de draadloze verbinding tussen de JeeNode's. Stel we willen van een temperatuur sensor weten hoeveel graden het is, we noemen deze "temperatuur sensor 1". Het commando hiervoor kan de byte 0x10 zijn (hexadecimale notatie, waarbij 0x10 gelijk staat aan de decimale waarde 16). Dan in parameter 1 geven we op om welke sensor het gaat, in dit geval 0x01. De adressen die gebruikt worden zijn: In de software wordt rekening gehouden met het eigen adres (voordat je een JeeNode programmeert, zet dan het juiste adres in de sketch). Hierdoor blijft er één sketch die voor alle JeeNode's gebruikt kan worden, dat scheelt enorm met programmeren. Je moet anders voor elke JeeNode een eigen sketch bijhouden en met de vele versies software die nog gaan volgen is dat later niet meer te overzien.
Hoofdmenu Communicatie test menu LCD bij JeeNode Naast een enkele temperatuur sensor (TMP36) die nu nog tijdelijk direct op een analoge ingang van de Atmel op de JeeLink is aangesloten, wordt inmiddels ook gebruik gemaakt van andere JeeLabs pluggen, waaronder een Pressure Plug (pp1) en een Extender Plug (ep1). Het meten van de accuspanning (tot 12V) gaat volgens het principe dat hier is beschreven in een ander project. Verder zijn we gestart met het maken van een eigen extender plug (16-bit digitale I/O) op basis van de MCP23017 chip, zie hier voor meer info over dit aparte project.
Wordt vervolgd...
|