İçindekiler:
- 1. Adım: Bir Yapı Ortamı Oluşturma
- 2. Adım: Kaynak Kodu Alın, Yapılandırın ve Oluşturun
- 3. Adım: Donanım Bileşenlerini Bağlayın
- 4. Adım: Flaş ve Çalıştır
- Adım 5: Etkileşim
- 6. Adım: Uygulama Ayrıntıları
Video: ESP8266 ile WiFi LED Şerit + Sıcaklık Sensörü: 6 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
Bu öğretici, bir ESP8266 kurma ve hem bir sıcaklık sensörü hem de LED şerit ile konuşmasını sağlarken, aynı zamanda WiFi üzerinden MQTT ile giriş ve çıkış gönderebilme adımlarını açıklar. Proje, Güz 2016- CPE 439: Gerçek Zamanlı Gömülü Sistemler'de Cal Poly San Luis Obispo'da alınan bir ders için yapılmıştır. Genel amaç, ucuz donanımla internete bağlı bir "şey" yaratmanın kolaylığını göstermekti.
Gerekli Malzemeler/Ekipman:
- NodeMCU ESP8266 geliştirme kartı
- WS2812B LED şerit
- MAX31820 Sıcaklık sensörü
- ekmek tahtası
- 4.7K ohm direnç
- 220 ohm direnç
- atlama telleri
- mikro usb kablosu
- Linux çalıştıran PC (veya VM) (örn. Ubuntu)
Varsayımlar/Ön Koşullar:
- Debian tabanlı bir dağıtımda komut satırı araçlarını kullanma ve paketleri yükleme deneyimi
- Makefile sözdiziminin temel anlayışı
- bağlantı telleri
1. Adım: Bir Yapı Ortamı Oluşturma
Projeyi oluşturmak için makinenizde kurulu esp-open-sdk'ye ihtiyacınız olacak. Bağlantıyı takip edin ve yapım talimatlarını okuyun. Kısacası, bağımlılıkları yüklemek için bazı Sudo apt-get komutları, esp-open-sdk'yi klonlamak/indirmek için bir git clone --recursive ve son olarak esp-open-sdk oluşturmak için bir make komutu yapacaksınız.
Beni izle
2. Adım: Kaynak Kodu Alın, Yapılandırın ve Oluşturun
Artık esp-open-sdk oluşturulduğuna göre, proje deposunu klonlayın.
git klon
Proje dizinine geçin, bir.local klasörü oluşturun ve örnek ayarları kopyalayın.
cd esp-rtos testleri
mkdir -p.local cp settings.example.mk.local/settings.mk
Şimdi.local/settings.mk dosyasını herhangi bir metin düzenleyiciyle açın ve aşağıdaki ayarları değiştirin:
- OPENSDK_ROOT: 1. adımda oluşturduğunuz esp-open-sdk'nin konumu için mutlak yol
- WIFI_SSID: WiFi ağınızın SSID'si
- WIFI_PASS: WiFi ağınızın şifresi
- PIXEL_COUNT: WS2812B LED şeridinizdeki piksel sayısı
Not: Bu proje LED'leri sürmek için SPI kullandığından ve bunları sağlamak için NodeMCU 3.3v'yi kullandığından, muhtemelen ~60'tan fazla LED'i kullanamayacaksınız.
Not: Diğer ayarların değiştirilmesine gerek yoktur, ancak istenirse değiştirilebilir. Görev önceliklerinin sırasını korumanız önerilir. Öncelik numarası ne kadar düşükse, görevin önceliği de o kadar düşük olur.
Şimdi projeyi oluşturun:
-C örnekleri/cpe439 yapın
Her şey doğru ayarlanmışsa, derlemeye başlamalıdır. Sonunda görmelisiniz:
'firmware/cpe439.bin' başarıyla oluşturuldu
Beni izle
3. Adım: Donanım Bileşenlerini Bağlayın
Artık kod derlendiğine göre, çevre birimlerimizi bağlamanın zamanı geldi.
İlk olarak, NodeMCU'yu devre tahtasına yapıştırın, ardından şemada gösterildiği gibi bağlantıları yapmak için jumper kabloları kullanın.
Dikkat edilmesi gereken birkaç şey:
- Önemli: WS2812B veri hattı çift yönlü değildir. Şeritin LED tarafındaki işaretlere yakından bakarsanız, bir yönü gösteren küçük oklar görmelisiniz. NodeMCU'nun D7 çıktısının, yakından bakarsanız şemada görebileceğiniz yön işaretçisiyle aynı şekilde WS2812B'ye gitmesi gerekir.
- WS2812B'nizin ne tür konektörlerle birlikte geldiğine bağlı olarak, bunların devre tahtasına güvenli bir şekilde bağlanmasını sağlamak için bazı değişiklikler yapmanız gerekebilir. Ayrıca, bunları breadboard uyumlu atlama kablolarına bağlamak için timsah klipslerini de kullanabilirsiniz.
- MAX31820 pinleri daha küçük bir adıma sahiptir ve standart 0,1"/2,54mm jumperlardan daha incedir, bu da onları bağlamayı zorlaştırır. Bunu aşmanın bir yolu dişi-erkek jumper kabloları kullanmak, plastik kasayı dişi taraftan çıkarmak, daha sonra dişi jumper uçlarını daha küçük MAX31820 pimlerinin etrafına sıkıca kıvırmak için pense kullanın.
Bileşenlere zarar vermemek için NodeMCU'yu açmadan önce bağlantıları iki kez kontrol edin.
4. Adım: Flaş ve Çalıştır
yanıp sönen
Tüm donanımlar bağlıyken, NodeMCU'nuzu takın ve aşağıdaki komutla flash yapın:
flash yapmak -C örnekleri/cpe439 ESPPORT=/dev/ttyUSB0
/dev/ttyUSB0, NodeMCU'nun altında görünmesi gereken seri com'dur. Bağlı başka seri cihazlarınız varsa, /dev/ttyUSB1 veya başka bir numara olarak görünebilir. Kontrol etmek için, bu komutu bir kez NodeMCU takılı değilken ve bir kez takılıyken olmak üzere iki kez çalıştırabilir ve farkı karşılaştırabilirsiniz:
ls /dev/ttyUSB*
Karşılaşabileceğiniz bir diğer sorun da cihaza erişim izninizin olmamasıdır. Bunu düzeltmenin iki yolu:
-
Kullanıcınızı arama grubuna ekleyin:
sudo adduser $(whoami) araması
- cihazı chmod veya chown:
sudo chmod 666 /dev/ttyUSB0 sudo chown $(whoami):$(whoami) /dev/ttyUSB0İlk yöntem kalıcı bir çözüm olduğu için tercih edilir.
Koşma
Flash komutunu başarıyla çalıştırdıktan sonra, cihaz hemen açılır ve derlenmiş kodu çalıştırmaya başlar. Yanıp söndükten sonra herhangi bir noktada seri çıkışı izlemek için aşağıdaki komutu çalıştırabilirsiniz:
python3 -m serial.tools.miniterm --eol CRLF --exit-char 003 /dev/ttyUSB0 500000 --raw -q
Zaman kazanmak için bunu ~/.bashrc dosyanıza ekleyebilirsiniz:
takma ad nodemcu='python3 -m serial.tools.miniterm --eol CRLF --exit-char 003 /dev/ttyUSB0 500000 --raw -q'
..bu komut için takma ad olarak "nodemcu" yazmanıza izin verir.
Her şey doğru bir şekilde yapılandırılmışsa, LED şeridiniz yeşil renkte yanmalı ve seri olarak WiFi bağlantısını görmeli, bir IP adresi almalı, MQTT'ye bağlanmalı ve sıcaklık verilerinin dışarı itildiğini bildirmelidir.
MyWiFiSSID ile bağlantılı, kanal 1dhcp istemci başlangıcı…wifi_task: status = 1wifi_task: status = 1ip:192.168.2.23, mask:255.255.255.0, gw:192.168.2.1ws2812_spi_init okRequest temp OKwifi_task: status = 5xQueueRecetFie_tk başladı okwifi_task: status = 5xQueueRecetFied43tk: 192.168.2.23, mask:255.255.255.0.: (Yeniden)MQTT sunucusuna bağlanılıyor test.mosquitto.org …xQueueReceive +25.50xQueueGönder tamam tamamlandı MQTT bağlantısı gönder… MQTTv311donexQueueReceive +25.56 xQueueGönder tamam
Adım 5: Etkileşim
Cihazınızın WiFi'ye ve MQTT aracısına başarılı bir şekilde bağlandığını varsayarsak, MQTT ile NodeMCU'dan veri gönderip alabilirsiniz. Henüz yapmadıysanız, mosquitto istemcileri paketini kurun:
sudo apt-get install sivrisinek istemcileri
Artık kabuğunuzdan mosquitto_pub ve mosquitto_sub programlarını kullanabilmelisiniz.
Sıcaklık güncellemelerini alma
Sıcaklık verilerini almak için NodeMCU'nun yayınladığı konuya abone olmak için mosquitto_sub komutunu kullanmak isteyeceğiz.
mosquitto_sub -h test.mosquitto.org -t /cpe439/temp
Terminale gelen sıcaklık verilerini (Santigrat cinsinden) görmelisiniz.
+25.87+25.93+25.68…
LED şerit rengini uzaktan ayarlama
RGB değerlerini MQTT üzerinden NodeMCU'ya göndermek için basit bir mesaj formatı kullanılır. Komut biçimi şöyle görünür:
r:RRRg:GGGb:BBB~
Burada RRR, GGG, BBB, göndermek istediğiniz rengin RGB değerlerine (0-255) karşılık gelir. Komutumuzu göndermek için mosquitto_pub komutunu kullanacağız. İşte bazı örnekler:
mosquitto_pub -h test.mosquitto.org -t /cpe439/rgb -m 'r:255g:0b:0~' # redmosquitto_pub -h test.mosquitto.org -t /cpe439/rgb -m 'r:0g:255b: 0~' # greenmosquitto_pub -h test.mosquitto.org -t /cpe439/rgb -m 'r:0g:0b:255~' # mavi
Yaratıcı olmak istiyorsanız, bunun gibi çevrimiçi bir renk seçici bulun ve komutu, seçtiğiniz RGB değeriyle düzenleyin.
Dikkat et
Bu projedeki konular, genel bir MQTT aracısında /cpe439/rgb ve /cpe439/temp olarak ayarlanmıştır; bu, başka birinin sizinle aynı konuları yayınlamasını veya bunlara abone olmasını engelleyen hiçbir şey olmadığı anlamına gelir. Bir şeyleri denemek için bir genel aracı kullanmak iyidir, ancak daha ciddi projeler için parola korumalı bir aracıya bağlanmak veya sunucuda kendi aracınızı çalıştırmak isteyeceksiniz.
6. Adım: Uygulama Ayrıntıları
tek telli
ESP8266'nın yalnızca 1 çekirdeği vardır, o kadar uzun ki, sıcaklık sensörünün sıcaklık ölçümü yapması için 750 ms beklemek gibi görevlerin engellenmesi normalde WiFi'nin iyi çalışmamasına ve hatta çökmesine neden olabilir. FreeRTOS paradigmasında, bu uzun beklemeleri işlemek için vTaskDelay()'i çağırırsınız, ancak okuma ve yazma işlemleri arasında FreeRTOS sistem kenesinden daha kısa olan ve dolayısıyla vTaskDelay() ile önlenemeyen çok sayıda daha kısa bekleme süresi de vardır. Bunları da aşmak için, bu projedeki tek kablolu sürücü, ESP8266'nın donanım zamanlayıcısı tarafından çalıştırılan ve her 10 mikro saniyede bir kadar düşük olayları tetikleyebilen bir durum makinesinden çalışacak şekilde yazılmıştır. tek kablolu okuma/yazma işlemleri arasında gerekli süre. Diğer uygulamaların çoğu, bunu halletmek için delay_us() veya benzeri bir engelleme çağrısı kullanır, ancak sürekli olarak sıcaklık güncellemeleri alıyorsanız, tüm bu gecikmeler toplanmaya başlar ve daha az yanıt veren bir uygulama ile sonuçlanır. Kodun bu bölümünün kaynağı extras/onewire klasöründe bulunur.
WS2812B
ESP8266, 800KHz'de LED şeritleri sürmek için yeterince hızlı PWM için herhangi bir standart donanım seçeneğine sahip değildir. Bunu aşmak için, bu proje LED'leri sürmek için SPI MOSI pinini kullanır. SPI'nin saat hızını ayarlayarak ve SPI yükünü değiştirerek, her bir LED'in oldukça güvenilir kontrolünü sağlayabilirsiniz. Bu yöntemin hatasız değildir - biri için LED'lere 5V'luk bir kaynakla güç verilmeli ve SPI pininin çıkışına bir seviye kaydırıcı eklenmelidir. Ancak 3.3V çalışıyor. İkincisi, SPI yöntemini kullanırken kusurlu zamanlama nedeniyle oluşan aksaklıklar var. Üçüncüsü, artık SPI'yi başka hiçbir şey için kullanamazsınız. Bu yöntemle ilgili ek arka plan burada bulunabilir ve kodun bu bölümünün kaynağı extras/ws2812 klasöründe bulunur.
LED şeritleri sürmek için daha güvenilir bir yöntem i2s kullanmaktır. Ancak bu yöntemin çipe özgü birçok hack'i vardır, bu nedenle SPI bir öğrenme alıştırması olarak daha iyi bir seçim gibi görünüyordu.
Önerilen:
Arduino İle Servo ve DHT11 Sıcaklık ve Nem Sensörü Kullanan Otomatik Soğutma Fanı: 8 Adım
Arduino İle Servo ve DHT11 Sıcaklık ve Nem Sensörü Kullanan Otomatik Soğutma Fanı: Bu derste nasıl başlatılacağını öğreneceğiz & sıcaklık belirli bir seviyenin üzerine çıktığında fanı döndürün
Arduino ile DHT21 Dijital Sıcaklık ve Nem Sensörü: 6 Adım
Arduino ile DHT21 Dijital Sıcaklık ve Nem Sensörü: Bu dersimizde Arduino ile DHT21 Nem ve Sıcaklık Sensörünü nasıl kullanacağımızı öğreneceğiz ve değerleri OLED Ekranda göstereceğiz.Videoyu izle
Arduino Uno ile LM35 Sıcaklık Sensörü Kullanarak Sıcaklık Okuma: 4 Adım
Arduino Uno ile LM35 Sıcaklık Sensörü Kullanarak Sıcaklık Okuma: Merhaba arkadaşlar bu derste LM35'i Arduino ile nasıl kullanacağımızı öğreneceğiz. Lm35, -55 °C ile 150 °C arasındaki sıcaklık değerlerini okuyabilen bir sıcaklık sensörüdür. Sıcaklıkla orantılı analog voltaj sağlayan 3 terminalli bir cihazdır. Yüksek
ESP8266 ile IoT Sıcaklık Sensörü: 6 Adım (Resimlerle)
ESP8266 ile IoT Sıcaklık Sensörü: Wifi üzerinden izleyebileceğim bir sıcaklık sensörü oluşturmak için ilham aldım. Bu proje yeni değil, ancak güvenlik için ara katmana sahip olma ve yönlendiricinizde IoT cihazınıza bağlantı noktası açmak zorunda kalmama fikrini beğendim
SENSÖR SUHU DENGAN LCD DAN LED (LCD ve LED ile Sıcaklık Sensörü Yapımı): 6 Adım (Resimli)
SENSÖR SUHU DENGAN LCD DAN LED (LCD ve LED ile Sıcaklık Sensörü Yapımı): hai, saya Devi Rivaldi mahasiswa UNIVERSITAS NUSA PUTRA dari Endonezya, di sini saya akan berbagi cara membuat sensörü suhu menggunakan Arduino dengan Çıkışı LCD ve LED. Ini adalah pembaca suhu dengan desain saya sentiri, dengan sensörü ini anda