Upravljanje Arduinom s Androida putem USB-a. Šest jednostavnih načina za povezivanje Arduina s Androidom. Izrada Android aplikacije

💖 Sviđa li vam se? Podijelite vezu sa svojim prijateljima

Google već dulje vrijeme omogućava povezivanje Android uređaja putem USB-a s raznim mikrokontrolerima otvaranjem API-ja. Sada se mogu radovati svi koji sudjeluju u stvaranju raznih projekata na Arduinu, jer će sada biti puno lakše otkloniti pogreške u sustavu Android Arduino i, u načelu, regulirati njihovu interakciju.

Već smo počeli upoznavati čitatelje s mogućnostima kombiniranja mikrokontrolera i pametnog telefona - pogledajte.

Ali čak i prije toga, različiti moduli omogućili su Androidu i Arduinu laku interakciju. Hajde da shvatimo kako možete implementirati projekt koji će se kontrolirati s pametnog telefona i što je za to potrebno.

Gdje mogu koristiti vezu između Androida i Arduina?

Prije svega, morate razmisliti o tome kako iskoristiti mogućnost prijenosa signala s Androida na Arduino. Uostalom, prije proučavanja bilo kojeg materijala, svaka zdrava osoba trebala bi shvatiti kamo će ga to na kraju dovesti. Čak i ako govorimo o hobiju. Doista, mogućnost upravljanja opremom s vašeg pametnog telefona odavno se više ne doživljava kao nešto izvanredno. Danas većina televizora, hladnjaka pa čak i usisavača koje kupuje srednja klasa ima mogućnost prijenosa podataka na pametni telefon.

Ovo rješenje omogućuje značajno pojednostavljenje života prosječne osobe, jer za isti televizor nema potrebe stalno kupovati baterije za daljinski upravljač i tražiti ga ako se izgubi. Bližimo se cijenjenim pametnim kućama, ali neki ljudi radije ne kupuju takvu opremu, već je sami dizajniraju.

U ovom slučaju, Android Arduino paket treba razmotriti u dvije varijante:

  1. Daljinsko upravljanje bilo kojim uređajem pomoću pametnog telefona. Naziva se i veza pametni telefon-MK. Sva ista oprema, na primjer, klizne rolete ili rasvjeta u sobi, koja će se isključiti jednim klikom. Ako želite ovo drugo, onda nema potrebe mijenjati ožičenje ili kupovati posebne pametne lampe, koje mogu izgorjeti nakon mjesec dana. Dovoljno je kupiti mali Arduino mikrokontroler, bežični Internet ili Bluetooth komunikacijski modul i traku. Nakon čega će biti dovoljno lemiti najjednostavniji krug, koji se zatvara ako se signal pošalje na MK.
    Ovaj signal će biti poslan s vašeg telefona, zatvorite kontakte i svjetlo će početi svijetliti. Kako biste izbjegli probleme i za dodatnu sigurnost vašeg doma, možete napisati skriptu koja može automatski otvoriti strujni krug ako se upravljački uređaj ukloni iz pogleda. Obični prekidači će i dalje raditi, ali samo kada je krug zatvoren.
  2. Prijenos podataka za informacije ili komunikaciju MK-Smartphone. Ovdje više ne kontrolirate neku opremu, već, naprotiv, različita oprema vam omogućuje primanje određenih podataka na vaš pametni telefon. Prva stvar koja pada na pamet i najjednostavnija aplikacija je senzor pokreta. Ovaj modul je dostupan u standardnim senzorima za Arduino mikrokontrolere; njegova kupnja neće biti problem, kao ni instaliranje u prolazu. Potom preostaje samo napisati kod, kakav već postoji na mnogim forumima na engleskom jeziku, koji šalje SMS ili poruku na društvenim mrežama, kao i poseban alat ako netko prijeđe infracrvenu zraku.
    Možete stvoriti složenije i automatizirane sustave koji će prenositi ne samo medijske informacije o vašem stanu, već i izvješćivati ​​o sazrijevanju povrća ili voća u vašem kućnom stakleniku. Sve ovisi isključivo o mašti samog inženjera, no temelj tehnologije je i dalje isti - prijenos podataka s jednog uređaja na drugi.

Dakle, odabrali ste prikladan projekt i krenuli u njegovu provedbu. Moduli i mikrokontroleri su već naručeni, a dok su na putu, možete krenuti u razvoj softvera. Uostalom, goli Android ne komunicira s Arduinom pomoću magije.

Android aplikacije za interakciju s Arduinom

Nećemo razvijati uslužni program od nule, jer to nije osnova za programiranje u Javi. Najlakši način je koristiti gotove motore i okruženja s korisničkim sučeljem, gdje doslovno morate dodati samo 1-2 retka koda za gumb kako bi radio. Naravno, takav pristup značajno ograničava funkcionalnost konačnog proizvoda i neminovno narušava kreativnost, ali će biti koristan za one koji žele brzo implementirati jednostavan projekt bez nepotrebnih problema.

