İçindekiler:

ESP8266 Doğrudan Veri İletişimi: 3 Adım
ESP8266 Doğrudan Veri İletişimi: 3 Adım

Video: ESP8266 Doğrudan Veri İletişimi: 3 Adım

Video: ESP8266 Doğrudan Veri İletişimi: 3 Adım
Video: Arduino ile ESP8266 Kullanımı ve İnternet Erişimi-3 (Web Server Kurulumu ile Akıllı Ev Uygulaması) 2024, Kasım
Anonim
ESP8266 Doğrudan Veri İletişimi
ESP8266 Doğrudan Veri İletişimi

Tanıtım

Arduinos ve nRF24l01 modülleri ile bazı projeler yaparken, bunun yerine bir ESP8266 modülü kullanarak biraz çaba harcayabilir miyim diye merak ediyordum. ESP8266 modülünün avantajı, kart üzerinde bir mikro denetleyici içermesidir, bu nedenle ek bir Arduino kartına gerek yoktur. Ek olarak, ESP8266'nın bellek boyutu çok daha büyüktür ve hız açısından ESP8266, Arduino'nun 16MHz yerine maksimum 160MHz'de çalışır. Tabii ki bazı olumsuz taraflar var.

ESP8266 yalnızca 3.3V ile çalışır, daha az pini vardır ve Arduino'nun sahip olduğu güzel analog girişleri eksiktir (bir tane vardır, ancak yalnızca 1.0V için, 3.3V için değil). Ek olarak, Arduino + nRF24l01 için daha birçok kod örneği vardır, ardından özellikle doğrudan veri aktarımı söz konusu olduğunda ESP8266 için vardır.

Bu yüzden aklımda bir projeyle, tüm WWW ve HTTP öğeleri olmadan iki ESP8266 arasında hızlı ve hafif veri aktarımı konusuna baktım.

İnternette örnekler ararken (aşağıdaki kodun çoğu çeşitli yerlerden netten alınmıştır) Nice "böyle yap" örnekleri olmadan doğrudan veri aktarımının nasıl uygulanacağıyla ilgili birçok soruyla karşılaştım. Bazı örnek kodlar vardı, ancak çoğunlukla neden çalışmadığı sorusu vardı.

Biraz okuyup anlamaya çalıştıktan sonra, iki ESP8266 arasında hızlı ve basit veri aktarımına izin veren aşağıdaki örnekleri oluşturdum.

1. Adım: Sınırlar ve Arka Planlar (TCP ve UDP)

Oraya ulaşmak için, nRF24l01'e kıyasla bazı sınırların netleştirilmesi gerekiyor.

ESP8266'yı Arduino ortamında kullanmak için kullanılacak temel kitaplık ESP8266WiFi.h'dir. Farklı olanlar olabilir, ancak çoğu örnek üzerinde belirtilenleri kullanır. Bunu kullanırken, iletişiminizi WiFi seviyesine getirmeniz gerekir.

Bu nedenle, iletişim kurmak için en az bir erişim noktası (AP) / sunucu ve bir istemci olması gerekir. AP, ağın adını ve IP adreslerini sağlar ve istemci bu sunucuya bağlanacaktır.

Bu nedenle, her iki uçtaki kodun aşağı yukarı aynı olduğu (iletim kanalları hariç) nRF24l01 ile karşılaştırıldığında, biri AP, diğeri istemci olarak yapılandırıldığı için ESP8266'nın kodu temelde farklıdır.

Bir sonraki konu, ESP8266 için nRF24l01'e sadece bazı baytlar göndermek yerine, transfer protokollerinin gözlemlenmesi gerektiğidir.

Yaygın olarak kullanılan iki protokol vardır: TCP ve UDP.

TCP (İletim Kontrol Protokolü), bir sunucu ve bir istemci arasında kayıpsız bir iletime izin veren bir protokoldür. Protokol, kayıp paketlerin tanımlanması ve yeniden iletilmesi için “el sıkışmaları” (her iki taraf arasında gönderilen çok sayıda bayrak ve onay) ve paket numaralandırma ve algılamayı içerir. Ek olarak, tüm bu el sıkışmalarını kullanarak protokol, ağda aynı anda gönderilen birçok paket nedeniyle veri kaybını önler. Veri paketleri alınıncaya kadar bekler.

UDP (Kullanıcı Datagram Protokolü), tüm anlaşmalardan, paket numaralandırmadan ve yeniden iletimden yoksundur. Bu nedenle ek yükü daha küçüktür ve bir bağlantıyı sürdürmek için tüm el sıkışmalarına gerek yoktur. UDP, bazı temel hata algılamalarını içerir, ancak düzeltme yoktur (bozuk paket yeni bırakılır). Veriler, alıcı tarafın verileri almakta serbest olup olmadığı bilgisi olmadan gönderilir. Aynı zamanda, her bir taraf gerektiğinde verileri gönderdiği için birden fazla paket çarpışabilir. Tüm el sıkışmalarını atlayarak, UDP'nin "çok noktaya yayın" ve "yayın" olarak adlandırılan bir güzel özelliği daha vardır. "Çoklu yayın" durumunda veri paketleri önceden tanımlanmış bir üye grubuna gönderilir, "yayın" durumunda veri paketleri bağlı tüm üyelere gönderilir. Bu, akışların birden fazla üye tarafından alınması durumunda (örneğin birden fazla alıcıya bir video beslemesi göndererek veya geçerli saati birden çok bağlı cihaza göndererek) veri aktarımını önemli ölçüde azaltır.

Youtube'da bunu daha iyi anlatan güzel videolar var.

Bu nedenle veri gönderirken ihtiyaçlarınızı bilmek önemlidir:

  • bozulmamış veri, çoklu eşlerin el sıkışmalarla yönetimi → TCP
  • gerçek zamanlı veri, hızlı bağlantı → UDP

İlk önce TCP tabanlı bir iletişimin uygulanmasıyla başladım (bir Sunucu ile bir İstemci arasında). Test ederken, iletimde durma sorunları yaşadım. Başlangıçta veriler hızlı bir şekilde değiş tokuş edildi, ardından bir süre sonra hız önemli ölçüde düştü. Bunun TCP yaklaşımının tipik bir sorunu olduğu sonucuna vardım (ki bu yanlıştı!), ve sonra UDP'ye dayalı bir çözüme geçtim. Sonunda ikisini de çalışmaya yaklaştırdım. Böylece her iki çözüm de sağlanacaktır.

Aşağıdaki eskizlerin TCP ve UDP için ortak özellikleri vardır:

  • mevcut herhangi bir WiFi ağından bağımsızdır. Böylece internetten ve bağlı yönlendiricilerden uzakta herhangi bir yerde çalışacaktır.
  • Seri monitör aracılığıyla yazdırılacak ASCII verilerini gönderiyorlar.
  • iletim hızını analiz etmek için millis() işlevi tarafından elde edilen verileri gönderiyorlar.
  • birden fazla istemci için test edilmemiştir (şu anda ağı kuracak donanıma sahip olduğu için)

2. Adım: Donanım

Donanım
Donanım
Donanım
Donanım
Donanım
Donanım
Donanım
Donanım

Tüm kurulumu test etmek için iki ESP8266 modülü kullandım. Modüllerden biri bir ESP-01 + USB'den UART'a adaptördür. Diğer modül, USB bağlantısı, Voltaj regülatörü ve anahtarlar, LDR ve çok renkli LED gibi bazı eğlenceli şeyleri içeren ESP-12 tabanlı bir modüldür.

ESP-01 için USB'den UART'a Modülün, onu bir programcı olarak kullanabilmek için biraz değiştirilmesi gerekiyordu (yine Youtube, Csongor Varga tarafından).

Sketchleri çalıştırmak için ESP8266 kitaplıklarını (internette birçok yerde anlatıldığı gibi) kurmanız gerekmektedir. Her iki durumda da (TCP ve UDP) birer sunucu ve istemci çizimi vardır. Hangi krokinin hangi modüle yüklendiği önemli değil.

Teşekkür

Belirtildiği gibi, eskizler web'de bulduğum birçok parçaya ve parçaya dayanıyor. Artık neyi nerede bulduğumu ve orijinal kodun ne olduğunu veya neyi değiştirdiğimi hatırlamıyorum. Bu yüzden, tüm harika örnekleri yayınladıkları için genel olarak büyük topluluğa teşekkür etmek istedim.

3. Adım: Eskizler

Kod, her biri (açıklandığı gibi) iki çizimden, her biri TCP ve UDP için bir sunucu çiziminden ve istemci çiziminden oluşur.

Önerilen: