İçindekiler:

RPi-Zero IoT Olay Göstergesi / Renkli Lamba: 6 Adım (Resimlerle)
RPi-Zero IoT Olay Göstergesi / Renkli Lamba: 6 Adım (Resimlerle)

Video: RPi-Zero IoT Olay Göstergesi / Renkli Lamba: 6 Adım (Resimlerle)

Video: RPi-Zero IoT Olay Göstergesi / Renkli Lamba: 6 Adım (Resimlerle)
Video: Sınıflara göre arabalar #shorts 2024, Temmuz
Anonim
RPi-Zero IoT Olay Göstergesi / Renkli Lamba
RPi-Zero IoT Olay Göstergesi / Renkli Lamba
RPi-Zero IoT Olay Göstergesi / Renkli Lamba
RPi-Zero IoT Olay Göstergesi / Renkli Lamba
RPi-Zero IoT Olay Göstergesi / Renkli Lamba
RPi-Zero IoT Olay Göstergesi / Renkli Lamba

Ek mikro denetleyici ve HAT eklenti modülü gerekmez. RPi-Zero hepsini yapar. Daha da iyisi, bir RPi-Zero W kullanın!

Örnek kullanım: Web Hizmeti durum Göstergesi (ör. DowJonesIndex izleme), Politik veya Spor olayı durum göstergesi, ruh hali ışığı, bir sensörü takip edin, adını siz koyun. 6. adımdaki videoyu izleyin.

Raspberry-Pi, yalnızca bir donanım destekli PWM hattına sahiptir. Bu proje 3 PWM satırına ihtiyaç duyuyor, bu yüzden zaten kurulu olması gereken yazılımla çalışan bir PWM 'c' kitaplığı (https://wiringpi.com/reference/software-pwm-library/) kullandım.

İşlemi 2 işleme ayırdım. Bir, kesme güdümlü, gerektiğinde kontrol hatlarını LED'e çevirerek, yürüyen emirlerini 'stdin' akışından alıyor. Diğeri, soket IO'yu kullanan olay güdümlü bir nodeJS sunucusudur. Bu, yanıt vermeyi sağlarken ışık titremesi gibi şeyleri önlemek içindir. Kombinasyon tipik olarak CPU'nun %5'inden daha azını kullanır. Sürekli renk güncellemeleri sırasında (kaydırıcılar ve/veya birçok istemci aracılığıyla) %50'den fazlasını kolayca kullanabilir (özellikle de tarayıcıyı Pi-Zero GUI'de kullanırken). Bir değişiklik geldiğinde, güncelleme bildirimlerinin tüm açık soket istemcilerine gönderildiğini unutmayın.

Adım 1: İhtiyacınız Olan Şeyler

Neye ihtiyacınız olacak
Neye ihtiyacınız olacak
Neye ihtiyacınız olacak
Neye ihtiyacınız olacak
  • Pi-Zero mikro SD kart, 8 GB önerilir. Raspbian-Linux veya NOOBS ile
  • RGB Led (Bunu kullandım:
  • 3 direnç (istenen akıma ve/veya istenen parlaklığa dayalı değer, 1/8 watt)
  • bir WiFi, USB dongle (ör. https://www.ebay.com/itm/252018085448) veya daha iyisi bir Raspberry Pi Z-W (dahili WiFi ile) kullanın
  • bir vaka (ör. küçük olan: https://www.ebay.com/itm/131583579374 daha fazla alanla birlikte:
  • bir difüzör (resimdeki örneklere bakın)
  • Gerektiğinde kablolar ve adaptörler.

Bileşenleri nasıl bağlamak istediğinize bağlı olarak isteğe bağlı olarak

  • başlık (https://www.ebay.com/itm/14186077616)
  • atlama telleri (https://www.ebay.com/itm/262235387520)
  • dik açılı mikro USB adaptörü (Mavi USB 2.0 OTG R)
  • mini USB hub, yalnızca kurulum aşamasında kullanılır

Adım 2: Pi-Zero Kurulumu ve Geliştirmeye Hazırlık

Geliştirmeye hazır hale getirmek için PiZero'nuz için bu ilk kurulumu izleyin…https://www.raspberrypi.org/help/noobs-setup/

NOOBS kurulumuna sahip bir microSD kartınız olduğunda:

MicroSD kartı takın. Wifi dongle, klavye ve fare ile düşük güçlü bir USB Hub'ı takın (Her iki şekilde de kablosuz fare ve/veya klavye kullanabilirsiniz, ancak hub'a harici güç gerektirmiyor). Adaptörleri ve zaten sahip olduğum bir hub'ı kullandım.

Şimdi bir Monitör ve bir microUSB güç adaptörü takın ve açılacaktır. Yukarıdaki noobs-kurulum bağlantısında görüldüğü gibi Raspbian, Debian Linux kurulumuna ilişkin yönergelere devam edin ve tamamlayın.

Ek olarak, çok düşük bir çözünürlüğüm vardı. Bu satırları /boot/config.txt dosyasına ekledim.

disable_overscan=1

hdmi_group=2 hdmi_mode=58

hdmi_mode=58 benim monitörüm için çalışıyor, sizinkinin başka bir şeye ihtiyacı olabilir.

bakınız: make-ahududu-pi-kullanım-tam çözünürlüklü-monitör ve

raspberrypi.org/documentation/configuration/config-txt.md

Başlattıktan sonra Pi-Zero, GUI arayüzüne girer.

MicroSD kartımın tam boyutunu kullanmak için raspi-config #1 'Dosya Sistemini Genişlet' seçimini kullandım. Komut satırından, bir terminal penceresine 'sudo raspi-config' yazın. -config.md

Ayrıca bu ayarları #5 'Uluslararasılaştırma Seçenekleri' altında değiştirdim.

  • Yerel ayar: en_US. UTF-8 UTF-8
  • Saat Dilimi: Amerika … Los_Angeles
  • Klavye Düzeni: Genel 105 tuşlu (Uluslararası) PC … İngilizce (ABD)

Benim için Büyük Britanya klavye standardı (Raspbian önceden ayarlanmış olarak gelir) düzenlemelerimin çoğunu gerçek bir angarya haline getiriyordu.

Bu ayarları gerektiği gibi, size uygun şekilde değiştirin. 'Raspi-config' içinde gezinmek için ok tuşlarını ve sekme tuşunu kullanmanız gerektiğini unutmayın; ve bir seçimden sonra yanıt vermek çok yavaş olabilir.

Bir WiFi-USB dongle ile internete bağlanmanın sorun olmadığını gördüm (2 farklı dongle kullandım). GUI'nin sağ üst köşesindeki bir açılır pencereyi kullanarak WiFi erişim anahtar şifremi girmem gerekiyordu. Bunu yaptığımda, herhangi bir yeniden başlatma/güç açma işleminden sonra otomatik olarak bağlanacaktı.

Artık genel gelişim için hazırdım.

Bu noktaya gelmek için birçok yol izleyebilirsiniz. Bu noktaya kadar burada çok fazla ayrıntı vermedim ama web üzerinde daha detaylı olarak açıklanan birçok yöntem ve konfigürasyon var. Bu talimatta verilecek geliştirme adımlarını yapmak için kişisel bilgisayarınızda uzak bir ssh terminal penceresi kullanacağınız başsız bir kurulum için bir tane dahil.

3. Adım: Geliştirme Ortamı ve Araçları

Geliştirme Ortamı ve Araçları
Geliştirme Ortamı ve Araçları
Geliştirme Ortamı ve Araçları
Geliştirme Ortamı ve Araçları

Proje için geliştirdiğim sistem konfigürasyon kurulumu ve yazılımı için Raspberry Pi-2 üzerinde Ar-Ge yaptım; çünkü dört çekirdekli bir CPU'ya sahip olduğundan, tarama ve kod geliştirmeyi birden çok pencereyle çok daha hızlı hale getiriyor. Bu projeyi gerçekleştirmek için elbette herhangi bir Raspberry-Pi modelini kullanabilirsiniz.

Node.js'yi (olay odaklı G/Ç sunucu tarafı JavaScript desteği) kurmak için aşağıdakileri yaptım…

sudo apt-get güncellemesi

sudo apt-get kurulum düğümü npm

Bu nodeJS paketlerini ekleme (npm, Nodejs Paket Yöneticisidir)

npm ekspres yükleme

npm socket.io'yu kurun

Referanslar:https://nodejs.org/en/

www.npmjs.com/package/express Hızlı, minimalist web çerçevesi

www.npmjs.com/package/socket.io Socket. IO, gerçek zamanlı çift yönlü olay tabanlı iletişime olanak tanır

Adım 4: Donanım

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

Voltaj düşüşü ve verimlilik, üç LED renk segmentinin tümü için farklı olduğundan, kullanılan direnç değerlerinin tümü farklıdır. GPIO Yüksek çıkış seviyelerinin tümü yaklaşık 3,2 volttu. Her bir LED segmenti, PiZero'nun kolayca idare edebileceği maksimum 20ma'dan daha az ve toplamda yaklaşık 40ma (toplamda <50ma maksimum izin verilir) tükettiğinden emin olmak için test edilmiştir. LED'i doğrudan sürerek, olabildiğince fazla çıktı parlaklığı elde ettim; bu benim ihtiyaçlarım için fazlasıyla yeterli. Daha yüksek akımları sürmek için, çok daha parlak bir çıkış için, anodu 5v hattına bağlı olan ortak bir anot LED'i ile ara tahrik transistörleri kullanılabilir. Not: Çeşitli Beyaz seviyelerim biraz mavimsi çıktığından, 24 Ohm yerine 27 benim için daha iyi bir seçim olurdu.

Erkek pinli bir başlık kullandım ve LED bacaklara F-F jumper ile bağladım. Bu, toplam yüksekliği aşağı tuttu. Dirençleri jumperların ortasına lehimledim. WiFi dongle için bir dik açılı mikro-USB - USB adaptörünün kullanılmasıyla birlikte devre kartı veya lehimsiz kart kullanılmaması, son montajı oldukça kompakt hale getirdi.

Bir difüzör için bir pinpon topu öneririm (5-8-10 mm LED'inizi yerleştirmek için yeterince büyük bir delik açmak kolaydır). Veya bir LED ampulün (Plastik difüzör kullanan) üst kısmını kesin. Bunun için, kesmek istediğiniz yerde ince uçlu bir keskin uçlu bir çizgi işaretleyin ve ince bir kesme eki olan Dremel benzeri bir alet kullanın. Dilerseniz güzel bir küçük kesilmiş cam kavanoz veya bardak kullanılabilir. Bir difüzöre yerleştikten sonra, kasanın üstüne yapıştırın.

Gösteriler için kasanın içine yerleştirilmiş küçük bir Li güç bankası kullanmayı seviyorum. Bu birim tamamen kablosuz daha etkileyici görünüyor. Tabii ki, bu konfigürasyonda sınırlı bir çalışma süresine sahip olacak. Normal çalışmaya devam etmek için sadece bir mikro-USB duvar adaptörü kullanıyorum.

Adım 5: Proje Yazılımı

Proje Yazılımı
Proje Yazılımı

İki program kullandım, bir Node.js süreci, stdin veri akışı aracılığıyla bir alt süreçle konuşuyor. Bu, her birinin en iyi yaptığı şeyi yapabilmesi ve bağımsız süreçler olarak kendi hızlarında çalışabilmesi için.

İşte yaptığım şey: Ama sonuç dosya ağacını içeren bir tar-gzip dosyası sağladığım için buna gerek yok.

NodeJS sunucu tarafı kurulumu:

cd ~

mkdir node_rgb cd node_rgb mkdir genel

'index.html' ve 'style.css'yi '~/node_rgb/public' dizinine koyun 'rgbDriver.c' ve 'rgb_main.js'yi '~/node_rgb' dizinine koyun

'rgbDriver' c işlemini derleyin/oluşturun:

cd ~/node_rgb

cc -o rgbDriver rgbDriver.c -lwiringPi -lpthread

Denkliği indirme ve genişletme

node_rgb.tgz'yi (aşağıda) Pi-Zero'nuza ana dizininize (~pi) indirmek için aşağıdaki 3 işlemden birini yapabilirsiniz:

  1. Pi-Zero'nuzun GUI'sindeki tarayıcıdan indirinDosyayı ~pi/ konumuna taşıyın
  2. Size bağlı bir terminal penceresinde Pi-Zero:cd ~piwget

    mv FZBF9BDIL6VBHKF.tgz rgb_node.tgz

  3. Masaüstü bilgisayarınızdaki bir tarayıcıdan indirin. Pi-Zero'daki ~pi dizinine kopyalamak için WinSCP'yi kullanın.

Yukarıdaki #1 2 veya 3'ü gerçekleştirdikten sonra…

cd ~

tar -xzvf node_rgb.tgz tree node_rgb … node_rgb ├── genel │ ├── Dow_Jones_Index.html │ ├── index.html │ └── style.css ├── rgbDriver ├── rgbDriver.c ├─.─ rgb_ js ├── start_rgb ├── kill_rgb └── track_dji

Ortaya çıkan yürütülebilir dosya (yukarıdan) ' rgbDriver ' Node.js arabirim işleminden bağımsız olarak kullanılabilir.

Bu sürücünün ve donanımın çalıştığını doğrulamak için, sürücüye bir boşlukla ayrılmış üç değer (0-255 arasında) kümesini besleyin. Gibi 'eko 255 0 0 | kırmızı için./rgbDriver' veya 'echo 0 255 0 | yeşil için./rgbDriver'. “./”nin işletim sistemine geçerli dizinde 'rgbDriver' programımızı bulmasını söylediğini unutmayın. Sürücüyü durdurmak için bir ^c (cntl-c) verdiğinizde, led açık kalabilir veya kalmayabilir. Alternatif olarak, değerlerini etkileşimli olarak besleyebilirsiniz. Komut satırından bu satırları arka arkaya yazmayı deneyin ve LED'i izleyin.

./rgbSürücü

0 255 0 100 0 100 255 255 0 …vb… ^c

Bu işlemlerden 2'sinin paralel olarak çalışmadığından emin olun.

Node.js sunucusu da dahil olmak üzere tam yazılım uygulama paketini başlatmak için şu komutu kullanın:

sudo düğümü rgb_main.js

Ardından, Node.js sunucusunu durdurmak istediğinizde cntl-c'yi kullanın.

sudo düğümü rgb_main.js&

arka planda çalışmasını sağlamak için, ancak daha sonra durdurmak için bir 'sudo kill -9 pid' komutu kullanmanız gerekecek. Bu komut size yabancı geliyorsa, şu komutların çıktısını gözden geçirin: 'man kill' & 'man sudo'.

Masaüstünüzde, tabletinizde veya telefonunuzda yerel ağınıza bağlı bir tarayıcı kullanın. https://raspberrypi:8080/ adresine gidin veya bu işe yaramazsa, aygıtın ip adresini (cmd 'ifconfig'den alınan) 192.168.1.15 artı bağlantı noktası spesifikasyonu:8080 gibi bir şey kullanın veya Pi-Zero'yu kullanıyorsanız GUI: localhost:8080 çalışacaktır.

Açılan sayfada RGB kaydırıcılarını çalıştırın ve RGB-LED lambanın takip etmesini izleyin.

Diğer faydalı komutlar Aynı anda birden fazla 'rgbDriver' çalıştırırsanız, tahmin edilemez davranışlarla karşılaşmanızın muhtemel olduğunu unutmayın. rgb_main.js'nin ikinci bir kopyasını çalıştırmayı denerseniz hata verir.

Bu komut, ilgili tüm işlemleri listeler:

ps aux |grep rgb

Bu komut, 'rgbDriver' alt süreçleriyle birlikte tüm nodeJS işlemlerini öldürür:

sudo ps yardımcı | grep düğümü.*rgb | awk '{print "sudo kill -9 " $2}' | NS

Tek başına çalışma

Pi-Zero'nun açılışta Node.js sunucu uygulamasını başlatmasını sağlamak için… favori düzenleyicinizi (örneğin nano ~/.bash_profile) kullanarak, aşağıdaki satırları yazın ve ~/.bash_profile dosyasına kaydedin

cd node_rgb

sudo düğümü rgb_main.js &

Bir terminal penceresi açarken rahatsız edici hata mesajları almamak için 'start_rgb' dosyasındaki kabuk betiği gibi koşullu kodlama kullanın

Pi-Zero klavye, fare veya monitör olmadan gömülü olarak çalışırken; Grafik Kullanıcı Arayüzü, kullanıcı etkileşimi olmayacağından minimum CPU zamanı alacaktır. Bu durumda Pi-Zero gerekenden daha fazla kaynağa sahip olduğundan otomatik GUI başlatmayı devre dışı bırakmıyorum; ve gelecekte herhangi bir zamanda birkaç kablo bağlayıp kullanabilmeyi seviyorum. Bununla birlikte, gerekli herhangi bir bakımı yapmak için uzak bir SSH terminali (örneğin PuTTY) kullanabileceğiniz için bu gerekli değildir.

Olay monitörü olarak kullanma

Dow Jones Endeksindeki günlük değişimi izlemek için bir web sayfası oluşturdum. Kaynağı, bazı web verilerini kullanan ve Pi-Zero göstergenizi buna göre yönlendiren kendi sayfanız için bir kılavuz olarak kullanılabilir. Bu sayfa (json) verilerini bir Google web hizmetinden alır. Birçok web hizmeti biçimi vardır, bu nedenle, erişmek için JavaScript kodunu belirlemek için kullanmak istediğinizi araştırmanız gerekecektir.

Cihazınızı benim gibi kullanmak istiyorsanız, adanmış, bağımsız, Dow Index değişiklik Göstergesi olarak bu satırları ~/.bash_profile dosyasının sonuna veya istediğiniz SSH'ye ekleyin ve ikinci komut satırını yayınlayın.. Daha sonra uzaktan kumandayı kullanmak istiyorsanız 'kill -9' ortaya çıkan epiphany-tarayıcı sürecini.

uyku 20

epiphany-tarayıcı --display=:0.0 localhost:8080/Dow_Jones_Index.html &

Gösterge, 0 değeri verildiğinde açık gri renkte yanacaktır. Daha yüksek değerlerle daha da yeşil olur. Yaklaşık 250'de en parlak saf Yeşil'dir. Daha yüksek değerler ilk başta sığ bir flaşa neden olur, en derin flaş yaklaşık 500'e kadar. Negatif değer için (Dow'daki günlük düşüşler) benzerdir, ancak Kırmızı renktedir.

GÜNCELLEME Mayıs 2018

Yeni bir web sayfası (SolarStorm_devCon.html,.html dosyasının yüklenmemesi nedeniyle.txt dosyası olarak eklenmiş) oluşturdum ve GeoMagnetic fırtına bilgilerini toplar (ki bu yıkıcı bir CME, EMP'yi önceden haber verebilir) ve bunu bir renk sunmak için kullanır. bir tür Geo-Storm 'DevCon' Endeksini yansıtan ölçek. uzay havasından, muhtemelen güneş patlamalarından veya bir Koronal kütle atımından (CME) kaynaklanan bir Elektromanyetik darbeden (EMP) kaynaklanan bir felaket potansiyelini gösterir. "Dow_Jones_Index.html" kullanır gibi kullanın.

6. Adım: Uzak Web Sayfası Kontrolü

Image
Image

Bu noktada, IOT renkli Lambanızı yerel ağınızdaki herhangi bir yerden kontrol edebilirsiniz. Genel internet üzerinden nasıl görünür hale getirileceği bu talimatın bir parçası değildir. Cihazınız için genel bir IP kurarsanız, yapmanız gerekir. bu IP'yi sayfalarınızın JavaScript'indeki open socket komutunda kullanın (örneğin ~/node_rgb/public/index.html)

Dow Jones Endeksinde günün değişimi için gerçek zamanlı bir renk göstergesi olarak Pi-Zero IOT cihazımı kullanmayı planlıyorum. Bunu yapan ve google.com/finance adresinden json verilerini alan bir sayfa oluşturdum. Ayrıca bu küçük IOT cihazının geniş kullanım alanlarını göstermek için birkaç web sayfası oluşturdum. PiZero'mu halka açık İnternet'e koymak yerine, ben sayfaları, orijinal bir B Raspberry-Pi sürümünde çalışan, halka açık mevcut web sunucumda barındırdı (şu anda @ 71.84.135.81 aka: https://raspi.ddns01.com/ ücretsiz Dinamik Alan Adı Sunucum çalışırken)..

Uzak sayfalarımdaki kodda 192.168.1.41:8080'e soket bağlantılarını açtım Pi-Zero'mun ipini 192.168.1.41'e sabitlemiştim. Benzer şekilde, ahududu-pi-wifi-and-a-static-ip başlığı altındaki kurulum talimatlarını izleyin: Statik IP Adresi. Yani PiZero'nuzu yerel ağınızda 192.168.1.41 olacak şekilde ayarlarsanız, web sitemden açılan bu sayfalar, bağlantı istemci tarafından yapıldığı için cihazınızla iletişim kuracaktır.

İşte Pi-Zero IOT aydınlatma cihazımı test etmek ve çalıştırmak için kullandığım sayfalar. Bu sayfaları açarsanız (https://71.84.135.81/iot/rgbLamp/ aka https://raspi.ddns01.com/iot/rgbLamp/ veya o sayfada çerçevelenmiş sayfalardan herhangi biri) istemci tarafı JavaScript oluşturduğunuz IOT ışığını sürün (“192.168.1.41:8080” url'sinde çalıştığı göz önüne alındığında) İsterseniz bu sayfalardan herhangi birinin kaynağını kopyalayabilir ve beğeninize göre değiştirebilirsiniz.

İlk sayfa ile cihazınızı istediğiniz renge ayarlayabilirsiniz. LED lamba ve web sayfasında gördüğünüz renk oldukça iyi izlenecektir. Kullanılan direnç değerleri (monitör gibi) daha doğru bir şekilde eşleşmeleri için değiştirilebilir. Eşleşmelerini sağlamak için çok az zaman harcadım veya hiç zaman harcamadım. Bu sayfa, başka biri rengi değiştirdiğinde ve sunucu güncellenmiş bilgi mesajını gönderdiğinde rengini güncelleyecektir.

Bir sayfa basit bir düğme kontrollü Trafik Işığıdır.

Bir spor yarışmasını (örneğin futbol, basketbol, beyzbol), bir seçimi izlemek için tasarlanmış, hatta bir bağış toplama veya DEFCON uyarı düzeyi stili göstergesi için uyarlanmış bir sayfa vardır. Puanlar (veya taahhüt edilen seçim oyları) bir web hizmetinden otomatik olarak elde edilebilir veya başka bir web sayfasından kazınabilir. Contest_demo sayfamı yönlendiren otomatik bir feed'im yok. Doğru bilgi birikimine sahip biri, yüksek güçlü LED projektörleri çalıştırmak için bir elektrikli sürücü ekleyebilir ve takım öndeyken bir odayı (veya spor barını) onun rengiyle yıkayabilir. Ne yazık ki bu yılın süper kase partileri için bu talimatta çok geç kaldım, ancak 2016 seçimleri için zamanında.

Ardından, cihazımı bir Dow Jones izleme göstergesine dönüştürmek için kullanacağım sayfaya benzer bir sayfa var. Kaydırıcı ve düğmeler yalnızca gösteri amaçlı DJI demo sayfasındadır. Bu sayfanın kaynağında, yeşil ekrandan esinlenilmiş bir görüntüyü yeniden renklendirmek için geliştirdiğim kod var; Ayrıca yararlı bulabileceğiniz yeterli yorum ile.

Bu 4 sayfadan yalnızca ilki (Pi-Zero tabanlı index.html sayfasıyla birlikte) sunucu güncelleme mesajlarını dinler ve buna göre yenilenir. Geri kalan her şey sadece sunucuya gönderilir.

Önerilen: