ESP8266 Mesh Ağ Kök Düğümü


11

ESP8266 tabanlı bir örgü ağ üzerinde çalışıyorum ve hepsi Coopdis tarafından EasyMesh örnek kodunu kullanarak iyi çalışıyor gibi görünüyor . Örneğinde, 3 ESP8266'nın ağa kaydolması ve basit bir web arayüzü sunmaktadır. Bu benim için de mükemmel çalışıyor.

Ancak benim çözümümde, tüm Mesh'in ona erişebilmesi (veya en azından mesh'e erişilebilmesi için) için bu düğümlerden birine internete bağlanmam gerekiyor. Bu, Espressif'in ESP8266 Mesh Kullanıcı Kılavuzu Belgelerinde (sayfa 4) de belirtilmiştir . Ayrıca, normal olarak ama kolayca anlayabildiğim herhangi bir örnek kod olmadan bu konuda konuşurken yayınladıkları birkaç belge buldum.

Mesh'i bir yönlendiriciye bağlanacak şekilde nasıl yapılandırırım. Wi-Fi yönlendiricimde kullandığım ağ ağı için aynı SSID ve Pass anahtarını kullanmak kadar basit mi yoksa Wi-Fi ağının Raspberry Pi parçası gibi bir şey yapmam gerekiyor mu? Ethernet bağlantısı üzerinden yönlendiricime? Yine de yaptığım araştırmadan ikincisinin gerekli olması gerektiğini düşünmüyorum.

Bunun için merhaba dünya örnek koduna ihtiyacım var. Bence AT komutları bana yardım etmeyecek.


1
3 düğüm örneği ile ilgili olarak, bu videodaki telefonda olduğu gibi bir web arayüzü de çalıştırıyor musunuz?
Bence Kaulics

1
@BenceKaulics Bunu daha önce yaptığımdan beri özel olarak test etmedim ve bu benim için bir sorun değil. Neden soruyorsun? Bu bir "Sunucu" sadece mesh barındırılan REST çağrıları ile Mesh ağına erişebilir bir geri dönüş seçeneği olabileceğini düşünüyordum, ama doğru mimari (IMHO) gibi geliyor KÖK NODE seçeneği ile ilgimi çekti.
Gineer

1
Anlıyorum. Ağınıza erişmenin alternatif bir seçenek olabileceğini düşünüyordum. Bir çözüm olarak önermek değil, bu yüzden sadece ne olduğunu bir yorum. Bunu zaten düşündüğünü bilmiyordum. ;)
Bence Kaulics

Yanıtlar:


6

Kolay örgü için başka bir seçenek, BlackEdder tarafından painlessMesh kullanmak ve orada verileri dış dünyaya yönlendirmek için bir köprü sunmaktır.

AğrısızMesh gitlab'da bir ağdan diğer ağa bağlanma konusunda dört farklı çözümü açıklayan bir sorun var. Çözümler easyMesh'de de işe yarayabilir, çünkü sorun başlangıçta orada ortaya çıktı, ancak kesinlikle ağrısızMesh'de.

Onlara baktım ve en çalışan çözümlerin, dış ağla gerçek bağlantıyı idare etmek için ağa her iki ekstra cihaza ihtiyacı vardı.

Birincisi, projeniz için dördüncü esp8266'yı tanıtacaktır. İnternete bağlanır ve seri bağlantı yoluyla düğümlerinizden birine iletişim kurar.

Başka bir veri toplamak ve başka bir wifi kartı ile diğer ağa bağlanmak için bir Ahududu PI cihazı kullanmak olacaktır.

Diğer ikisi iyi değildi, biri yazar tarafından cesaretini kırdı ve diğeri esp8266 ile o kadar karmaşık ve sınırlıydı ki denemem.

Gitlab içindeki tüm rehber .


5

Şu anda düğüm rollerini uygulamak gibi görünmüyor gibi, EasyMesh'in mevcut uygulamasını biraz değiştirirdim. Her düğüm eşittir ve yalnızca birbirleriyle bağlantılar kurabilirler. Gördüğüm gibi, yönlendirme tablolarına bir sunucu eklemenin veya bir sunucuya bağlantısı olan tablolarda belirli bir bağlantı kaydını işaretlemenin bir yolu yoktur.

Düğümler, mesaj yönlendirme / yönlendirme için bir bağlantı listesi kullanır. İhtiyacınız olan şey, sunucu için bir bağlantı kaydına sahip olan bir düğümdür, kök düğüm budur.

Şimdi, bir düğüme güç verildiğinde kullanılabilir AP'leri (Erişim Noktaları) tarayacak, mesh önekiyle başlamayanları filtreleyecek ve daha sonra en iyi RSSI ile AP'ye bağlanacaktır. Ayrıca her düğüm, ad mesh öneki + düğümü benzersiz çip kimliği ile kendi AP'sini oluşturur .

Başka bir düğüm yoksa, başkalarının bağlanmasını bekler. Ve bu, değişikliklerin uygulanması gereken ilk noktadır. Mesh öneki + "Sunucu" gibi bir adla benzersiz bir AP'yi sabit kodlayabilir veya yapılandırılabilir hale getirebilirsiniz ve başka bir EasyMesh AP yoksa düğüm bu AP'ye bağlanmalı ve önceden tanımlanmış bir meshConnectionTypenesneyi bağlantı listesinde saklamalıdır .

Bu nesnenin dosyalaması, sunucu ile düğüm arasındaki ileti alışverişi ile belirlenmez, ancak espconnalan dışında sabit değerler olabilir . Bu, diğer durumlarda olduğu gibi edinilmelidir. Aşağıdaki yapıda yalnızca ilk üye değişkenine ihtiyacınız olacaktır.

struct meshConnectionType {
    espconn             *esp_conn;
    uint32_t            chipId = 0;
    String              subConnections;
    timeSync            time;
    uint32_t            lastRecieved = 0;
    bool                newConnection = true;

    (...)
};

chipIdÖrgü ağdaki sunucunun adresi olacak. ESP8266 çip kimliği olamayacak bir değer seçmelisiniz.

Yani temelde ağınıza güç veren ilk düğüm "kök" düğüm olacaktır. Diğer düğümler sunucuya mesaj göndermek istiyorsa, doğrudan bağlantı (kodda alt bağlantılar olarak adlandırılır) kayıtlarına göre mesaj "kök" düğümüne gönderilir.

"Kök" düğümü daha sonra sunucuya (yönlendiriciye / internete) doğrudan bağlantısı olduğunu ve sunucuya bu mesajı başka bir şekilde iletmesi gerektiği mesajı olarak (örgü benzeri bir yol değil) öğrenir. . Burada sunucunun IP adresi ve kullanılan port gibi ek bilgilere ihtiyaç duyulduğu açıktır. Bunlar ayrıca bir düğümü (her düğümde) varsayılan olarak veya bazı yapılandırma yöntemleriyle depolanmalıdır.

Son olarak, "root" düğümü sunucuya bir IP mesajı gönderecektir, bu sizin tarafınızdan tekrar uygulanmalıdır.


TL; DR; Sonuç:

  • Bir sunucu AP'si olmalı ve ilk düğüm (yalnızca açılacak ilk düğüm) ona bağlanmalıdır, bu kök düğüm olacaktır.
  • Sunucunun destId, sunucuya mesaj gönderirken mesh ağında kullanılacak bir adresi ( ) olmalıdır . Bu bilgi varsayılan olarak tüm düğümler tarafından kullanılabilir olmalıdır.
  • Kök düğüm, sunucuya / internete "doğrudan" bağlı olduğunu bilmelidir. Bu, sunucunun destIdkök düğümü bağlantı listesine bir bağlantı kaydı eklenerek gerçekleştirilebilir .
  • Sunucuya bağlı olduğunu bilen kök düğüm, mesajları İnternet üzerinden uygun şekilde iletebilir.

Bu, EasyMesh'in uygulanmasını okuyarak bulduğum teorik bir fikir. Bunu gerçekleştirmeyi zorlaştıracak veya imkansız kılacak bazı önemli gerçekleri kaçırmış olabilirim. Ayrıca sorunu çözmenin en etkili yolu olmayabilir. Mesh ağı uzmanı değilim.

Ağda bir kök düğümü olması, "Kök bağlantısı kesilirse ne olur? Yeni bir kök nasıl seçilir?" Diye sorar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.