Mündəricat:

WiFi LED Şeridi + ESP8266 ilə İstilik Sensoru: 6 addım
WiFi LED Şeridi + ESP8266 ilə İstilik Sensoru: 6 addım

Video: WiFi LED Şeridi + ESP8266 ilə İstilik Sensoru: 6 addım

Video: WiFi LED Şeridi + ESP8266 ilə İstilik Sensoru: 6 addım
Video: Введение в плату разработки NodeMCU ESP8266 WiFi с примером HTTP-клиента 2024, Noyabr
Anonim
WiFi LED Şeridi + ESP8266 ilə İstilik Sensoru
WiFi LED Şeridi + ESP8266 ilə İstilik Sensoru

Bu dərslik, ESP8266 qurmaq və həm temperatur sensoru, həm də LED şeridi ilə danışmaq, eyni zamanda WiFi üzərindən MQTT ilə giriş qəbul etmək və çıxarmaq imkanı əldə etmək üçün addımları təsvir edir. Layihə, Payız 2016-da Cal Poly San Luis Obispo'da alınan bir kurs üçün hazırlanmışdır- CPE 439: Real Time Embedded Systems. Ümumi məqsəd, ucuz avadanlıqlarla internetə bağlı bir "şey" yaratmağın asanlığını nümayiş etdirmək idi.

Lazımi təchizatlar/avadanlıqlar:

  • NodeMCU ESP8266 inkişaf lövhəsi
  • WS2812B LED şeridi
  • MAX31820 Temperatur sensoru
  • Çörək lövhəsi
  • 4.7K ohm müqavimət
  • 220 ohm müqavimət
  • tullanan tellər
  • mikro usb kabeli
  • Linux (məsələn, Ubuntu) işləyən PC (və ya VM)

Varsayımlar/ön şərtlər:

  • əmr satırı alətlərindən istifadə və paketləri debian əsaslı bir distroya quraşdırmaq təcrübəsi
  • Makefile sintaksisi haqqında əsas anlayış
  • birləşdirən tellər

Addım 1: Quraşdırma mühiti yaratmaq

Layihəni qurmaq üçün maşınınıza esp-open-sdk quraşdırmalısınız. Linki izləyin və tikinti təlimatlarını oxuyun. Bir sözlə, asılılıqları qurmaq üçün bir sudo apt-get əmrləri, esp-open-sdk-ni klonlamaq/yükləmək üçün təkrarlanan bir git klonu və nəhayət esp-open-sdk qurmaq əmri verəcəksiniz.

Mənə bax

Addım 2: Mənbə Kodunu alın, Konfiqurasiya edin və Qurun

İndi esp-open-sdk qurulduğundan, layihə anbarını klonlayın.

git klonu

Layihə qovluğuna keçin,.local qovluq yaradın və nümunə parametrlərini kopyalayın.

cd esp-rtos-testləri

mkdir -p.cp cp settings.example.mk.local/settings.mk

İndi hər hansı bir mətn redaktoru ilə.local/settings.mk açın və aşağıdakı parametrləri dəyişdirin:

  • OPENSDK_ROOT: 1-ci addımda qurduğunuz esp-open-sdk-nin yeri üçün mütləq yol
  • WIFI_SSID: WiFi şəbəkənizin SSID -si
  • WIFI_PASS: WiFi şəbəkənizin şifrəsidir
  • PIXEL_COUNT: WS2812B LED şeridinizdəki piksellərin sayı

Qeyd: Bu layihə LEDləri idarə etmək üçün SPI istifadə etdiyindən və onları təchiz etmək üçün NodeMCU 3.3v istifadə etdiyindən, ehtimal ki, ~ 60 LED -dən çox idarə edə bilməyəcəksiniz.

Qeyd: Digər parametrlərin dəyişdirilməsinə ehtiyac yoxdur, ancaq istəsəniz ola bilər. Tapşırıqların prioritet sırasını saxlamaq tövsiyə olunur. Prioritet sayı nə qədər aşağı olsa, vəzifənin prioriteti o qədər aşağı olar.

İndi layihəni qurun:

etmək -C nümunələri/cpe439

Hər şey düzgün qurulubsa, tərtib etməyə başlamalıdır. Sonda görməlisiniz:

Uğurla 'firmware/cpe439.bin' yaradıldı

Mənə bax

Addım 3: Avadanlıq Komponentlərini birləşdirin

Avadanlıq Komponentlərini birləşdirin
Avadanlıq Komponentlərini birləşdirin

İndi kod tərtib edildikdən sonra ətraf qurğularımızı birləşdirmə vaxtıdır.

Əvvəlcə NodeMCU -nu çörək taxtasına yapışdırın, sonra diaqramda göstərildiyi kimi əlaqələri qurmaq üçün keçid tellərindən istifadə edin.

Bilməli olduğunuz bir neçə şey:

  1. Vacibdir: WS2812B məlumat xətti ikitərəfli deyil. Şeridin LED tərəfindəki işarələrə yaxından baxsanız, bir istiqamətə işarə edən kiçik oxlar görməlisiniz. NodeMCU -nun D7 -dən çıxışı, diqqətlə baxdığınız təqdirdə diaqramda görə biləcəyiniz istiqamət işarəsi ilə eyni şəkildə WS2812B -yə daxil olmalıdır.
  2. WS2812B -nin hansı bağlayıcılarla təchiz olunduğundan asılı olaraq, onları çörək lövhəsinə etibarlı şəkildə bağlamaq üçün bəzi dəyişikliklər etməlisiniz. Timsah kliplərindən də çörək taxtasında işləyə bilən keçid kabellərinə qoşulmaq üçün istifadə edə bilərsiniz.
  3. MAX31820 sancaqlar daha kiçik bir meydançaya malikdir və standart 0.1 "/2.54 mm atlayıcılardan daha incədir, bu da onları birləşdirməyi çətinləşdirir. Bunun bir yolu, dişi-kişiyə tullanan tellərdən istifadə etmək, plastik qutunu qadın tərəfdən çıxarmaq, daha sonra dişi tullanan uclarını daha kiçik MAX31820 sancaqlar ətrafında sıx bağlamaq üçün bir neçə pens istifadə edin.

Komponentlərə zərər verməmək üçün NodeMCU-nu işə salmadan əvvəl əlaqələri iki dəfə yoxlayın.

Addım 4: Flash və Run

Yanıp sönür

Bütün avadanlıqlar bağlı olduqda, NodeMCU'nuzu qoşun və aşağıdakı əmrlə yanıb sönün:

flash etmək -C nümunələri/cpe439 ESPPORT =/dev/ttyUSB0

/dev/ttyUSB0, NodeMCU -nun altında görünməli olan serial com. Başqa bir serial cihazınız varsa, /dev /ttyUSB1 və ya başqa bir nömrə kimi görünə bilər. Yoxlamaq üçün bu əmri iki dəfə işlədə bilərsiniz, bir dəfə NodeMCU ayrılmadan və bir dəfə qoşularaq fərqi müqayisə edin:

ls /dev /ttyUSB*

Qarşılaşa biləcəyiniz başqa bir problem, cihaza giriş icazəsinin olmamasıdır. Bunu düzəltməyin iki yolu var:

  1. İstifadəçinizi dialout qrupuna əlavə edin:

    sudo adduser $ (whoami) dialout

  2. chmod və ya cihazı bağlayın:

sudo chmod 666 /dev /ttyUSB0 sudo chown $ (whoami): $ (whoami) /dev /ttyUSB0Qalıcı bir həll olduğu üçün birinci üsula üstünlük verilir.

Qaçır

Flaş əmrini uğurla işlədikdən sonra cihaz dərhal açılacaq və tərtib edilmiş kodu işə salacaq. İstənilən nöqtədə yanıb söndükdən sonra serial çıxışı izləmək üçün aşağıdakı əmri işlədə bilərsiniz:

python3 -m serial.tools.miniterm --eol CRLF --exit -char 003 /dev /ttyUSB0 500000 --raw -q

Vaxtınıza qənaət etmək üçün bunu ~/.bashrc faylınıza əlavə edə bilərsiniz:

alias nodemcu = 'python3 -m serial.tools.miniterm --eol CRLF --exit -char 003 /dev /ttyUSB0 500000 --raw -q'

.. ki, bu komanda üçün başqa ad olaraq "nodemcu" yazmağa imkan verir.

Hər şey düzgün qurulubsa, LED şeridiniz yaşıl rəngdə yanmalıdır və serialda WiFi bağlantısı, bir IP ünvanı, MQTT -ə qoşulma və temperatur məlumatlarının itildiyi mesajları görməlisiniz.

MyWiFiSSID ilə əlaqəli, kanal 1dhcp müştəri başlanğıcı… wifi_task: status = 1wifi_task: status = 1ip: 192.168.2.23, maska: 255.255.255.0, gw: 192.168.2.1ws2812_spi_init okRequest temp OKwifi_task: rt_Wq_tq_tq: (Yenidən) MQTT serverinə bağlanır test.mosquitto.org… xQueueReceive +25.50xQueueSend tamam tamamlandı MQTT bağlantısını göndərin … MQTTv311donexQueueReceive +25.56 xQueueSend tamam

Addım 5: Qarşılıqlı əlaqə

Cihazınızın WiFi və MQTT brokerinə uğurla qoşulduğunu güman etsəniz, MQTT ilə NodeMCU -dan məlumat göndərə və ala biləcəksiniz. Hələ etməmisinizsə, ağcaqanad müştəriləri paketini quraşdırın:

sudo apt-get ağcaqanad müştəriləri quraşdırın

İndi kabuğunuzdan mosquitto_pub və mosquitto_sub proqramlarından istifadə etməlisiniz.

