Arduino'yu Android'e bağlamanın altı kolay yolu. Arduino'yu telefonunuzdan kontrol etmek
Baştan başlamak.
Yonga ESP 8266
ESP8266 çipi özellikle Nesnelerin İnterneti için tasarlanmıştır. Bu çipi kullanmanın iki seçeneği var. Birincisi, bir mikro denetleyiciye bağlanmak ve AT komutlarını kontrol etmek için bir UART-WIFI köprüsü gibidir. İkinci seçenek ise çipin kendisinin kontrol kontrolörü rolünü oynamasıdır. Tahminlerime göre elektronik meraklıları arasında çip daha çok kontrol denetleyicisi olarak kullanılıyor.
Çip yetenekleri:
- 802.11 b/g/n desteği
- Düşük güç tüketimine sahip dahili 32 bit MCU
- Dahili 10 bit ADC
- Gömülü TCP/IP yığını
- Dahili RF sinyal amplifikatörü
- Anten çeşitliliği desteği
- Wi-Fi 2,4 GHz, WPA/WPA2 desteği
- STA/AP/STA+AP modlarını destekleyin
- SDIO 2.0, (H) SPI, UART, I2C, I2S, IR Uzaktan Kumanda, PWM, GPIO
- STBC, 1x1 MIMO, 2x1 MIMO
- A-MPDU ve A-MSDU toplama ve 0,4 sn koruma aralığı
- çıkış gücü 802.11b modunda +20 dBm
Çip son derece entegre bir WiFi çözümüdür. İhtiyacımız olan her şeyi çipin içine sığdırmayı başardık. Bir mikro devrenin çalışması için gereken tipik minimum devre yalnızca yedi elemandan oluşur.
Benzer çözümlerin bileşen sayısını karşılaştırmak için fotoğraflar.
Bazı kaynaklara göre tüm bu güzellik, 32 bit Xtensa LX106 işlemci çekirdeği, diğer kaynaklara göre Tensilica'nın L106 Diamond'ı tarafından kontrol ediliyor. Mikroskop altında çip, birbirine bağlı unsurlardan oluşan bir şehir gibi görünüyor.
En önemli özelliklerden biri enerji tüketimidir. ESP8266'da bu gerçekten şaşırtıcı:
- Sürekli iletim modunda 215mA.
- Erişim noktasıyla bağlantıyı sürdürme modunda 1mA
- Gerçek zamanlı saat çalışmasıyla derin uyku modunda 10uA
- 0,5uA Güç modu KAPALI
Uyanmak ve bir paketi iletmeye başlamak için gereken süre 2 ms'den azdır. Örneğin, sıcaklığı her 100 saniyede bir ölçerken ve bir erişim noktasına bağlanıp her 300 saniyede bir (çipin uyuduğu sürenin geri kalanında) biriken verileri aktarırken, ortalama akım yaklaşık 1 mA olacaktır. Bu, 2600 mAh kapasiteli üç adet AA pille üç aydan fazla süren bir çalışmadır.
Modüller hakkında ESP
Şu anda ESP8266 yongalarındaki en popüler modüller ESP-01, ESP-02, ESP-03, ESP-04, ESP-05, ESP-06, ESP-07, ESP-08, ESP-09, ESP-10'dur. ESP-11, ESP-12, ESP-12E. Kablolu pimlerin sayısı, harici bir anteni bağlamak için bir konektörün varlığı ve boyutları bakımından farklılık gösterirler.
Artık ESP8266'nın ağabeyini satışta bulabilirsiniz - bu ESP-32 modülüdür. Aliexpress'de şu ana kadar sadece iki satıcı bu modüllere sahip. Fiyat, ESP-12E için 110 rubleye karşılık yaklaşık 250 ruble. Yeni modülde daha da fazla güzellik olacak.
ESP-32'nin temel özellikleri. (görüntülemek için tıklayın)
Wifi
- 802.11 b/g/n/e/i
- 802.11 n (2,4 GHz), 150 Mb/sn'ye kadar
- 802.11i güvenlik özellikleri: ön kimlik doğrulama ve TSN
- 802.11 e: QoS trafiği önceliklendirmesinden tam olarak yararlanmak için çoklu kuyruk yönetimi
- Wi-Fi Korumalı Erişim (WPA)/WPA2
- Wi-Fi Korumalı Kurulum (WPS)
- UMA uyumlu ve sertifikalı
- Anten çeşitliliği ve seçimi
- A-MPDU ve A-MSDU toplama
- WMM gücü ve U-APSD
- Parçalanma ve birleştirme
- Wi-Fi Direct (P2P), P2P Keşif, P2P Grup Sahibi modu ve P2P Güç Yönetimi
- Altyapı BSS İstasyonu modu/ Soft AP modu
- Otomatik işaret izleme / tarama
- Donanım hızlandırıcılara sahip SSL yığınları
Bluetooth
- CMOS tek çipli tam entegre radyo ve temel bant
- Bluetooth Piconet ve Scatternet
- Bluetooth 4.2 (BR/EDR/BLE)
- Uyarlanabilir Frekans Atlamalı (AFH)
-SMP
- Harici güç amplifikatörü olmayan Sınıf-1, Sınıf-2 ve Sınıf-3 verici
- +10 dBm tra yayma gücü
- -90 dBm hassasiyete sahip NZIF alıcısı
- 4 Mbps'ye kadar yüksek hızlı UART HCI
-SDIO/SPI HCI
- CVSD ve SBC
- Düşük güç tüketimi
- Minimum harici bileşen
CPU ve Bellek
- Xtensa® Çift Çekirdekli 32 bit LX6 mikrofon işlemcileri, 400MIPS'e kadar
- 128KB ROM
- QSPI Flash/SRAM, 4 x 16 MB'a kadar
- Güç kaynağı: 2,5V ila 3,6V
- 416 KBSRAM
Saatler ve Zamanlayıcılar
- 2 MHz ila 40 MHz kristal osilatör
- Kalibrasyonlu dahili 8 MHz osilatör
- Kalibrasyonlu RTC için harici 32 kHz osilatör
- Kalibrasyonlu dahili RC osilatörü
- Her grupta 3 x 64 bit zamanlayıcı ve 1 x gözlemci içeren iki zamanlayıcı grubu
- Saniyenin altında doğrulukla RTC zamanlayıcısı
-RTC gözlemcisi
Gelişmiş Çevresel Arayüzler
- 16 kanala kadar 12 bit SAR ADC
- 2 x 10 bit D/A dönüştürücü
- 10 x dokunmatik sensör
- Sıcaklık sensörü (-40 +125°C)
-4xSPI
- 2 adet I2S
- 2xI2C
- 2 adet UART
- 1 ana bilgisayar (SD/eMMC/SDIO)
- 1 ikincil (SDIO/SPI)
- Özel DMA ve IEEE 1588 desteğine sahip Ethernet MAC arayüzü
-CAN 2.0
- IR (TX/RX)
-Motor PWM'si
- 16 kanala kadar LED PWM
Güvenlik
- WFA, WPA/WPA2 ve WAPI dahil olmak üzere tümü desteklenen IEEE 802.11 standart güvenlik özellikleri
- Güvenli Önyükleme
- Flaş şifreleme
- 1024 bit OTP, müşteriler için 768 bit'e kadar
- Kriptograf donanım hızlandırması:
- AES 128/192/256
- HASH (SHA-2) kütüphanesi
-RSA
- Radom Sayı Üreteci
CAN veri yolu için belirtilen destek özellikle ilginçtir. Yakında araç sistemlerini kontrol etmek ve teşhisleri Wi-Fi üzerinden doğrudan gerçekleştirmek mümkün olacak. mobil cihaz.
Ama hadi ESP-12E'ye dönelim. NodeMCU platformu bu modül temel alınarak oluşturulmuştur.
Platform hakkında
Platform, ESP-12 modülünün yeteneklerini kullanıyor ve kendi mikro denetleyicisine sahip değil. Çinliler farklı arayüz dönüştürücülere sahip birçok klon üretiyor ve platformların kendisi de farklı boyutlara sahip.
Varsayılan olarak platform, LUA komut dosyası dili yorumlayıcısını destekleyen NodeMCU ürün yazılımı ile yüklenir. Komut dosyaları panonun davranışını tanımlar.
Arduino IDE'yi kullanarak programlar yazıp yüklüyorum. Platformla çalışmak için kitaplıkları yüklemeniz gerekir. Kütüphanelerle birlikte gelir çok sayıda program örnekleri.
Kütüphanelerin ortama kurulması arduino IDE birlikte çalışmak DüğümMCU .
Kitaplıkları yüklemek için şu adrese gitmeniz gerekir: Arduino ayarları IDE ve “Ek kart” alanına http://arduino.esp8266.com/package_esp8266com_index.json adresini girin.
Listeyi aşağı kaydırın ve ESP8266 Topluluğu tarafından sunulan ESP8266'yı bulun ve kitaplıkları yükleyin.
Kurul Yöneticisini kapatın. "Araçlar"a gidin ve sürümünüze göre NodeMCU kartını seçin.
Hangi modülü kurduğunuzu ve hangi sürümü seçeceğinizi anlamak için modüle bakın. Üzerindeki kontaklar üç taraftaysa ESP-12E, sadece iki taraftaysa ESP-12'dir.
NodeMCU platformunun pin ataması
Kitaplıklar tarafından desteklenen işlevler arduino IDE .
Açıklamanın tamamını burada https://github.com/nodemcu/nodemcu-firmware/wiki/nodemcu_api_ru ve Rusça olarak okuyabilirsiniz. Ana işlevlerden bahsedeceğim.
GPIO, Arduino ile aynı şekilde kontrol edilir. pinMode, digitalRead, digitalWrite, analogWrite işlevleri her zamanki gibi. analogRead(A0), buna göre A0 analog girişinden ADC değerini okur. analogWrite, yazılım PWM'yi etkinleştirir. PWM frekansı yaklaşık 1kHz'dir. PWM aralığı 0'dan 1023'e, Arduino için hatırladığımız gibi 255'e kadardır. Kesintiler, GPIO16 hariç herhangi bir GPIO'da da desteklenir. millis() ve micros() işlevleri, modülün başlatılmasından bu yana geçen milisaniyeleri ve mikrosaniyeleri döndürür. NodeMCU'nun gecikme () işlevi Arduino'nunkinden farklı çalışır. Burada gecikmenin kullanılması memnuniyetle karşılanır ve hatta büyük programlarda gereklidir. Modül WiFi bağlantısını desteklediğinde, çiziminiz dışında birçok arka plan görevini yerine getirmek zorundadır. SDK kitaplıklarının WiFi ve TCP/IP işlevleri, loop() işlevinizin her döngüsü tamamlandıktan sonra veya gecikme(...) sırasında kuyruktaki tüm olayları işleme yeteneğine sahiptir. Kodunuzun yürütülmesi 50 milisaniyeden uzun süren bölümleri varsa WiFi yığınının düzgün çalışmasını sağlamak için gecikme(...) kullanmanız gerekir. Ancak DelayMicroseconds() diğer görevlerin yürütülmesini engeller ve 20 milisaniyeden uzun gecikmeler için önerilmez. Seri, PIO1(TX) ve GPIO3(RX) üzerinde çalışan donanım UART0'ı kullanır.
Dört röleyi mobil uygulamadan kontrol etme programı
Kütüphaneler kurulduktan sonra platforma 4 röleden oluşan bir bloğu sırasıyla GPIO 5, 4, 0, 2'ye karşılık gelen D1, D2, D3, D4 pinlerine bağlarız. Daha sonra gücü platforma ve röle bloğuna bağlarız. Sahip olduğum röle bloğunun bir özelliği var. Röleyi açmak için pimi toprağa çekmeniz gerekir. Yani mantıksal 0 röleyi açar, 1 ise kapatır.
Röle blok kontrol programı için üç seçeneği ele alacağım.
İlk program popüler aRest kütüphanesini kullanır https://github.com/marcoschwartz/aREST
Bu, GPIO'yu http://192.168.0.10/digital/6/1 gibi http istekleri aracılığıyla kontrol etmenize olanak tanıyan bir API işleyici kitaplığıdır ve yetenekleri: GPIO'yu Dijital veya Analog (PWM) olarak ayarlayın, pini 0 veya 1 olarak ayarlayın. Dijital mod, değişkenleri döndürür ve pinlerin durumunu okur.
Programı kütüphaneyle birlikte gelen örneklerden derleyip indirdim. Kullanım açısından daha kolay olamazdı.
Kurulumda, erişim noktası ile rapor edilen bir bağlantı kurulur. COM bağlantı noktası. Ve döngü şöyle görünür:
geçersiz döngü() (
WiFiClient istemcisi = sunucu.available();
if (!istemci) (
geri dönmek;
}
while(!client.available())(
gecikme(1);
}
rest.handle(istemci);
}
Tüm. Orada ne olduğu belli değil. Çalışıyor ama aslında hiçbir şey programlamıyoruz. Biz sadece programı çalıştırıyoruz, gerisini kütüphane hallediyor. Ancak GPIO ile "elle" nasıl çalışılacağını öğrenmek daha ilginç. Evet bu arada programım belirsiz bir süre sonra dondu. Bazen 40 dakika sonra, bazen 5-6 saat sonra. 8 saatlik bir iş gününün ardından eve geldiğimde programın her zaman işe yaramadığını fark ettim. Aynı zamanda yönlendirici şunu gösterir: Wi-Fi istemcisi bağlanıldı ve bir IP adresi verildi. Kütüphaneye olan ilgimi hızla kaybettim. Rusça forumlarda aRest'in donmasıyla ilgili herhangi bir şikayet görmedim. Zaten NodeMCU'dan veya dengesiz güç kaynağından dolayı suçluydum, ancak daha sonraki deneyler benim durumumda programın suçlu olduğunu kanıtladı. Büyük ihtimalle bende var özel durum. Kütüphanenin çalışmadığını söylemiyorum.
aRest'i bulduk.
İkinci program
bağımsız olarak yazılmıştır, yalnızca bir eklenti kitaplığı kullanır #include
Programı derleyip seri port monitörüne yükledikten sonra program bağlantı durumunu ve platformun erişim noktasından alacağı IP adresini raporlayacaktır.
Bu iki programın röle bloğunu kontrol etmek için Android işletim sistemi çalıştıran bir cep telefonu için bir uygulama oluşturuldu. Uygulama oldukça basit, App Inventor 2'de oluşturuldu. Uygulamanın oluşturulma sürecini daha sonra anlatacağım. Birincisi, röle kontrol çözümü için üçüncü seçenek.
Üçüncü seçenek karmaşık. Tek bir geliştiriciden platform donanım yazılımı ve Android programı. Blynk hizmetini kullandım. Grafiksel kontrol panelleri oluşturmaya yönelik bulut tabanlı bir hizmettir ve çok çeşitli mikrobilgisayarlar ve mikrodenetleyiciler için uygundur.
Blynk ile kontrol edilen kendi projenizi oluşturmak için çok az şeye ihtiyacınız var: uygulamayı yükleyin (iOS ve Android versiyonları mevcuttur) veya web formunu kullanın. Burada tek adımda kaydolmanız gerekecek - e-postanızı ve şifrenizi girin. Gerçek şu ki Blynk bir bulut çözümüdür ve kayıt olmadan herhangi bir kullanıcı donanım üzerinde kontrol sahibi olabilir.
İlgilenenler sunucuyu yerel olarak kurabilirler. Bu durumda internet erişimine gerek yoktur.
Sürecin kendisini anlatacağım. İki bölümden oluşur.
İlk kısım. Blynk'i şuradan indirin: Google Oyun. Programı kurun ve çalıştırın
- “Yeni Proje Oluştur”a tıklayın
- Projenin adını girin ve “Donanım modeli” alanına NodeMCU'yu seçin. Auth Token'ı ezberleyin veya bir kağıda yazıp e-postanıza gönderin. “Oluştur”a tıklayın.
- Köşedeki “+”ya tıklayın.
- "Düğme" seçeneğini seçin. Daha önce de fark ettiğiniz gibi projeye eklenen her unsur enerjiye mal oluyor. Varsayılan olarak size 2000 verilir. Widget ekledikçe enerji tüketilir. Daha fazla widget yerleştirmeniz gerekiyorsa, parayla enerji satın almanız gerekecek.
- İşte butonumuz. Üstüne tıkla. Ayarları açılacaktır.
- Bir ad, üzerinde çalışacağı pini, düğme veya anahtar modunu ve "açık" ve "kapalı" durumları için ad seçin. Uygulamadaki bir düğmeden gelen sinyali tersine çeviremezsiniz. Rölelerim için: çıkışta düğme kapalı - 0, röle açık ve tam tersi. Sunucuyu yerel bilgisayarınıza yükleyerek mantığın nasıl çalıştığına ilişkin kuralları belirleyebilirsiniz.
- Daha sonra sağ üstteki üçgene tıklayın. Program düzenleme modundan çalışmaya geçer.
- Düğmeler çalışıyor. Dikkat çeken nokta ise çoklu dokunmanın desteklenmesi. 6 tuşa aynı anda basmayı denedim. Her şey çalışıyor (açıklamaya göre telefonun 10 basınç noktası var).
İkinci kısım - bu NodeMCU ürün yazılımıdır. Blynk kitaplıklarını https://github.com/blynkkk/blynk-library indirin ve yükleyin. Arduino IDE'yi başlatın - Dosya - Örnekler - Blynk - BoardsAndShields - ESP8266_Standalone.
Örneğe gizli posta parçasındaki Kimlik Doğrulama Simgesini girin. Ayrıca WiFi ağınızın SSID'si ve ona erişim şifresi.
Tüm. Derleyin ve dikin. Her şey ilk seferde işe yaradı. Kullanıma tabi Bulut hizmeti internete erişimi olmalı cep telefonu ve NodeMCU.
İçinde bir uygulama oluşturmaUygulama Mucit.
App Inventor, Android uygulamaları için kullanıcının şunları yapmasını gerektiren görsel bir geliştirme ortamıdır: minimum bilgi programlama. Başlangıçta Google Laboratuvarlarında geliştirildi, bu laboratuvarın kapatılmasının ardından Massachusetts Teknoloji Enstitüsü'ne devredildi. App Inventor'da programlama için kullanılır GUI Scratch ve StarLogo TNG'ye çok benzeyen görsel bir programlama dili. Bir uygulamanın nasıl yazılacağını anlamak o kadar da zor değil. Rusça'da işe yarar herhangi bir belge bulamadım, ancak YouTube'da çok sayıda video var.
Hizmetin iki ana sekmesi vardır. Bunlardan ilki "Tasarımcı", burada görsel editör bileşenler yerleştirilir. App Inventor hizmetinin bir özelliği sayesinde arayüz geliştirme hızı çok yüksektir. Bir mobil cihaza MIT App Inventor 2 Companion uygulamasını yüklemeniz gerekir. Çalıştırın. Sitede Connect - AI Companion'ı seçin. Bir QR kodu oluşturulacak ve ekranda görüntülenecektir. Uygulamada "QR kodunu tara" seçeneğine tıklayıp kodu taramanız gerekiyor. Birkaç saniye sonra uygulama mobil cihazın ekranında görünecektir. Yeni öğeler veya değiştirilmiş herhangi bir veri, kelimenin tam anlamıyla bir saniye içinde, bir mobil cihazda doğrulama için kullanılabilir hale gelir.
Ekranda şunlar bulunur: IP adresini girmek için bir giriş alanı, adresi ayarlamak ve test isteği göndermek için bir düğme. Aşağıda “WebViewer” bileşeni bulunmaktadır; NodeMCU’dan yanıt olarak gönderilen sayfayı görüntüleyecektir. Aşağıda röleyi açıp kapatan iki düğmeden oluşan 4 grup bulunmaktadır. Ayrıca bir “TinyDB” bileşenine de ihtiyacımız var; sorgu oluşturmak için onun içinde bir değişken saklayacağız. Rölenin sesli komutlarla kontrol edilebilmesi için test amacıyla bir ses tanıma bileşeni de ekledim. Bu işlevi kullanmak son derece elverişsiz olduğundan, metin tanıma eylemlerinin algoritmasını açıklamayacağım. Önce düğmeye basmanız gerekiyor, ardından Google'dan "konuş" yazan bir pencere beliriyor, ardından komut telaffuz ediliyor. Üstelik komutun telaffuzu bittikten sonra tanıma sistemi bir süre bekler ve ardından her şeyin söylendiğini fark eder. Daha sonra konuşma tanıma ve metin yanıtı gelir. Önceden hazırlanmış ifadelerle karşılaştırılması gerekir. Ve ancak bundan sonra komut yürütülecektir. Düğmeye dokunmak daha kolaydır.
İkinci sekmeye "Bloklar" adı verilir. Burada uygulamanın “yazılım” kısmının tamamı bloklar halinde belirtilmiştir.
Burada programın algoritması bloklardan derlenmiştir. Algoritmanın ana kısmı ekran görüntüsündedir. Burada olup biteni anlatacağım.
- SET.Click olduğunda - “set” düğmesine basıldığında IP fonksiyonunu çağırın
- Daha sonra IP fonksiyonunun kendisi gelir. Giriş alanındaki IP adresini TinyDB'ye kaydeder ve başına “http://” ekler. Daha sonra WebViewer.GoToUrl TinyDB’den adresi alıp sonuna “/test” ekleyip bu adrese gidiyor. “http://192.168.0.1/test” alıyorum. WebViewer'da ekrana testin geçildiği bilgisi yüklenir ve NodeMCU'nun sürekli çalışma süresi görüntülenir. IP adresi yanlış girilirse sayfanın açılamadığına dair bir mesaj alırız.
- ON1.Click (ON1 butonun adıdır) ON1 fonksiyonunu çağırdığında.
- ON1 işlevi TinyDB'den adresi alır, buna "/D1/0" ekler ve sonuçta "http://192.168.0.1/D1/0" olur ve isteği gönderir. NodeMCU, alınan bu istek, D1 pininin 0’a ayarlanması gerektiğini fark eder. WebViewer’da gördüğümüz “GPIO set OK” yanıtını çalıştırır ve gönderir.
- Bir sonraki düğme olan OFF1 de aynı şeyi yapar, yalnızca sonuna “/D1/1” ekler. Lojik 1'i pin D1'e ayarlar. Röle kapanır.
Geri kalan düğmeler de benzer şekilde hareket ederek pin numaralarını ve istekteki gerekli durumu değiştirir.
Her şey kontrol edildikten ve çalışmaya başladıktan sonra Oluştur - Uygulama'ya tıklayın (.apk'yi bilgisayarıma kaydet). Uygulama apk dosyası derleniyor ve indiriliyor. Daha önce uygulamaların kurulumuna izin verilmiş olan mobil cihazınıza yüklenmelidir. Üçüncü Taraf Kaynaklar. Artık uygulama kendi kendine başlıyor. Artık AI Companion'a gerek yok ve İnternet bağlantısına da gerek yok.
Android cihazınızın WiFi yükünü yönetmesi için bu şekilde kolayca bir uygulama oluşturabilirsiniz.
NodeMCU ve cep telefonu bağlı ev yönlendiricisi. Hiçbir amacın olmadığı yerde Wi-Fi erişimi NodeMCU, mobil cihazı doğrudan ESP8266'ya bağlamak için bir erişim noktası görevi görebilir. Örneğin garaj kapısının açılmasını kontrol etmek ve garajdaki ışıkları açmak.
Not: Henüz platformdaki erişim noktasını yükseltemedim. Kütüphanelerle birlikte gelen örnek derlenmiyor. Arduino IDE derleme sırasında takılıyor. Hala bunu çözmem gerekiyor.
P.P.S. Konuyu platforma taşıdım ancak henüz yeterli çalışmayı başaramadım. Komutlar ya birkaç saniyelik bir gecikmeyle yerine getirildi ya da hiç yerine getirilmedi. Modülün araştırması şimdilik askıya alınmıştır. Araba bakımıyla meşgul.
Bir RC araba bir WiFi araba olabilir mi?
Bir RC araba iyidir, ancak ucuz RC arabaların menzili sınırlıdır ve yalnızca kit içinde verilen özel bir uzaktan kumandayla kontrol edilir.
Yaklaşık 30 dolara esnek süspansiyonlu ve arazi lastikli bir RC Jeep 4x4 satın aldım. Makineyle oynadıktan sonra Wi-Fi ve Android kullanılarak geliştirilebileceğine karar verdim. Biraz vakit geçirdikten sonra kartı makineden tamamen çıkardım. Bu kart üzerindeki voltajları ölçtüm ve bir motor kontrol sistemi geliştirdim. Arduino yardımı. Orijinal kontrol sistemi hız kontrolü için PWM kullanmaz. Araç, engellerin üzerinden çok düşük bir vitesle ve bunun sonucunda da çok yavaş bir şekilde geçmek üzere tasarlandı. Devrem PWM kullanıyor.
Birkaç aydır Arduino kullanıyorum. Ayrıca Duemilanoe Arduino'nun WiFI ile deneme yapması için asynclabs WiFi Sheild'i satın aldım. Arduino IDE'ye kurulu bir kütüphane ile birlikte gelir. WiFi kullanarak motorları ve hareket yönünü kontrol etmenizi sağlayan bir program yapabildim.
Yardımla Görsel stüdyo Araç sunucusuna bağlanan ve ona komutlar veren bir program penceresi geliştirdim. Birkaç denemeden sonra arabayı kontrol etmek için ivme ölçeri kullanan bir Android uygulaması yazdım.
Araçlar ve öğeler
Bu ortak liste Bu projede kullanılan araçlar ve öğeler. Eagle belgeleri tam olarak belirtir özellikler kullanılan bileşenler.
Multimetre
Havya
Lehim
Tornavidalar
Devre kartlarını aşındırmak için çözüm
Folyo fiberglas
Pense
arduino
AsyncLabs WiFi Kalkanı
RJ45 konnektörleri
H-köprü motor sürücüsü
Kondansatörler
Motor sürücüsü
Eagle'ı kullanarak bu devreyi tasarladım ve yaptım baskılı devre kartı onun için. Arduino için motor sürücüsü ve güç regülatörü olarak görev yapar.
Bu, ana ve direksiyon motorlarına ve Arduino'ya güç sağlamak için standart bir 7,2V pilin kullanılmasına olanak tanır.
Bu devre, motorları kontrol etmek için SN754410 çift entegre H-köprü sürücüsünü kullanır. Sürücü kontrol pinleri, AsyncLabs WiFi Sheild'e bağlanan bir RJ45 kablosuna bağlanır.
Arduino Kalkanı
Eagle'daki SparkFun kütüphanesini kullanarak, pinleri WiFi Shield'a geçirecek ve bir RJ45 konektörü ve 2 vidalı terminal aracılığıyla motor sürücüsüne bağlanacak bir Arduino Shield tasarladım.
RJ45 pin pin çıkışı çok önemlidir. Bağlantıdaki bir hata öngörülemeyen sonuçlara yol açabilir ve kartı yeniden yapmanız gerekecektir.
PCB aşındırma
Bu konu defalarca işlendi, detayına girmeyeceğim.
Kullanıyorum ve bana yakışıyor ve tecrübeyle mükemmel sonuçlar veriyor.
Tahtayı kasaya tutturmak için Velcro kullanıldı. Şanslıydım çünkü... Arabamın boru şeklindeki çerçevenin altında elektronik cihazlar için çok fazla alanı vardı.
Motor sürücü kartı ile diğer kartlar arasındaki bağlantının fotoğrafını çekmeyi unuttum ama gayet iyi oturdu ve kasada fazla yer kaplamadı.
programı
Kodum yeterince verimli olmayabilir ama işe yarıyor.
daktilo
AsynLabs Wifi Sheild ile aldığım SocketServer örneğini temel alarak CarServer'ı oluşturmayı başardım.
Kablosuz ağ bilgilerinizi Arduino koduna girmeniz gerekecektir. Makine açıldığında yönlendiriciyle bağlantı kurması için ona 15-45 saniye verin. WiFi Shield üzerindeki kırmızı LED, bağlantının kurulduğu anlamına gelir.
Bu programı C# ve MS Visual Studio 2008 kullanarak yaptım. Güzel bir pencere yaptım ve araba oklarla kontrol edilebiliyor.
Neden arabayı telefonunuzdan kontrol etmiyorsunuz?
Bu düşünce DroidX'i satın aldıktan yaklaşık bir hafta sonra aklıma geldi. Denemeye başladım ve sonunda Android SDK'yı kullanmaya başladım. Kontrol için ivmeölçer kullanan benzer uygulamalar buldum. Bu uygulamalara bakarak kendim yazdım.
Arduino kodunda belirtilen IP ve bağlantı noktasını yapıştırın. Telefonunuzu yatay tutun. Daha sonra ileri gitmek için kendinizden uzağa, geri gitmek için kendinize doğru eğin. Telefonunuzu direksiyon gibi kullanın.
Bu benim ilk büyük Android uygulamam. Hala bazı hatalar var ama çoğunlukla iyi çalışıyor.
Bahçenizde WiFi ile 4x4 aracınızı sürün!
Bu projeyi oluştururken harika zaman geçirdim. Pek çok bilgi ve yeni beceri kazandım ve artık telefonumdan kontrol edilebilen 4x4 bir arabam var.
Nereye gittiğimi görebilmem için ön camın arkasına bir kamera takmam gerekiyor. Düşük güç tüketiyor olmalı ve ayrıca videoyu kendi başına iletmelidir. (Arduino'nun bunu halledebileceğini düşünüyorum).
Radyo elemanlarının listesi
Tanım | Tip | Mezhep | Miktar | Not | Mağaza | not defterim | |
---|---|---|---|---|---|---|---|
Motor sürücüsü | |||||||
IC1 | Yonga | SN754410 | 1 | Not defterine | |||
Lineer Regülatör | 5V | 1 | Not defterine | ||||
Bipolar transistör | 2N3904 | 1 | Not defterine | ||||
C1, C2 | Elektrolitik kondansatör | 2 | Not defterine | ||||
Bağlayıcı | 2 çıkış | 7 | Not defterine | ||||
Bağlayıcı | 8 pin | 1 | Not defterine | ||||
Arduino Kalkanı | |||||||
U1 | Arduino kurulu | 1 | Not defterine | ||||
T1 | Bipolar transistör | 2N3904 | 1 | Not defterine | |||
R1 | Direnç | 1 | Not defterine | ||||
3 ABD doları | Düzeltici direnci | 1 | Not defterine | ||||
Bağlayıcı | 2 çıkış | 2 |
Göndermek ister misin? SMS Android akıllı telefonunuzdan Arduino kartınıza mı? Bu makale size bunu nasıl yapacağınızı anlatıyor!
Neye ihtiyacın var
- USB ana bilgisayar modunu destekleyen Android akıllı telefon (ör. OTG desteği) - Android 3.1 ve üstünü çalıştıran çoğu cihaz bu modu destekler. Telefonunuzu şununla kontrol edin: USB aracılığıyla Play Store'dan Ana Bilgisayar Tanılama Uygulaması;
- Arduino - herhangi bir sürüm. Uno R3 kullanacağım;
- USB kablosu Arduino için;
- USB OTG kablosu- Arduino USB kablosunu bağlamak için buna ihtiyacınız var mikro USB bağlantı noktası telefon;
- Android Studio - yüklemeniz gerekiyor. Bunu yapmak oldukça kolaydır. Android Stüdyosu Varsayımları ve kod üretimiyle uygulama geliştirmeyi kolaylaştırır. Bu en iyi IDE'lerden biridir. Bu makaleyi aynı zamanda bir rehber olarak da kullanabilirsiniz. Android kurulumu IDE.
Bir Android uygulamasının temel bileşenleri
İÇİNDE Android uygulamaüç ana dosya vardır:
MainActivity.java Burası, uygulamanın nasıl çalışacağını kontrol eden yürütülebilir Java kodunun bulunduğu yerdir. Activity_main.xml Uygulama düzenini, yani bileşenleri içerir: düğmeler, metin görüntüleme bileşenleri, vb. AndroidManifest.xml Burada uygulamanın ne zaman çalışması gerektiğini, hangi izinlere ihtiyacı olduğunu ve hangi donanıma erişmesi gerektiğini tanımlarsınız.
Daha birçok dosya var ama hepsi bu üçünü kullanarak birbirine bağlanıyor.
Bir aktivite, kullanıcının telefonla etkileşime girdiği bir ekran olarak nitelendirilebilir. Etkinlikler, bilgilerin aktarılmasına yardımcı olan düğmeler, metin alanları, resimler vb. gibi widget'lar içerir. Bu eğitimde yalnızca Arduino'ya gönderilmek üzere kullanıcı girdisini kabul edecek ve aynı zamanda alınan metni görüntüleyecek MainActivity adlı tek bir etkinlik kullanılacaktır.
Düzen
![](https://i1.wp.com/radioprog.ru/uploads/media/articles/0001/01/ba4fd729fdb62d1c7fe3881fe3cf01cec823d96c.png)
USB Uygulaması ve Bluetooth Uygulaması ile aynı düzeni kullanacağız. Basittir ve cihazlar arasındaki bağlantıyı test etmek için gereken minimum widget'ları içerir.
Gördüğünüz gibi, kullanıcıdan veri almak için bir EditText widget'ı, bağlantıyı başlatmak, veri aktarmak, bağlantıyı sonlandırmak ve TextView'ı temizlemek için düğmeler içerir. Alınan veriler bir TextView'da (düğmelerin altındaki boş alan) görüntülenir.
İşte XML kodunun bir parçası. Düğmelerin kodları benzer olduğundan burada gösterilmemiştir. Kodun tamamını makalenin sonundaki bağlantıdan indirebilirsiniz.
Burada bir RelativeLayout kullandım; bu, her widget'ın etrafındaki widget'lara göre konumlandırıldığı anlamına gelir. Düzen, widget'ları istediğiniz yere sürükleyip bırakabileceğiniz Tasarım Sekmesinde kolayca yeniden oluşturulabilir. Butona basıldığında ne olacağını anlatmamız gerekiyor. Bunun için onClick yöntemi kullanılır. Düğmenin XML kodunda yöntem adını belirtin. Bunu yapmak için satırı ekleyin:
Android:onClick="onClickMethod"
Şimdi farenizi bu çizginin üzerine getirdiğinizde solda buna benzer bir uyarı görünmelidir:
![](https://i2.wp.com/radioprog.ru/uploads/media/articles/0001/01/1fa492d90a452879a7128af59aa0ab36ddc859ad.png)
“Click'te Oluştur…” seçeneğine tıklayın. Bu, onClick yöntem kodunu MainActivity.java'ya otomatik olarak ekleyecektir. Bunu her düğme için yapmanız gerekir.
USB Seri Kitaplığı
Ayarlar seri bağlantı Android'de oldukça emek yoğun bir iştir, çünkü sizi gerektirir Manuel ayarlar pek çok şey var, bu yüzden hepsini otomatik olarak yapan birkaç kütüphane buldum. Bunlardan birkaçını test ettim ve sonunda Github kullanıcısı felHR85'in UsbSerial kütüphanesine karar verdim. Bulduğum benzer kütüphaneler arasında hala güncel olan tek kütüphane bu. Kurulumu ve kullanımı oldukça kolaydır. Kütüphaneyi projenize eklemek için indirin En son sürüm Github'daki JAR dosyası. Proje dizininizin libs alt dizinine yerleştirin. Ardından Android Studio'daki dosya gezgininde JAR dosyasına sağ tıklayın ve "Kütüphane Olarak Ekle"yi seçin. Bu kadar!
Program yürütme algoritması
![](https://i0.wp.com/radioprog.ru/uploads/media/articles/0001/01/c863581dfe792509722743f3d8cf3fb804cdb10e.png)
Bu nasıl ilerleyeceğimizin kısa bir özetidir. Her aktivitenin, aktivite oluşturulduğunda çalışan bir onCreate() yöntemi vardır. Başlangıçta çalıştırmak istediğiniz kod ne olursa olsun bu yöntemin içine yerleştirilmelidir. Lütfen cihazdan okumanın eşzamansız olduğunu, yani çalışacağını unutmayın. arka plan. Bu, verilerin mümkün olan en kısa sürede alınmasını sağlamak içindir.
Bağlantı açma
Öncelikle Begin butonu için bir onClick metodu tanımlayalım. Tıklandığında, bağlı tüm cihazları aramanız ve ardından bağlı cihazın VendorID'sinin (satıcı kimliği) Arduino'nun VendorID'si ile aynı olup olmadığını kontrol etmeniz gerekir. Bir eşleşme bulunursa kullanıcıdan izin istenmelidir. Her köle USB aleti Bu aygıt için hangi sürücülerin kullanılması gerektiğini belirlemek için kullanılabilecek bir Satıcı Kimliği ve Ürün Kimliği vardır. Herhangi bir Arduino kartının satıcı kimliği 0x2341 veya 9025'tir.
Public void onClickStart(View view) ( HashMap usbDevices = usbManager.getDeviceList(); if (!usbDevices.isEmpty()) ( boolean keep = true; for (Map.Entry girişi: usbDevices.entrySet()) ( aygıt = giriş. getValue(); int DeviceVID = Device.getVendorId(); if (deviceVID == 0x2341) //Arduino Tedarikçi Kimliği ( PendingIntent pi = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0); usbManager.requestPermission( cihaz, pi); keep = false; ) else ( bağlantı = null; cihaz = null; ) if (!keep) break; )) ))
Şimdi kullanıcıdan izin istemek ve yayın mesajlarını almak için bir BroadcastReceiver tanımlayalım. otomatik başlatma cihaz bağlandığında bağlantı ve bağlantı kesildiğinde bağlantının kapatılması.
// Seri bağlantıyı otomatik olarak başlatmak ve kapatmak için yayın mesajı alıcısı. özel final BroadcastReceiver yayınReceiver = new BroadcastReceiver() ( @Override public void onReceive(Bağlam bağlamı, Niyet amacı) ( if (intent.getAction().equals(ACTION_USB_PERMISSION)) ( boolean verildi = niyet.getExtras().getBoolean(UsbManager. EXTRA_PERMISSION_GRANTED); if (verildi) ( bağlantı = usbManager.openDevice(aygıt); seriPort = UsbSerialDevice.createUsbSerialDevice(aygıt, bağlantı); if (serialPort != null) ( if (serialPort.open()) ( //Seri parametreleri ayarla bağlantılar. setUiEnabled(true); //Kullanıcı arayüzündeki düğmeleri etkinleştirin. seriPort.setBaudRate(9600); seriPort.setDataBits(UsbSerialInterface.DATA_BITS_8); seriPort.setStopBits(UsbSerialInterface.STOP_BITS_1); seriPort.setParity(UsbSerialInterface.PARITY_NONE); seriPort . setFlowControl(UsbSerialInterface.FLOW_CONTROL_OFF); seriPort.read(mCallback); // tvAppend(textView,"Seri Bağlantı Açıldı!\n"); ) else ( Log.d("SERIAL", "PORT NOT OPEN"); ) ) else ( Log.d("SERİ", "BAĞLANTI NOKTASI BOŞ"); ) ) else ( Log.d("SERİ", "PERM VERİLMEDİ"); ) ) else if (intent.getAction().equals(UsbManager.ACTION_USB_DEVICE_ATTACHED)) ( onClickStart(startButton); ) else if (intent.getAction) ().equals(UsbManager.ACTION_USB_DEVICE_DETACHED)) ( onClickStop(stopButton); ) ); );
İlk IF koşulu karşılanırsa ve kullanıcı izin vermişse, Satıcı Kimliği ihtiyacımız olan Satıcı Kimliğiyle eşleşen bir cihazla bağlantı başlatın. Ayrıca, bir cihaz bağlantısı veya bağlantı kesilmesi yayını alınırsa Başlat ve Durdur düğmeleri için onClick yöntemlerini manuel olarak çağırın. SerialPort, cihaz ve bağlantı argüman olarak kullanılarak tanımlanır. Başarılı olursa SerialPort'u açın ve uygun parametreleri ayarlayın. Arduino Uno için parametre değerleri şunlardır: 8 veri biti, 1 durdurma biti, eşlik yok, akış kontrolü kapalı. Baud hızı 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 veya 115200 bps olabilir, ancak standart 9600 bps'yi kullanacağız.
Cihazdan veri alma
Yukarıdaki kod parçacığında seriPort.read(mCallback) içeren satıra dikkat edin. Burada, okuma işlevine, gelen veri algılandığında otomatik olarak ateşlenecek olan bir Geri Çağırma nesnesine bir referans iletilir.
UsbSerialInterface.UsbReadCallback mCallback = new UsbSerialInterface.UsbReadCallback() ( // Veri alındığında çağrılan bir geri çağırma yöntemini tanımlayın. @Override public void onReceivedData(byte arg0) ( String data = null; try ( data = new String(arg0, " UTF-8"); data.concat("/n"); tvAppend(textView, data); ) catch (UnsupportedEncodingException e) ( e.printStackTrace(); ) ) );
Alınan veriler ham bayt biçiminde olacaktır. Bunları yeniden kodlamamız gerekecek okunabilir formatörneğin UTF-8. Daha sonra özel tvAppend() yöntemi kullanılarak TextView'a eklenirler. Bu, bu şekilde yapılır çünkü kullanıcı arayüzünde herhangi bir değişiklik yalnızca iş parçacığında yapılabilir. Kullanıcı arayüzü. Bu Geri Arama arka plan iş parçacığı olarak çalıştırılacağından kullanıcı arayüzünü doğrudan etkileyemez.
Private void tvAppend(TextView tv, CharSequence text) ( final TextView ftv = tv; final CharSequence ftext = text; runOnUiThread(new Runnable() ( @Override public void run() ( ftv.append(ftext); ) )); )
Verileri cihaza aktarma
Veri aktarımı, bir cihazdan veri okumaya kıyasla nispeten basittir. Bu, bağımsız değişken olarak iletilecek veri baytlarını içeren basit bir işlev çağrısıdır. Bu, Gönder düğmesinin onClick yönteminde uygulanacaktır.
SerialPort.write(string.getBytes());
Bağlantıyı kapatma
Bağlantıyı kapatmak için seri bağlantı noktasını kapatmanız yeterlidir.
SeriPort.close();
Uygulama bildirimi
Manifest, uygulamanın hangi ek izinleri gerektirebileceğini açıklar. İhtiyacımız olan tek izin, telefonu bir USB ana bilgisayarı yapma iznidir. Manifest'inize aşağıdaki satırı ekleyin:
Ana aktiviteniz olan MainActivity'ye bir niyet filtresi ekleyerek uygulamanızı otomatik olarak başlamaya zorlayabilirsiniz. Bu niyet filtresi herhangi bir yeni cihaz bağlandığında tetiklenecektir. Cihaz türü, XML dosyasındaki Satıcı Kimliği ve/veya Ürün Kimliği kullanılarak açıkça belirtilebilir.
" android:resource="@xml/device_filter " satırına dikkat edin. Bu, derleyiciye, aygıt özelliklerini src/main/res/xml dizininde Device_filter adlı bir dosyada bulabileceğini bildirir, bu nedenle, içinde bir " xml " alt dizini oluşturun. src dizini /main/res ve içine aşağıdaki içeriğe sahip bir dosya yerleştirin:
Uygulama testi
Uygulamayı oluşturun ve akıllı telefonunuzda çalıştırın. Şimdi Arduino IDE'yi başlatın ve Arduino'yu, kartın seri port üzerinden kabul edeceği şeyi basitçe yankılayacak şekilde yapılandırın. İşte bunu yapmanıza yardımcı olacak çok basit bazı kodlar:
Void setup() ( Serial.begin(9600); ) void loop() ( char c; if(Serial.available()) ( c = Serial.read(); Serial.print(c); ) )
Şimdi Arduino'yu bir OTG kablosu kullanarak telefonunuzun microUSB bağlantı noktasına bağlayın. Uygulama otomatik olarak başlatılmalıdır. Biraz metin göndermeyi deneyin; aynı veriler döndürülecektir!
![](https://i2.wp.com/radioprog.ru/uploads/media/articles/0001/01/b2feb577aab2da3a577b86d03c5e6e958a05b347.png)
Çözüm
Bu makale Arduino'nun akıllı telefonunuzla nasıl iletişim kurabileceğini göstermektedir. Ve onu kullanma olanakları sonsuzdur! Akıllı telefonda yerleşik olmayan herhangi bir sensörden veriye ihtiyaç duyulması durumunda, herhangi bir mikro denetleyiciyi kullanarak bu sensörden veri okuyabilir ve akıllı telefona aktarabilirsiniz. Bir sonraki makale, popüler HC05 bluetooth modülünü kullanarak akıllı telefonunuzu Arduino'ya nasıl bağlayacağınızı gösterecek.
Bu makalede, Android mobil işletim sistemi için küçük bir uygulamanın oluşturulması ve Arduino için bir taslak ayrıntılı olarak anlatılacaktır. Arduino Uno, Bluetooth modüllü bir Kablosuz Kalkana sahip olacaktır. Uygulama Bluetooth modülüne bağlanacak ve belirli bir komut gönderecektir. Buna karşılık çizim, Arduino'ya bağlı LED'lerden birini yakmak veya kapatmak için bu komutu kullanacaktır.
İhtiyacımız olacak
Android Uygulaması Oluşturma
boşluk
Android işletim sistemi için geliştirme, ADT geliştirme ortamı olan Android Geliştirme Araçları'nda gerçekleştirilir. Google geliştirici portalından indirilebilir. ADT'yi indirip yükledikten sonra başlatmaktan çekinmeyin. Ancak uygulamayı geliştirmeye başlamak için henüz çok erken. Ayrıca gerekli sürümün Android SDK'sını da indirmeniz gerekir. Bunu yapmak için Android SDK Yöneticisi “Pencere → Android SDK Yöneticisi”ni açmanız gerekir. Listede ihtiyacımız olan SDK'yı seçmemiz gerekiyor. Android kasası 2.3.3 (API 10). Telefonunuz yoksa 2.3.3 veya üzerini seçin; ve varsa telefonun işletim sistemi sürümüyle eşleşen bir sürüm. Daha sonra kurulum işlemini başlatmak için “Paketleri Kur” butonuna tıklayın.
İndirme ve kurulum tamamlandıktan sonra uygulamayı oluşturmaya başlıyoruz. “Dosya → Yeni → Android Uygulama Projesi” seçeneğini seçin. Pencerenin içeriğini şekildeki gibi dolduralım.
Uygulama Adı - Google Play Store'da görüntülenecek uygulamanın adı. Ancak uygulamayı yayınlamayacağımız için adı bizim için pek önemli değil.
Proje Adı - ADT'deki projenin adı.
Paket Adı - uygulama tanımlayıcısı. Şu şekilde oluşturulmalıdır: sitenizin adı tersten artı bazı uygulama adları.
“Minimum Gerekli SDK”, “Hedef SDK”, “Birlikte Derle” açılır listelerinde daha önce indirdiğimiz sürümü seçin. SDK'nın daha yeni sürümleri, uygulamalara yönelik grafik temalarını destekler, ancak eski sürümler desteklemez. Bu nedenle “Tema” alanında “Yok” seçeneğini seçin. Sonrakine tıkla".
"Özel başlatıcı simgesi oluştur" seçeneğinin işaretini kaldırın: Bu makalenin amaçları doğrultusunda, bir uygulama simgesi oluşturmaya odaklanmayacağız. Sonrakine tıkla".
Açılan pencerede “Etkinlik” görünümünü seçebilirsiniz: uygulama başlatıldığında ekranda ne olacağına ilişkin görünüm. “Boş aktivite”yi seçiyoruz, bu da her şeye sıfırdan başlamak istediğimiz anlamına geliyor. Sonrakine tıkla".
Uygulamamızda tek bir Activity bulunacağından karşınıza çıkan pencerede herhangi bir değişiklik yapmanıza gerek kalmayacaktır. Bu yüzden “Bitir”e tıklamanız yeterli.
İşte bu kadar, uygulamamız oluşturuldu.
Öykünücüyü ayarlama
Android uygulamalarında hata ayıklama gerçek bir cihazda veya yoksa bir emülatörde yapılır. Bizimkini yapılandıralım.
Bunu yapmak için “Pencere → Android Sanal aygıt Yöneticisi". Açılan pencerede "Yeni"ye tıklayın. Görüntülenen formun alanlarını doldurun. Öykünücünün "telefona" kaç tane ve hangi kaynakları sağlayacağı onlara bağlıdır. Makul değerleri seçin ve Tamam'a tıklayın.
İÇİNDE android penceresi Sanal Cihaz Yöneticisi, “Başlat” düğmesine tıklayın. Bu emülatörü başlatacaktır. Başlatma birkaç dakika sürer. Bu yüzden sabırlı ol.
Sonuç olarak, buna benzer bir emülatör penceresi göreceksiniz:
Doldurma Etkinliği
Etkinlik, uygulama başlatıldıktan sonra telefon ekranında görüntülenen şeydir. Üzerinde "Kırmızı LED'i yak" ve "Mavi LED'i yak" olmak üzere iki düğmemiz olacak. Bunları ekleyelim. “Paket Gezgini” panelinde res/layout/activity_main.xml dosyasını açın. Görünümü ekran görüntüsündekiyle yaklaşık olarak aynı olacaktır.
2 “ToggleButtons”u ekran formuna sürükleyin. “activity_main.xml” sekmesine geçin ve aşağıdaki kodu görün:
Activity_main_aiutogen.xmlBu, grafik olarak gösterilmeyen ancak XML formatında açıklanan Etkinliğimizden başka bir şey değildir.
Bileşen adlarını daha anlaşılır hale getirelim. Android:id alanlarını aşağıdaki gibi değiştirelim.
Ayrıca bunlara imza ekleyeceğiz, renklerini ve metin boyutunu değiştireceğiz. Ortaya çıkan işaretleme kodu şöyle görünecektir:
aktivite_main.xmlAynı değişiklikler grafik modunda “Anahat/Özellikler” sekmesi kullanılarak da yapılabilir.
Deneme çalışma
Yeni oluşturulan uygulamayı emülatör üzerinde çalıştırabiliriz. Başlatma ayarları “Çalıştır” → Yapılandırmaları Çalıştır”a gidin, sol tarafta “Android Uygulaması”na tıklayın. Yeni bir yapılandırma “Yeni_yapılandırma” görünür. Pencerenin sağ tarafında “Hedef” sekmesini seçin ve “Tüm uyumlu cihazlarda/AVD'de başlat” seçeneğini seçin.
“Uygula”ya ve ardından “Çalıştır”a tıklayın. Uygulama emülatörde başlatılacaktır.
Düğmelere basabilirsiniz. Ancak henüz tıklama işleyicilerini yazmadığımız için hiçbir şey olmayacak.
Uygulamayı gerçek bir cihazda çalıştırmak için ayarlarında “USB Hata Ayıklama” seçeneğini etkinleştirmeniz ve bilgisayarınıza bağlamanız gerekmektedir.
Gerçek bir cihazda uygulama tamamen aynı görünür.
Android için Kod Yazma
Manifestoyu düzenlemek
Her Android uygulamasının sisteme hangi hakları vermesi gerektiğini söylemesi gerekir. Haklar AndroidManifest.xml adı verilen manifest dosyasında listelenmiştir. İçinde uygulamamızda Bluetooth kullanmak istediğimizi belirtmeliyiz. Bunu yapmak için sadece birkaç satır ekleyin:
AndroidManifest.xmlAna kodun eklenmesi
Uygulamamıza hayat vermenin zamanı geldi. MainActivity.java dosyasını açın (src → ru.amperka.arduinobtled). Başlangıçta aşağıdaki kodu içerir:
MainActivityAutogen.java paketi ru.amperka.arduinobtled ; android.os.Bundle'ı içe aktarın; android.app.Activity'yi içe aktarın; android.view.Menu'yu içe aktar; public class MainActivity, Activity'yi genişletir ( @Override protected void onCreate(Bundle saveInstanceState) ( super .onCreate (savedInstanceState) ; setContentView(R.layout .activity_main) ; ) @Override public boolean onCreateOptionsMenu( Menü menu) ( getMenuInflater() .inflate (R.menu .main , menu) ; return true ; ))Kodu ihtiyacımıza göre ekleyelim:
Bluetooth kapalıysa açacağız.
Düğme tıklamalarını işleyeceğiz
Hangi butona basıldığına dair bilgi göndereceğiz.
İki haneli bir sayı ile bir baytı Arduino'ya aktaracağız. Sayının ilk basamağı, şu veya bu LED'in bağlı olduğu pinin numarası, ikincisi ise LED'in durumudur: 1 - açık, 0 - kapalı.
Komut numarası çok basit bir şekilde hesaplanır: Kırmızı düğmeye basıldığında 60 sayısı alınır (kırmızı LED için Arduino'nun 6. pinini seçtik) ve LED'in yanmasına bağlı olarak 1 veya 0 eklenir. şimdi açık olsun ya da olmasın. Yeşil düğme için her şey benzer, yalnızca 60 yerine 70 alınır (yeşil LED pin 7'ye bağlı olduğundan). Sonuç olarak bizim durumumuzda 4 takım mümkün: 60, 61, 70, 71.
Söylenen her şeyi uygulayan kod yazalım.
MainActivity.java paketi ru.amperka.arduinobtled ; Java.io.IOException'ı içe aktarın; Java.io.OutputStream'i içe aktarın; içe aktarmak java.lang.reflect.InvationTargetException; Java.lang.reflect.Method'u içe aktarın; android.app.Activity'yi içe aktarın; içe aktarmak android.bluetooth.BluetoothAdaptör; içe aktarmak android.bluetooth.BluetoothDevice; içe aktarmak android.bluetooth.BluetoothSocket; android.content.Intent'i içe aktarın; android.os.Bundle'ı içe aktarın; android.util.Log'u içe aktarın; android.view.Menu'yu içe aktar; android.view.View'ı içe aktarın; içe aktarmak android.view.View.OnClickListener; android.widget.Toast'ı içe aktarın; android.widget.ToggleButton'u içe aktarın; genel sınıf MainActivity, Faaliyet uygulamalarını genişletiyor Görüş.OnClickListener( //Buton sınıflarımızın örnekleri Geçiş Düğmesi kırmızı Düğme; Geçiş Düğmesi yeşil Düğme; //Arduino'ya veri göndereceğimiz soket BluetoothSocket istemcisiSocket; //Bu fonksiyon uygulama başlatıldığında otomatik olarak çalışır@Override protected void onCreate(Bundle saveInstanceState) ( super .onCreate (savedInstanceState) ; setContentView(R.layout .activity_main ) ; //Uygulama penceresindeki düğmenin görünümünü uygulamaya "bağlayın" redButton = (ToggleButton) findViewById(R.id .toggleRedLed ) ; greenButton = (ToggleButton) findViewById(R.id .toggleGreenLed ) ; //Düğmeye bir "tıklama dinleyicisi" ekleyin redButton.setOnClickListener (bu ) ; greenButton.setOnClickListener (bu ) ; // Bluetooth'u açın. Zaten etkinse hiçbir şey olmayacak Sicim activeBT = BluetoothAdapter.ACTION_REQUEST_ENABLE; startActivityForResult(new Intent(enableBT) , 0 ) ; //Varsayılan bluetooth adaptörünü kullanmak istiyoruz BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter(); //Bu eylemleri yapmaya çalışıyorum denemek ( //Bu adrese sahip cihaz Bluetooth Bee'mizdir //Adres şu şekilde belirlenir: bağlantı kurun //PC ile modül arasında (pin: 1234) ve ardından ayarlara bakın //bağlantı modülü adresi. Büyük olasılıkla benzer olacaktır. BluetoothDevice cihazı = bluetooth.getRemoteDevice("00:13:02:01:00:09" ) ; //Cihazla bağlantıyı başlatıyoruz Yöntem m = Device.getClass().getMethod("createRfcommSocket", new Class(int.class)); clientSocket = (BluetoothSocket) m.invoke(aygıt, 1); clientSocket.connect(); //Herhangi bir hata oluşursa günlüğe bir mesaj yazdırın) yakalamak ( IO İstisnası Güvenlik İstisnası e) ( Log.d ("BLUETOOTH", e.getMessage () ) ; ) catch ( Böyle Yöntem İstisnası Yok e) ( Log.d ("BLUETOOTH", e.getMessage () ) ; ) catch ( YasadışıTartışmaİstisna e) ( Log.d ("BLUETOOTH", e.getMessage () ) ; ) catch ( Yasadışı Erişim İstisnası e) ( Log.d ("BLUETOOTH", e.getMessage () ) ; ) catch ( InvokasyonTargetException e) ( Log.d ("BLUETOOTH", e.getMessage () ) ; ) // Başarılı bağlantı hakkında bir mesaj görüntüle Toast.makeText(getApplicationContext(), "BAĞLANTI", Toast.LENGTH_LONG).show(); ) @Genel boolean'ı geçersiz kıl onCreateOptionsMenu( Menü Menü) ( // Menüyü şişirelim; bu, eğer varsa eylem çubuğuna öğeler ekler. getMenuInflater() .inflate (R.menu .main, menü) ; doğruyu döndür; ) //çağrılacak fonksiyon tam olarak bu@Tıklamada herkese açık geçersiz kılmayı geçersiz kıl( Görüş v) ( //Veri gönderilmeye çalışılıyor denemek ( //Veri aktarımı için çıkış akışını alın Çıkış Akışı outStream = clientSocket.getOutputStream(); int değer = 0; //Hangi butona basıldığına bağlı olarak, //gönderilecek verileri değiştir if (v == redButton) ( değer = (redButton.isChecked () ? 1 : 0 ) + 60 ; ) else if (v == greenButton) ( value = (greenButton.isChecked () ? 1 : 0 ) + 70 ; ) //Çıkış akışına veri yazıyoruz outStream.write(değer); ) yakalamak ( IO İstisnası e) ( // Hata varsa bunları günlüğe yazdır Log.d ("BLUETOOTH", e.getMessage (, ÇIKIŞ) ; pinMode(7, ÇIKIŞ) ; ) void loop() ( //Veri geldiyse if (Seri.available() > 0) ( //Gelen byte'ı oku bayt gelenByte = Serial.read(); //Alınan baytın değerini 10'a bölen tamsayı ile pin numarasını alıyoruz //ve 2'ye bölümden kalan kısmı alarak yapmamız gereken işlem: //(1 - yanar, 0 - kapanır) digitalWrite(gelenByte / 10, gelenByte %2) ; ))Eskiz doldurmanın özellikleri
Denetleyiciyle Bluetooth-Bee iletişimi için, ürün yazılımıyla aynı pinler (0 ve 1) kullanılır. Bu nedenle, denetleyiciyi programlarken, “Kablosuz Kalkan” üzerindeki “SERİ SEÇİM” anahtarı “USB” konumuna ayarlanmalı ve yanıp söndükten sonra “MİKRO” konumuna döndürülmelidir.
Sonuç
Çözüm
Bu yazımızda Android işletim sistemine yönelik uygulamaların nasıl oluşturulacağını ve Bluetooth üzerinden veri aktarımının nasıl yapılacağını öğrendik. Artık Android işletim sistemine sahip bir telefonun ekranında bir butona bastığınızda kart üzerindeki LED'in durumu değişecek.
Fikrinizi geliştirebilir ve Android'de daha kullanıcı dostu bir arayüz oluşturabilir, onunla çok daha karmaşık cihazları kontrol edebilir, Android Market'te harika uygulamalar yayınlayabilir ve çok ama çok daha ilginç şeyler yapabilirsiniz!
Firmware'i, güncellemeleri ve diğer verileri bir havya ve teller kullanarak aktarmak Arduino için en iyi çözüm değildir. Ancak arduino wi-fi için mikrodenetleyiciler ucuz değildir ve her zaman ihtiyaç duyulmaz, bu nedenle kullanıcılar projelerinde gereksiz yere bunları kullanmamayı tercih ederler.
Ancak şimdi başka bir Çin ürünü piyasayı ele geçirdi; kendi wi-fi jammer esp8266'nızı bir Arduino kartına veya başka bir sisteme bağlayabilirsiniz ve bir dizi başka avantajla birlikte istikrarlı bir bağlantı elde edersiniz. Öyleyse arduino uno wi-fi'yi ve bu modülü satın almaya değer olup olmadığını ve ayrıca arduino wi-fi'deki benzer bir mikro denetleyicinin gerçekte ne olduğunu bulalım.
Günümüzde çoğu Arduino kullanıcısı artık bu tür cihazların fiyatı konusunda endişelenmiyor, ancak 3 yıl önce Arduino wi-fi modülü lüks olarak görülüyordu. Bütün bunlar, üreticileri pazara tamamen yeni bir ürün sunan, işlevselliği açısından şaşırtıcı ve aynı zamanda oldukça ucuz olan, önemli bir katkı sağlayan ve bu yönde rekabet yaratan Wi-Fi jammer esp8266 sayesinde.
Böylece arduino wi-fi esp8266 artık tüm kardeşleri gibi piyasadaki en uygun fiyatlı modül olarak kabul ediliyor. Böylece, yabancı sitelerdeki fiyat 2 dolardan başlıyor, bu da bu modülleri gruplar halinde satın almanıza ve işlevselliği korumak için kontakları yeniden lehimleyerek binlerce kez yeniden flaşlamanıza gerek kalmamasına olanak tanıyor.
![](https://i0.wp.com/arduinoplus.ru/wp-content/uploads/2018/01/esp-620x883.jpg)
İlk başta, bu Arduino wi-fi modülü esas olarak bir arduino wi-fi kalkanı olarak kullanıldı, çünkü en ucuz seçenekti ve hiçbir şekilde orijinalinden daha aşağı değildi. Cihaz gerçekten neredeyse efsane çünkü fiyatına göre önemli bir dezavantaj yok. Kullanıcı kütüphaneleri de dahil olmak üzere çok sayıda kütüphane vardır ve ayrıca Seri veri yolları ve en basit AT ve AT+ komutları aracılığıyla çalışmayı destekler. Bu sayede, diğer üçüncü taraf mikrokontrolörlerde sıklıkla olduğu gibi, kötü şöhretli C99'un anlambilimini incelemeye gerek yoktur.
Buna göre, yeni başlayanlar bile bunu saniyeler içinde anlayacak ve bir profesyonel, önceden hazırlanmış kütüphaneleri kullanabilecektir. Diğer avantajlar şunları içerir:
- İşlemci 160 MHz'dir, ancak 32 bittir ve bu da performans üzerinde belirli bir iz bırakır. Ancak modülün hala yüksek frekansları kesen ve kaynakların çoğunu bilinmeyen nedenlerle tüketen Arduino kartlarıyla birlikte kullanıldığını hatırlamakta fayda var.
- Esp8266 wi-fi modülünü piyasaya süren üretici ilginç projeleri durdurmadı ve artık kanıtlanmış kalitede bir dizi mikrodenetleyici var.
- Modern ağ güvenliği standartları. Elbette, WPA ve WPA2 artık istediğimiz kadar güvenli değil, ancak bu kadar ucuz bir denetleyicide onların varlığı bizi memnun etmekten başka bir şey yapamaz.
- 10 bit dahil 16 çıkış bağlantı noktası, kartla denemeler yapmanıza olanak tanır.
Daha da önemlisi, kart türüne bağlı olarak kutudan çıktığında 4 megabayta kadar kalıcı bellek bulacaksınız ve bu, büyük kitaplıklarla ve hatta bazı medya dosyalarıyla çalışmayı büyük ölçüde basitleştirir. Sonuçta çoğu Arduino panosunda 1 megabayt bile karşılanamaz bir lüks olarak kabul edilir.
Esp8266 wi-fi'nin özellikleri, özellikle daha pahalı rakipleriyle karşılaştırıldığında kesinlikle cesaret vericidir, ancak bu kartlarla daha önce deneyimi olmayan bir kullanıcının, onu nasıl bağlayacağı konusunda bir sorusu olacaktır. Gerçek şu ki, modülde yeni başlayanların görmeye alıştığından çok daha fazla pin var ve buna göre paniğe kapılmaya başlıyorlar. Ancak durumu anlarsanız, gerçekte bunda karmaşık bir şey yoktur. Lehim ve havya stoklamak ve talimatları okumak yeterlidir.
Wi-Fi Modülünü Arduino'ya Bağlama
Esp8266 esp 12e'yi bağlamaya ve esp8266 wi-fi uart köprüsünün ne olduğuna bakalım. Sonuçta en çok soruyu gündeme getiren şey modülün bağlantısı ve konfigürasyonudur.
![](https://i0.wp.com/arduinoplus.ru/wp-content/uploads/2018/01/esp8266_esp12e-620x479.png)
Öncelikle mikrodenetleyicinin hangi versiyonuna sahip olduğunuza karar verin. Birincisinde pinlerin yakınına LED'ler yerleştirilmiş, yakın zamanda üretilmeye başlanan ikincisinde ise sinyal ışıkları antenin yanına yerleştirilmiştir.
Bağlanmadan önce, paket değişim hızını saniyede 9600 bilgi birimine çıkarmanıza olanak tanıyan en son ürün yazılımını indirmelisiniz. Bağlantıyı bir usb-ttl kablosu ve CoolTerm'in ilgili terminalini kullanarak kontrol edeceğiz.
![](https://i0.wp.com/arduinoplus.ru/wp-content/uploads/2018/01/esp-nano-620x292.png)
Yukarıda açıklanan kabloyu bağlamak için kullanılan pinler standarttır ancak güç, Arduino'dan gelen 3,3 voltluk bir pin üzerinden gelir. Kart tarafından sağlanan maksimum akımın 150 mA'nın üzerine ayarlanamayacağını ve arduino için esp8266 esp 07 ve esp8266 witty cloud wi-fi modülünün 240 mA gerektirdiğini unutmamak önemlidir.
Ancak başka bir akım kaynağı yoksa Arduino'nun standart sürümünü kullanabilirsiniz ancak kartın gücü zarar görecektir. Her ne kadar yük ağır değilse 70 mA yeterlidir, mikrodenetleyicinin en yüksek yükleme zamanlarında ani yeniden başlatılmasına hazırlıklı olun ve yazılımı buna göre yazın, böylece karta aşırı yüklenmeden dosyaları filtreleyip böler.
![](https://i2.wp.com/arduinoplus.ru/wp-content/uploads/2018/01/esp-arduino-620x392.jpg)
Başka bir bağlantı seçeneği aşağıdadır. Önemli - RX-TX kontakları bir artı işaretiyle bağlanır. ESP8266 modülünün sinyal seviyeleri 3,3V ve Arduino'nun 5V olduğundan sinyal seviyesini dönüştürmek için dirençli bir voltaj bölücü kullanmamız gerekiyor.
Arduino'da bir Wi-Fi modülünün kaydedilmesi
Bildiğiniz gibi, uygun deneyimle esp8266 ex 12e shield'i bir akıllı telefonla eşleştirebilirsiniz ancak yeni başlayanlar için esp8266 esp 12'yi Arduino sistemine kaydetmek zorluklara neden olur. Aslında, hata ayıklama menüsü aracılığıyla birkaç standart AT komutu vererek modülü bağlamak ve işlevselliğini kontrol etmek yeterlidir.
Örneğin, standart bir LED ile yanıp sönmeyi ekleyebilirsiniz (yukarıdaki bağlantı şeması için):
#define TXD 1 // GPIO1/TXD01 void setup() ( pinMode(TXD, OUTPUT); ) void loop() ( digitalWrite(TXD, HIGH); gecikme(1000); digitalWrite(TXD, LOW); gecikme(1000) ;)
Kart, mikro denetleyiciyi sistemde gördüğünü onayladığı anda, onunla tam çalışmaya başlayabilirsiniz. Ancak şunu belirtmekte fayda var ki, projede Arduino kartının kendisi yalnızca bu denetleyiciyi bağlamak için kullanılıyorsa, bu mantıksızdır.
Esp8266, Arduino'nun "beynini" kullanmadığından ve flash belleği birkaç temel kitaplığı ve ürün yazılımını depolamak için oldukça yeterli olduğundan, bir USB-UART dönüştürücü yeterlidir. Buna göre, eğer onu dönüştürücüye basitçe lehimleyip projede kullanmaya devam edebiliyorsanız, yardımcı karta fazladan para harcamanın bir anlamı yoktur. Aynı zamanda, yardımcı bir güç kaynağı bağlayarak ve sistem gücü eksikliğinden dolayı en kritik anda veri aktarımının duracağından endişe etmeden.
Önemli Not! Son devre için ise her zamanki gibi krokiyi Arduino’ya yüklüyoruz ancak ESP8266 modülü 0 ve 1 numaralı pinlere bağlı olduğu için programlama imkansız hale geliyor. Derleyici bir hata gösterecektir. ESP8266'ya giden kabloları 0 ve 1 numaralı pinlerden ayırın, programlamayı gerçekleştirin ve ardından pinleri yerlerine geri koyun ve Arduino'daki sıfırlama düğmesine basın.