Prvo, pogledajmo tri osnovne datoteke s kojima ćete se susresti prilikom dizajniranja programa:

  1. MainActivity.java cijeli je kod aplikacije na istoimenom jeziku; sve funkcije i metode koje napišete spremaju se ovdje.
  2. Activity_main.xml – izgled, kao što lako možete pogoditi iz ekstenzije datoteke. Ovdje se pohranjuje položaj gumba, teksta i drugih interaktivnih komponenti, koje se zatim oživljavaju u kodu.
  3. AndroidManifest.xml – Ova se datoteka također odnosi na izglede, ali u nešto drugačijem području. Definira osnovne parametre za pokretanje aplikacije i dopuštenja koja će joj biti potrebna. U našem slučaju, to je potreba za uključivanjem Bluetootha, jer ćemo preko njega komunicirati s MK. Ako izrađujete senzor koji mora slati informacije na veliku udaljenost, tada morate uključiti i provjeriti rad bežičnog ili mobilnog interneta.

Osnove prijema i prijenosa podataka

Da biste razumjeli kako će vaš budući projekt općenito funkcionirati, bilo bi vrijedno proučiti osnovnu fiziku elektromagnetskih polja. Ali kako ne bismo preopterećivali nepotrebnim informacijama, dovoljno je razumjeti da se danas prijenos podataka odvija na tri glavna načina:

  1. Putem USB kabela, koji nije svugdje prikladan, ali dobra opcija za postavljanje projekta.
  2. Putem Bluetootha i srodnih protokola, primjerice, nedavno je postalo popularno koristiti NTFS za upravljanje pametnim uređajima. Ali, budući da govorimo o projektu na Arduino MK, fokusirat ćemo se na bluetooth.
  3. Preko bežičnog interneta. Nema tu ništa novo, dapače, vaš mobitel ili mikrokontroler se ponaša kao server koji prima i obrađuje primljene podatke, a zatim izvodi izračune ili akcije i šalje odgovor.

Ovo su glavne metode prijenosa i primanja informacija, samo trebate odabrati odgovarajuću. Za projekte koji se neće koristiti na velikim udaljenostima, najbolja opcija u smislu volumena koda i jednostavnosti postavljanja je Bluetooth.

Koje komponente mogu biti potrebne za interakciju?

Gore smo već spomenuli da je za projekt na Arduinu, koji uključuje korištenje jedne od metoda prijenosa podataka na daljinu, potrebno kupiti dodatne module. Opet, Bluetooth je najbolji izbor. Ovaj modul vam omogućuje primanje i slanje signala određene frekvencije, koje hvata većina pametnih telefona, te u skladu s tim ne bi trebalo nastati problemi. Možete odabrati jedan od uređaja predstavljenih u glavnoj liniji Arduino ili kineskih analoga, koji će biti mnogo jeftiniji.

Jedan od modula koji možete uzeti je Bluetooth Bee, koji se može kupiti u mnogim trgovinama, od DFRobota.

Sve ovisi o specifičnom sustavu i potrebnoj "Bandwidth" u njemu. Uostalom, ako se radi o videonadzornoj kameri, onda se tok podataka mora prenositi kontinuirano i u velikim količinama. A za jednostavan senzor pokreta dovoljan je najjeftiniji Wi-Fi modul. Isto je i s automatiziranim pametnim kućnim uređajima.

Prilikom odabira svake komponente razmotrite svoje potrebe i ono što ćete implementirati u projekt te nemojte preplaćivati ​​za značajke koje vam nisu potrebne.

Postavljanje veze

Dakle, sada ste izradili i već instalirali aplikaciju ili njen gotov analog na svoj pametni telefon za upravljanje vašim mikrokontrolerom pomoću Arduina, tada trebate:

  1. Uključite sam Bluetooth modul u sustavu, napajajući ga iz mreže ili baterije.
  2. Pokrenite aplikaciju na svom telefonu i pronađite željeni uređaj.
  3. Spojite se na Bluetooth modul pomoću zadane lozinke ili one koju ste postavili prilikom flashanja Arduina.
  4. Zadajte prve naredbe i pogledajte kako će sustav na njih reagirati.

Ovdje vrijedi reći da postoji mnogo aplikacija za Arduino na Google Playu, u sljedećem članku ćemo prikazati njih 7.

Najjednostavniji primjer

Kako biste otprilike razumjeli kako bi gotov projekt trebao funkcionirati, dat ćemo primjer koristeći isti dodatak vašoj lampi.

  1. Na sustav se povezujete putem pametnog telefona.
  2. Pritisneš jedno dugme i krug se otvara ili zatvara.
  3. Svjetlo se pojavljuje ili nestaje.
  4. Ponovno pritisnite gumb na pametnom telefonu i dogodit će se suprotan učinak.

Naravno, da biste to učinili, prvo morate zatvoriti strujni krug uključivanjem žarulje pomoću zidnog prekidača. Ali ovo je samo uvjetni primjer onoga što se može realizirati ovom tehnologijom.

U nadolazećim lekcijama ćemo se detaljnije osvrnuti na interakciju pametnih telefona i mikrokontrolera te ćemo s vama odraditi neke korisne lekcije.

U ovom ćete vodiču naučiti kako koristiti bluetooth modul i MIT aplikaciju za stvaranje bežične serijske veze između android telefona i arduino ploče. Ovaj članak opisuje kako se povezati, napisati skicu za arduino koja može prihvatiti i poslati osnovne naredbe te kako sami izraditi aplikaciju. Pretpostavlja se da ste već upoznati s nekim osnovama, da ste radili nekoliko arduino projekata i upoznati ste s arduino IDE. Ako ste pokušali serijsku komunikaciju s arduino pločom, sve bi trebalo biti potpuno jasno. Ako imate problema ili pitanja, slobodno ih postavite na stranici za razgovor.

O ČEMU SE RADI U ČLANKU?

Radnje

1. Koristite sljedeći kod za arduino

Slobodno ga promijenite. Ovdje je važan aspekt brzina prijenosa podataka - provjerite odgovara li brzini prijenosa podataka vašeg modula - provjerite podatkovnu tablicu ili za to upotrijebite AT naredbe.

  • const int ledPin = 2; // pin na koji je LED dioda pričvršćena na bajt serialA; void setup() ( // inicijalizirajte serijsku komunikaciju: Serial.begin(19200); //brzina prijenosa — provjerite odgovara li onoj modula koji ste dobili: // inicijalizirajte ledPin kao izlaz: pinMode(ledPin, OUTPUT) ; ) void loop() ( if (Serial.available() > 0) (serialA = Serial.read();Serial.println(serialA);) switch (serialA) (slučaj 1: digitalWrite(ledPin, HIGH); break ; slučaj 2: digitalWrite (ledPin, LOW); slučaj 3: digitalWrite (ledPin, LOW);

2. Ako sve što želite je nabaviti aplikaciju i vidjeti kako radi

preuzmite aplikaciju i zatim je preuzmite na svoj telefon. Možete ga preuzeti na -> https://drive.google.com/folderview?id=0B_PfPoEotOF8N2JwT3RSX011SjQ&usp=sharing. Vaš telefon mora dopuštati instalaciju aplikacija iz izvora trećih strana.

3. Ako želite promijeniti aplikaciju, idite na


  • http://appinventor.mit.edu/explore/learn.html da biste saznali kako pripremiti svoje računalo i instalirati softver za razvoj aplikacija. Nakon što ga pokrenete, odradite barem jednu ili dvije glavne lekcije. Ispod je aplikacija koja se ovdje koristi. Možete ga učitati u App Inventor, a zatim preuzeti na svoj telefon ili ga izmijeniti. https://drive.google.com/folderview?id=0B_PfPoEotOF8N2JwT3RSX011SjQ&usp=sharing

Stvari koje ćete trebati

  • arduino ploča
  • bluetooth serijski modul (u ovom članku korišten je btm222 modul s ugrađenim regulatorom)
  • Jedini problematični dio ovdje je bluetooth modul. Postoje različiti moduli na cijelom internetu, pa svakako provjerite izlaz u podatkovnoj tablici koju imate jer može varirati. Također imajte na umu da postoje dvije opće klase bluetooth modula: Klasa 1 ima domet od oko 100 metara. Klasa 2 ima domet od oko 10 metara. Ako se pitate potpuno su kompatibilni i možete dobiti samo 100m ako oba uređaja podržavaju taj domet
  • Bluetooth serijski modul koji se ovdje koristi ima sljedeće pinove s lijeva na desno (uzemljenje, RX, TX, nije spojen, VCC). Očito, uzemljenje i VCC idu redom na uzemljenje i + 5V pin na arduinu. Budući da ćemo primati podatke preko modula i zatim ih slati na arduino ploču, trebamo koristiti samo TX pin na modulu. Provucite žicu od ovog pina do RX izlaza na arduino ploči. Led se kontrolira pomoću PIN-a 2 na Arduinu.
  • Dioda koja emitira svjetlo
  • otpornik (100 ohma)
  • žice
  • daska za kruh

  • Ovaj vodič može biti malo težak za vas ako ste početnik. Ako nikada niste isprobali serijsku komunikaciju s arduino pločom ili barem niste napravili većinu skica primjera arduina, slijedite neke od lakših uputa i vratite im se kasnije.

U ovom članku će biti detaljno opisana izrada male aplikacije za mobilni operativni sustav Android i skica za Arduino. Arduino Uno će imati Wireless Shield s Bluetooth modulom. Aplikacija će se spojiti na Bluetooth modul i poslati određenu naredbu. S druge strane, skica će koristiti ovu naredbu da upali ili isključi jednu od LED dioda spojenih na Arduino.

Mi ćemo trebati

Izrada Android aplikacije

Prazan

Razvoj za Android OS provodi se u razvojnom okruženju ADT, Android Development Tools. Koji se može preuzeti s Googleovog portala za razvojne programere. Nakon što preuzmete i instalirate ADT, slobodno ga pokrenite. Ipak, još je prerano za početak razvoja aplikacije. Također morate preuzeti Android SDK potrebne verzije. Da biste to učinili, morate otvoriti Android SDK Manager “Prozor → Android SDK Manager”. Na popisu trebamo odabrati SDK koji nam je potreban, u našem slučaju Android 2.3.3 (API 10). Ako nemate telefon, odaberite 2.3.3 ili višu; i ako postoji, verziju koja odgovara verziji OS-a telefona. Zatim kliknite gumb "Instaliraj pakete" za početak postupka instalacije.

Nakon završetka preuzimanja i instalacije, počinjemo s izradom aplikacije. Odaberite “Datoteka → Novo → Projekt Android aplikacije”. Ispunimo sadržaj prozora kao što je prikazano na slici.

    Naziv aplikacije - naziv aplikacije koja će biti prikazana u Google Play trgovini. Ali prijavu nećemo objaviti pa nam ime nije posebno važno.

    Naziv projekta - naziv projekta u ADT-u.

    Naziv paketa - identifikator aplikacije. Trebao bi biti sastavljen na sljedeći način: naziv vaše stranice unatrag, plus naziv neke aplikacije.

Na padajućim popisima "Minimalno potreban SDK", "Ciljani SDK", "Kompiliraj s", odaberite verziju koju smo ranije preuzeli. Novije verzije SDK-a podržavaju grafičke teme za aplikacije, ali starije verzije ne. Stoga u polju “Tema” odaberite “Ništa”. Pritisnite "Dalje".

Poništite odabir opcije "Izradi prilagođenu ikonu pokretača": u ovom se članku nećemo fokusirati na stvaranje ikone aplikacije. Pritisnite "Dalje".

U prozoru koji se pojavi možete odabrati prikaz “Aktivnost”: prikaz onoga što će biti na zaslonu kada se aplikacija pokrene. Odaberemo “Praznu aktivnost”, što znači da želimo sve započeti ispočetka. Pritisnite "Dalje".

U našoj će aplikaciji postojati samo jedna aktivnost, tako da ne morate ništa mijenjati u prozoru koji se pojavi. Dakle, samo kliknite na "Završi".

To je to, naša aplikacija je stvorena.

Postavljanje emulatora

Android aplikacije otklanjaju se pogreške na stvarnom uređaju ili, ako ga nema, onda na emulatoru. Konfigurirajmo naše.

Da biste to učinili, pokrenite “Prozor → Android Virtual Device Manager”. U prozoru koji se pojavi kliknite na "Novo". Ispunite polja obrasca koji se pojavi. O njima ovisi koliko će i koje resurse emulator dati "telefonu". Odaberite razumne vrijednosti i kliknite OK.

U prozoru Android Virtual Device Manager kliknite gumb "Start". Ovo će pokrenuti emulator. Pokretanje traje nekoliko minuta. Zato budite strpljivi.

Kao rezultat, vidjet ćete prozor emulatora sličan ovome:

Aktivnost punjenja

Aktivnost je ono što se prikazuje na zaslonu telefona nakon pokretanja aplikacije. Na njemu ćemo imati dva gumba "Osvijetli crvenu LED" i "Osvijetli plavu LED". Dodajmo ih. Na ploči "Package Explorer" otvorite res/layout/activity_main.xml. Njegov će izgled biti približno isti kao na snimci zaslona.

Povucite 2 "ToggleButtons" na obrazac na ekranu. Prijeđite na karticu “activity_main.xml” i pogledajte sljedeći kôd:

aktivnost_glavni_aiutogen.xml xmlns:alati = android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom= android:paddingLeft= android:paddingRight = "@dimen/activity_horizontal_margin" android:paddingTop = "@dimen/activity_vertical_margin" tools:context = "MainActivity" > android:id="@+id/toggleButton1" android:layout_alignParentLeft= "istina" android:layout_alignParentTop="true" android:text="ToggleButton" /> android:id="@+id/toggleButton2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/textView1" android:layout_alignParentRight= "istina" android:text="ToggleButton" /> >

Ovo nije ništa više od naše aktivnosti, koja se ne prikazuje kao grafika, već je opisana u XML formatu.

Neka nazivi komponenti budu jasniji. Promijenimo android:id polja na sljedeći način.

android:id="@+id/toggleRedLed" ... android:id="@+id/toggleGreenLed" ...

Također ćemo im dodati potpise, promijeniti boju i veličinu teksta. Rezultirajući označni kod izgledat će ovako:

aktivnost_glavna.xml "http://schemas.android.com/apk/res/android" xmlns:alati = "http://schemas.android.com/tools" android:layout_width="fill_parent" android:paddingBottom= "@dimen/activity_vertical_margin" android:paddingLeft= "@dimen/activity_horizontal_margin" android:paddingRight = "@dimen/activity_horizontal_margin" android:paddingTop = "@dimen/activity_vertical_margin" tools:context = "MainActivity" android:weightSum="2" android:orientation="horizontal" > android:id="@+id/toggleRedLed" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1" android:background="#FF0000" android:textOff="ISKLJUČENO" android:textOn="ON" android:textSize="30dp" /> android:id="@+id/toggleGreenLed" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1" android:background="#00FF00" android:textOff="ISKLJUČENO" android:textSize="30dp" android:textOn="ON" /> >

Iste promjene mogu se napraviti u grafičkom načinu pomoću kartice "Outline/Properties".

Probni rad

Novostvorenu aplikaciju možemo pokrenuti na emulatoru. Idite na postavke pokretanja "Pokreni" → Pokreni konfiguracije", na lijevoj strani kliknite na "Android aplikacija". Pojavljuje se nova konfiguracija "New_configuration". Na desnoj strani prozora odaberite karticu "Cilj" i odaberite opciju "Pokreni na svim kompatibilnim uređajima/AVD".

Kliknite "Primijeni", a zatim "Pokreni". Aplikacija će se pokrenuti u emulatoru.

Možete pritisnuti gumbe. Ali ništa se neće dogoditi, budući da još nismo napisali rukovatelje klikovima.

Da biste pokrenuli aplikaciju na stvarnom uređaju, morate uključiti opciju “USB Debugging” u njezinim postavkama i spojiti je na svoje računalo.

Na stvarnom uređaju aplikacija izgleda potpuno isto.

Pisanje koda za Android

Uređivanje manifesta

Svaka Android aplikacija mora reći sustavu koja prava treba dodijeliti. Prava su navedena u takozvanoj datoteci manifesta AndroidManifest.xml. U njemu moramo naznačiti činjenicu da želimo koristiti Bluetooth u našoj aplikaciji. Da biste to učinili, dodajte samo nekoliko redaka:

AndroidManifest.xml "http://schemas.android.com/apk/res/android" paket="ru.amperka.arduinobtled" android:versionCode="1" android:versionName="1.0" > android:minSdkVersion="10" android:targetSdkVersion="10" /> "android.permission.BLUETOOTH"/> "android.permission.BLUETOOTH_ADMIN"/>
android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/naziv_aplikacije" android:theme="@style/AppTheme" > android:ime = "ru.amperka.arduinobtled.MainActivity" android:label="@string/app_name" > > "android.intent.category.LAUNCHER" /> > > > >

Dodavanje glavnog koda

Vrijeme je da udahnemo život našoj aplikaciji. Otvorite datoteku MainActivity.java (src → ru.amperka.arduinobtled). U početku sadrži sljedeći kod:

MainActivityAutogen.java paket ru.amperka.arduinobtled; import android.os.Bundle ; import android.app.Activity ; import android.view.Menu ; javna klasa MainActivity proširuje Activity ( @Override protected void onCreate(Bundle savedInstanceState) ( super .onCreate (savedInstanceState) ; setContentView(R.layout .activity_main) ; ) @Override public boolean onCreateOptionsMenu( Jelovnik izbornik) ( getMenuInflater() .inflate (R.menu .main, izbornik) ; return true ; ) )

Dodajmo kod prema onome što nam treba:

    Uključit ćemo Bluetooth ako je isključen.

    Obradit ćemo klikove na gumbe

    Poslat ćemo informaciju o tome koji je gumb pritisnut.

Prenijet ćemo jedan bajt s dvoznamenkastim brojem na Arduino. Prva znamenka broja je broj pina na koji je povezana ova ili ona LED dioda, druga je stanje LED diode: 1 - uključeno, 0 - isključeno.

Broj naredbe izračunava se vrlo jednostavno: ako se pritisne crvena tipka, tada se uzima broj 60 (za crvenu LED diodu odabrali smo 6. pin Arduina) i dodaje mu se 1 ili 0, ovisno o tome treba li LED dioda sad bio uključen ili ne. Za zeleni gumb sve je slično, samo umjesto 60 uzima se 70 (budući da je zeleni LED spojen na pin 7). Kao rezultat toga, u našem slučaju moguća su 4 tima: 60, 61, 70, 71.

Napišimo kod koji implementira sve što je rečeno.

MainActivity.java paket ru.amperka.arduinobtled; import java.io.IOException; import java.io.OutputStream ; uvoz java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import android.app.Activity ; uvoz android.bluetooth.BluetoothAdapter; uvoz android.bluetooth.BluetoothDevice; uvoz android.bluetooth.BluetoothSocket; import android.content.Intent ; import android.os.Bundle ; import android.util.Log ; import android.view.Menu ; import android.view.View ; uvoz android.view.View.OnClickListener; import android.widget.Toast ; import android.widget.ToggleButton ; javna klasa MainActivity proširuje Activity implementira Pogled.OnClickListener( //Instance naših klasa gumba ToggleButton redButton; ToggleButton greenButton; //Socket s kojim ćemo slati podatke Arduinu BluetoothSocket clientSocket; //Ova se funkcija automatski pokreće kada se aplikacija pokrene@Override protected void onCreate(Bundle savedInstanceState) ( super .onCreate(savedInstanceState) ; setContentView(R.layout .activity_main) ; //"Poveži" prikaz gumba u prozoru aplikacije s implementacijom redButton = (ToggleButton) findViewById(R.id .toggleRedLed) ; greenButton = (ToggleButton) findViewById(R.id .toggleGreenLed) ; //Dodajte "osluškivač klikova" gumbu redButton.setOnClickListener(ovo); greenButton.setOnClickListener(ovo); //Uključi bluetooth. Ako je već omogućeno, ništa se neće dogoditi Niz enableBT = BluetoothAdapter.ACTION_REQUEST_ENABLE ; startActivityForResult(nova namjera(enableBT), 0); //Želimo koristiti zadani bluetooth adapter BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter(); //Pokušavam izvršiti ove radnje pokušaj ( //Uređaj s ovom adresom je naša Bluetooth pčela //Adresa se određuje na sljedeći način: uspostavite vezu //između računala i modula (pin: 1234), a zatim pogledajte postavke //adresa priključnog modula. Najvjerojatnije će biti slično. BluetoothDevice uređaj = bluetooth.getRemoteDevice("00:13:02:01:00:09" ) ; //Pokrenite vezu s uređajem metoda m = device.getClass().getMethod("createRfcommSocket", new Class(int.class)); clientSocket = (BluetoothSocket) m.invoke(uređaj, 1); clientSocket.connect(); //Ako se pojave bilo kakve pogreške, ispišite poruku u dnevnik) ulov ( IOException SecurityException e) ( Log.d ("BLUETOOTH" , e.getMessage () ) ; ) catch ( NoSuchMethodException e) ( Log.d ("BLUETOOTH" , e.getMessage () ) ; ) catch ( IllegalArgumentException e) ( Log.d ("BLUETOOTH" , e.getMessage () ) ; ) catch ( IllegalAccessException e) ( Log.d ("BLUETOOTH" , e.getMessage () ) ; ) catch ( InvocationTargetException e) ( Log.d ("BLUETOOTH" , e.getMessage () ) ; ) //Prikaži poruku o uspješnom povezivanju Toast.makeText(getApplicationContext(), "CONNECTED", Toast.LENGTH_LONG).show(); ) @Override public boolean onCreateOptionsMenu( Jelovnik Jelovnik) ( // Napuhati izbornik; ovo dodaje stavke na akcijsku traku ako je prisutna. getMenuInflater() .inflate (R.menu .main , menu) ; vratiti istinito; ) //To je upravo funkcija koja će biti pozvana@Override public void onClick( Pogled v) ( //Pokušavam poslati podatke pokušaj ( //Dobivanje izlaznog toka za prijenos podataka OutputStream outStream = clientSocket.getOutputStream(); int vrijednost = 0; //Ovisno o tome koji je gumb pritisnut, //promjena podataka za slanje if (v == redButton) ( value = (redButton.isChecked () ? 1 : 0 ) + 60 ; ) else if (v == greenButton) ( value = (greenButton.isChecked () ? 1 : 0 ) + 70 ; ) //Pisanje podataka u izlazni tok outStream.write(vrijednost); ) ulov ( IOException e) ( //Ako postoje pogreške, ispišite ih u dnevnik Log.d ("BLUETOOTH" , e.getMessage (, OUTPUT) ; pinMode(7 , OUTPUT) ; ) void loop() ( //Ako su podaci stigli if (Serial.available() > 0) ( //Pročitaj dolazni bajt byte incomingByte = Serial.read(); //Dobijte pin broj cijelim brojem dijeljenjem vrijednosti primljenog bajta s 10 //i radnja koja nam je potrebna dobivanjem ostatka dijeljenja s 2: //(1 - svijetli, 0 - gasi se) digitalWrite(incomingByte / 10, incomingByte % 2) ; ) )

Značajke popunjavanja skice

Za komunikaciju Bluetooth-Bee s kontrolerom koriste se isti pinovi (0 i 1) kao i za firmware. Stoga, prilikom programiranja kontrolera, prekidač “SERIAL SELECT” na “Wireless Shield” mora biti postavljen u položaj “USB”, a nakon treptanja mora se vratiti u položaj “MICRO”.

Proizlaziti

Zaključak

U ovom smo članku naučili kako izraditi aplikacije za operativni sustav Android i prenijeti podatke putem Bluetootha. Sada, kada pritisnete gumb na ekranu telefona koji se temelji na operativnom sustavu Android, stanje LED-a na ploči će se promijeniti.

Možete razviti svoju ideju i napraviti user-friendly sučelje na Androidu, njime kontrolirati mnogo složenije uređaje, objaviti cool aplikacije na Android Marketu i još puno, puno zanimljivih stvari!

Gledali smo instaliranje i konfiguriranje softvera koji nam je potreban za razvoj za ADK i Android. Sada kada imamo sve spremno za rad, možemo kreirati naš prvi projekt. I prema tradiciji, ovo će biti projekt s LED-om.

Projekt će biti vrlo jednostavan – na ekranu Android uređaja prikazat će se tipka na koju će zasvijetliti LED dioda na debug ploči, a kada se otpusti ugasit će se.

Program za Arduino

Kreirajmo novi projekt. Naš će izvorni kod biti vrlo jednostavan:

#include #include Veza * veza; void adbEventHandler(Connection * connection, adb_eventType event, uint16_t length, uint8_t * data) ( if (event == ADB_CONNECTION_RECEIVE) // Ako su podaci primljeni ( digitalWrite(13, data); // Promjena stanja LED-a ovisno o primljenoj varijabli ) ) void setup() ( pinMode(13,OUTPUT); // Koristite ugrađeni LED L Seeeduino ADK ploče ADB::init(); veza = ADB::addConnection("tcp:4568", istina, adbEventHandler) void loop() (ADB::poll();)

Ukratko – inicijaliziramo i kreiramo ADB vezu, te također definiramo funkciju adbEventHandler(), koji će biti pozvan svaki put kada se podaci prime s Android uređaja. Kada su podaci primljeni, zapisujemo primljeni bajt pomoću funkcije digitalWrite(), čime se pali ili gasi LED.

Sada sastavljamo skicu i postavljamo je na našu ploču.

Program za Android

Otvorimo Eclipse IDE i napravimo novi projekt: New -> Project... Otvorit će nam se prozor u kojem nalazimo mapu Android i odabiremo Android Application Project. Pritisnite gumb Dalje i unesite naziv projekta i neke parametre.

Zatim kliknite Dalje i kreirajte ikonu aplikacije, itd. Nakon što kliknete gumb Završi, vaša je aplikacija spremna. Sada u prozoru Package Explorer desnom tipkom miša kliknite svoj projekt i odaberite svojstva projekta: Svojstva. Provjerite je li vaš ciljni naziv postavljen na Google API, a ne na Android.

Zatim otvorimo datoteku manifesta AndroidManifest.xml i u nju upišemo redak kako bi nam Android OS dao dopuštenje za pristup odgovarajućim uslugama:

Zatim kopiramo potrebne biblioteke kako bismo osigurali rad MicroBridge načina rada: /src/org/microbridge/server i postoje 4 datoteke u ovoj mapi. Možete ih preuzeti iz arhive na kraju članka ili iz originalnog primjera iz Seeed studija.

Sada trebamo dodati grafičke elemente u aktivnost (prozor aplikacije) za interakciju s korisnikom. Za sada ćemo imati samo 2 elementa: tekst i ToggleButton (gumb s 2 stanja).
Postoje dva načina za izradu korisničkog sučelja: korištenjem grafičkog izgleda (jednostavno povuci i ispusti i raspored) i korištenjem XML datoteke. Upotrijebimo grafički izgled. Da biste to učinili, u prozoru resursa aplikacije kliknite datoteku /res/layout/activity_main.xml. I povucite ToggleButton u prozor koji se pojavi:

Sada otvorite našu glavnu datoteku /src/com/example/arduino52/MainActivity.java, izbrišite sve u njemu i kopirajte sljedeće retke:

Paket com.example.arduino52; import java.io.IOException; import org.microbridge.server.Server; import android.os.Bundle; import android.util.Log; import android.app.Activity; import android.widget.ToggleButton; import android.widget.CompoundButton; javna klasa MainActivity extends Activity implementira CompoundButton.OnCheckedChangeListener ( Server server = null; @Override public void onCreate(Bundle savedInstanceState) ( super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ToggleButton mButton = (ToggleButton)findViewById(R .id.toggleButton1); mButton.setOnCheckedChangeListener(this); // Stvorite TCP poslužitelj (na temelju MicroBridge LightWeight poslužitelja) pokušajte ( server = new Server(4568); // Isti port se mora koristiti na poslužitelju ADK ploče .start (); catch (IOException e) ( Log.e("arduino52", "Nije moguće pokrenuti TCP poslužitelj", e); System.exit(-1); ) @Override protected void onDestroy ()( super .onDestroy (); server.stop();) public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) ( byte data; if(isChecked) // Ako je gumb pritisnut ( data = 1; ) else ( data = 0; ) pokušaj ( // Pošalji podatkovni server.send(novi bajt ((bajt) podataka)); uhvati (IOException e) ( Log.e("arduino52", "Problem pri slanju TCP poruke", e); ) ) )

Android aplikacija je nešto kompliciranija, neću opisivati ​​cijelu njenu strukturu, za to postoje specijalizirane stranice i knjige. Reći ću vam samo glavne točke koje su potrebne za naš projekt.
Dakle, prvo se inicijalizira naš MicroBridge poslužitelj, koji je instaliran na portu 4568. Potpuno isti priključak bi trebao biti u vašoj Arduino skici.
Zatim se deklarira rukovatelj onCheckedChanged() koji se poziva svaki put kada se stanje našeg ToggleButtona promijeni. Zatim, ovisno o stanju gumba, pohranjujemo 1 ili 0 u varijablu podataka, a zatim se pokušava poslati ovaj podatak funkciji server.send()

Zatim povezujemo naš Android uređaj s računalom, pokrećemo naš Run projekt, tamo odabiremo naš stvarni uređaj (ne virtualni) i čekamo dok se program ne kompajlira i instalira na vaš telefon ili tablet.

I HTC Desire s firmwareom cyanogen 7.1.0 RC1 (Android 2.3.4). Za svaki slučaj, podsjetit ću vas da sve što će biti opisano u nastavku radi samo počevši od Android 2.3.4 za telefone i Android 3.1 za tablete.

Ovdje vrijedi napomenuti da ovaj USB Host Shield nije sasvim uspješan, pogotovo u kombinaciji s Arduino Mega 2560. Prvi problem je bio što je ova ploča za proširenje napravljena za Arduino UNO, a od Mege se razlikuje po pozicijama SPI kontakte, pa sam morao dodati kratkospojnike (vidi fotografiju). Drugi problem, iako sasvim očekivan, bila je potreba za vanjskim izvorom napajanja za rad ove kartice za proširenje. USB Host Shield 2.0 tvrtke Circuits@Home smatra se uspješnijim, ali je i skuplji.

Ploča s međusobno povezanim SPI kontaktima

Postavljanje Arduino softvera

1. Ako već nije instaliran, preuzmite i instalirajte softver za Arduino.
2. Preuzmite i raspakirajte ADK paket (sadrži aplikaciju DemoKit). Trebale bi se pojaviti mape aplikacije, firmvera i hardvera.
3. Preuzmite biblioteku CapSense
4. Kopirajte firmware/arduino_libs/AndroidAccessory i firmware/arduino_libs/USB_Host_Shield na /knjižnice/ .
5. Stvorite CapSense direktorij u /libraries/ i u nju kopirajte CapSense.cpp i CapSense.h iz CapSense arhive.

Preuzimanje firmvera

Google ljubazno daje svoju DemoKit skicu za Arduino. Sve što trebate učiniti je otvoriti ga iz firmware/demokit/demokit.pde, kompajlirati i učitati na ploču.

Testirajte Android aplikaciju

Paket DemoKit također sadrži izvore Android aplikacije za demonstraciju mogućnosti. Google nas poziva da sami izradimo Android projekt i sastavimo ovu aplikaciju. Prvo ćemo morati instalirati API razine 10. Zatim je sve jednostavno - kreiramo Android projekt i odredimo put do mape aplikacije, u Build Target odredimo Google API-je (Platforma 2.3.3 , API razina 10). Sastavljamo aplikaciju i instaliramo je na telefon. Oni koji se ne žele zamarati montažom mogu preuzeti gotov APK.

Pokreni

Jednostavno spojimo svoj telefon na USB Host Shield. Ako smo sve napravili kako treba, na ekranu će se pojaviti zahtjev za pokretanje DemoKit aplikacije.

Sama aplikacija sadrži dvije kartice - In (gumbi, joystick i senzori) i Out (LED, releji i servo).

Odlučio sam da je za demonstraciju dovoljno nekoliko LED dioda i gumb. Kako cijelo ovo čudo funkcionira možete pogledati u videu.

Neki kod

U ovom primjeru, poruke koje se prenose putem USB-a sastoje se od tri bajta:
Prvi bajt definira naredbu ili grupu uređaja, na primjer LED diode - 0x2
2. bajt označava određeni uređaj, na primjer zelena LED - 0x1
Treći bajt sadrži vrijednost proslijeđenu uređaju, na primjer maksimalnu svjetlinu - 0xff

Arduino

... /* inicijalizacija */ AndroidAccessory acc("Google, Inc.", "DemoKit", "DemoKit Arduino ploča", "1.0", "http://www.android.com", "0000000012345678"); void setup() ( .... acc.powerOn(); ) void loop() ( byte msg; /* provjeri vezu */ if (acc.isConnected()) ( /* primi poruku s Android uređaja */ int len = acc.read(msg, sizeof(msg), 1); if (len > 0) ( /* poruka za LED diode */ if (msg == 0x2) ( if (msg == 0x0) analogWrite(LED3_RED, msg) ; else if (msg == 0x1) analogWrite(LED3_GREEN, msg); else if (msg == 0x2) analogWrite(LED3_BLUE, msg); msg = 0; msg = b ? 0; / * stanje gumba za slanje */ acc.write(msg, 3); b1 = b ) )

Android

import com.android.future.usb.UsbAccessory; import com.android.future.usb.UsbManager; ... Public Class Demokitactivity Extitions Implements Runnable (Private USBManager Musbmanager; USBACCESSORY MACCCESSORY; FileinPutstream MinPuSTREAM; Utputstream; ... Private Void Openaccessory (USBACCESSORY) ) ( mAccessory = dodatak; FileDescriptor fd = mFileDescriptor.getFileDescriptor(); mInputStre am = novi FileInputStream (fd); mOutputStream(fd); Thread thread (null, this, "AccessoryThread"); public void run() (int ret = 0; byte buffer = new byte; int i; while (ret >= 0) ( // primanje dolaznih poruka ret = mInputStream(buffer); i = 0; while (i)< ret) { int len = ret - i; switch (buffer[i]) { case 0x1: // сообщение от кнопки if (len >= 3) ( Poruka m = Message.obtain(mHandler, MESSAGE_SWITCH); m.obj = new SwitchMsg(buffer, buffer); mHandler.sendMessage(m); ) i += 3; pauza; ). int vrijednost) ( međuspremnik bajta = novi bajt; if (vrijednost > 255) vrijednost = 255; međuspremnik = naredba; međuspremnik = cilj; međuspremnik = (bajt) vrijednost; if (mOutputStream != null && međuspremnik != -1) ( pokušaj ( mOutputStream. write(buffer); catch (IOException e) ( ... ) ) ) )

zaključke

Otvaranjem takvih mogućnosti Google, naravno, prije svega računa na pojavu velikog broja aktivnih Android dodataka, ali ne manje važno je činjenica da, u biti, dobivamo zgodan uređaj za interakciju s različitim senzorima , senzori i aktuatori. Takav bi uređaj lako mogao postati mozak nečeg robotskog.

Također, ne smijemo zaboraviti da Android uređaj za Arduino može djelovati kao ploča za proširenje, koja ima GPS, Bluetooth, WiFi, akcelerometar i još mnogo toga.

reci prijateljima