Temperatur yeniləmələrinin alınması

Temperatur məlumatlarını almaq üçün, NodeMCU -nun yayımladığı mövzuya abunə olmaq üçün mosquitto_sub əmrindən istifadə etmək istərdik.

mosquitto_sub -h test.mosquitto.org -t /cpe439 /temp

Terminala gələn temperatur məlumatlarını (Selsi ilə) görməlisiniz.

+25.87+25.93+25.68…

LED şeridi rəngini uzaqdan təyin etmək

RGB dəyərlərini MQTT üzərindən NodeMCU -ya göndərmək üçün sadə bir mesaj formatı istifadə olunur. Komanda formatı belə görünür:

r: RRRg: GGGb: BBB ~

RRR, GGG, BBB göndərmək istədiyiniz rəngin RGB dəyərlərinə (0-255) uyğundur. Əmrimizi göndərmək üçün mosquitto_pub əmrindən istifadə edəcəyik. Budur bəzi nümunələr:

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

Yaradıcılıq etmək istəyirsinizsə, bunun kimi bir onlayn rəng seçici tapın və seçdiyiniz hər hansı bir RGB dəyəri ilə əmri redaktə edin.

Diqqətli ol

Bu layihədəki mövzular, ümumi bir MQTT brokerində /cpe439 /rgb və /cpe439 /temp olaraq təyin olunur, bu da başqasının sizinlə eyni mövzuları nəşr etməsinə və ya abunə olmasına mane olan heç bir şey olmadığını göstərir. Bir şeyi sınamaq üçün ictimai bir brokerdən istifadə etmək yaxşıdır, ancaq daha ciddi layihələr üçün parol qorunması olan bir brokerə qoşulmaq və ya öz brokerinizi serverdə idarə etmək istəyəcəksiniz.

Addım 6: Tətbiq Təfərrüatları

Onewire

ESP8266, yalnız 1 nüvəyə malikdir, belə ki, uzun müddətdir ki, temperatur sensörünün temperatur ölçməsini yerinə yetirməsi üçün 750 ms gözləmək, normal olaraq WiFi -nin yaxşı işləməməsinə və hətta qəzaya səbəb ola bilər. FreeRTOS paradiqmasında, bu uzun gözləmələri idarə etmək üçün vTaskDelay () çağırırsınız, ancaq oxunuşlar və yazılar arasında FreeRTOS sistem işarəsindən daha qısa olan və buna görə də vTaskDelay () ilə qarşısını almaq mümkün olmayan bir çox qısa gözləmə tələb olunur. Bunların da öhdəsindən gəlmək üçün, bu layihədəki bir telli sürücü, hər 10 mikro saniyədə ən aşağı olan hadisələri tetikleyebilen ESP8266-nın aparat taymeri ilə idarə olunan bir dövlət maşınından çıxmaq üçün yazılmışdır. onewire oxumaq/yazmaq əməliyyatları arasında tələb olunan vaxt. Digər tətbiqlərin çoxu, bunu həll etmək üçün delay_us () və ya buna bənzər bir maneə törədən zəngdən istifadə edir, ancaq daim temperatur yeniləmələri alırsınızsa, bütün gecikmələr artmağa başlayır və daha az həssas bir tətbiq ilə nəticələnir. Kodun bu hissəsinin mənbəyi extras/onewire qovluğunda yerləşir.

WS2812B

ESP8266, 800KHz -də LED şeridləri idarə etmək üçün kifayət qədər sürətli PWM üçün heç bir standart hardware seçiminə malik deyil. Bunun öhdəsindən gəlmək üçün bu layihə LEDləri idarə etmək üçün SPI MOSI pinindən istifadə edir. SPI -nin saat sürətini tənzimləyərək və SPI yükünü dəyişərək hər bir LED -in kifayət qədər etibarlı idarə olunmasına nail ola bilərsiniz. Bu metodun qüsurları da yoxdur- LED-lərin 5V-luq bir qaynaqla təchiz edilməsi və SPI pininin çıxışına bir səviyyə dəyişdirici əlavə edilməlidir. Ancaq 3.3V işləyir. İkincisi, SPI metodundan istifadə etməklə vaxtın mükəmməl olmaması səbəbindən yaranan qüsurlar var. Üçüncüsü, SPI -dən başqa bir şey üçün istifadə edə bilməzsiniz. Bu metodla bağlı əlavə məlumatı burada tapa bilərsiniz və kodun bu hissəsinin mənbəyi extras/ws2812 qovluğunda yerləşir.

LED şeridlərini idarə etmək üçün daha etibarlı bir üsul i2s istifadə etməkdir. Bununla birlikdə, bu metodun çipə xas olan bir çox çatışmazlığı var, buna görə SPI öyrənmə məşqi olaraq daha yaxşı bir seçim kimi görünürdü.

Tövsiyə: