Daftar Isi:

WiFi LED Strip + Sensor Suhu Dengan ESP8266: 6 Langkah
WiFi LED Strip + Sensor Suhu Dengan ESP8266: 6 Langkah

Video: WiFi LED Strip + Sensor Suhu Dengan ESP8266: 6 Langkah

Video: WiFi LED Strip + Sensor Suhu Dengan ESP8266: 6 Langkah
Video: ESP8266 Monitoring Suhu Dengan ESP8266 sensor DHT11 BLYNK | IOT | 2024, November
Anonim
WiFi LED Strip + Sensor Suhu Dengan ESP8266
WiFi LED Strip + Sensor Suhu Dengan ESP8266

Tutorial ini menjelaskan langkah-langkah untuk menyiapkan ESP8266 dan membuatnya berbicara dengan sensor suhu dan strip LED, sementara juga dapat menerima input dan mengirim output dengan MQTT melalui WiFi. Proyek ini dibuat untuk kursus yang diambil di Cal Poly San Luis Obispo pada Musim Gugur 2016- CPE 439: Sistem Tertanam Waktu Nyata. Tujuan keseluruhannya adalah untuk mendemonstrasikan kemudahan membuat "benda" yang terhubung ke internet dengan perangkat keras yang murah.

Perlengkapan/Peralatan yang Dibutuhkan:

  • Papan pengembang NodeMCU ESP8266
  • Strip LED WS2812B
  • MAX31820 Sensor suhu
  • Papan tempat memotong roti
  • Resistor 4.7K ohm
  • resistor 220 ohm
  • kabel jumper
  • kabel micro usb
  • PC (atau VM) yang menjalankan linux (mis. Ubuntu)

Asumsi/Prasyarat:

  • pengalaman menggunakan alat baris perintah dan menginstal paket pada distro berbasis debian
  • pemahaman dasar tentang sintaks Makefile
  • menghubungkan kabel

Langkah 1: Membuat Lingkungan Bangun

Untuk membangun proyek, Anda perlu menginstal esp-open-sdk di mesin Anda. Ikuti tautan dan baca instruksi pembuatan. Singkatnya, Anda akan melakukan beberapa perintah sudo apt-get untuk menginstal dependensi, git clone --recursive untuk mengkloning/mengunduh esp-open-sdk, dan akhirnya membuat perintah untuk membangun esp-open-sdk.

Lihat aku

Langkah 2: Dapatkan Kode Sumber, Konfigurasi, dan Bangun

Sekarang setelah esp-open-sdk dibuat, klon repositori proyek.

git clone

Ubah ke direktori proyek, buat folder.local, dan salin pengaturan contoh.

cd esp-rtos-tes

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

Sekarang buka.local/settings.mk dengan editor teks apa saja dan ubah pengaturan berikut:

  • OPENSDK_ROOT: Jalur absolut untuk lokasi esp-open-sdk yang Anda buat di langkah 1
  • WIFI_SSID: SSID jaringan WiFi Anda
  • WIFI_PASS: Kata sandi jaringan WiFi Anda
  • PIXEL_COUNT: Jumlah piksel pada strip LED WS2812B Anda

Catatan: Karena proyek ini menggunakan SPI untuk menggerakkan LED dan menggunakan NodeMCU 3.3v untuk memasoknya, Anda mungkin tidak akan dapat menggerakkan lebih dari ~60 LED.

Catatan: Pengaturan lain tidak perlu diubah, tetapi bisa jika diinginkan. Disarankan untuk menjaga urutan prioritas tugas. Semakin rendah nomor prioritas, semakin rendah prioritas tugas.

Sekarang bangun proyek:

make -C contoh/cpe439

Jika semuanya sudah diatur dengan benar, itu harus mulai dikompilasi. Pada akhirnya Anda akan melihat:

Berhasil membuat 'firmware/cpe439.bin'

Lihat aku

Langkah 3: Hubungkan Komponen Perangkat Keras

Hubungkan Komponen Perangkat Keras
Hubungkan Komponen Perangkat Keras

Sekarang setelah kode dikompilasi, saatnya untuk menghubungkan periferal kita.

Pertama, tempelkan NodeMCU ke papan tempat memotong roti, lalu gunakan kabel jumper untuk membuat koneksi seperti yang ditunjukkan pada diagram.

Beberapa hal yang perlu diperhatikan:

  1. Penting: Jalur data WS2812B tidak dua arah. Jika Anda melihat lebih dekat pada tanda di sisi LED strip, Anda akan melihat panah kecil menunjuk ke satu arah. Output dari D7 dari NodeMCU harus menuju ke WS2812B dengan cara yang sama seperti penanda arah, yang dapat Anda lihat di diagram jika Anda perhatikan lebih dekat.
  2. Bergantung pada jenis konektor yang disertakan dengan WS2812B Anda, Anda mungkin perlu melakukan beberapa modifikasi untuk membuatnya terhubung dengan aman ke papan tempat memotong roti. Anda juga dapat menggunakan klip buaya untuk menghubungkannya ke kabel jumper yang dapat digunakan untuk papan tempat memotong roti.
  3. Pin MAX31820 memiliki pitch yang lebih kecil dan lebih tipis dari jumper standar 0,1"/2,54mm, membuatnya sulit untuk disambungkan. Salah satu cara mengatasinya adalah dengan menggunakan kabel jumper female-to-male, lepas casing plastik dari sisi female, kemudian gunakan beberapa tang untuk mengeriting ujung jumper betina dengan erat di sekitar pin MAX31820 yang lebih kecil.

Periksa kembali koneksi sebelum menyalakan NodeMCU agar tidak merusak komponen.

Langkah 4: Flash dan Jalankan

Berkedip

Dengan semua perangkat keras terhubung, colokkan NodeMCU Anda dan flash dengan perintah berikut:

buat contoh flash -C/cpe439 ESPPORT=/dev/ttyUSB0

/dev/ttyUSB0 adalah serial com tempat NodeMCU akan muncul. Jika Anda memiliki perangkat serial lain yang terhubung, itu mungkin muncul sebagai /dev/ttyUSB1 atau nomor lainnya. Untuk memeriksa Anda dapat menjalankan perintah ini dua kali, sekali dengan NodeMCU dicabut, dan sekali dengan itu dicolokkan, dan bandingkan perbedaannya:

ls /dev/ttyUSB*

Masalah lain yang mungkin Anda temui adalah tidak memiliki izin untuk mengakses perangkat. Dua cara untuk memperbaikinya adalah:

  1. Tambahkan pengguna Anda ke grup dialout:

    sudo adduser $(whoami) dialout

  2. chmod atau chown perangkat:

sudo chmod 666 /dev/ttyUSB0 Sudo chown $(whoami):$(whoami) /dev/ttyUSB0Metode pertama lebih disukai karena merupakan solusi permanen.

Berlari

Setelah menjalankan perintah flash dengan sukses, perangkat akan segera boot dan mulai menjalankan kode yang dikompilasi. Kapan saja setelah mem-flash Anda dapat menjalankan perintah berikut untuk menonton output serial:

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

Untuk menghemat waktu, Anda dapat menambahkan ini ke file ~/.bashrc Anda:

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

..yang memungkinkan Anda mengetik "nodemcu" sebagai alias untuk perintah itu.

Jika semuanya dikonfigurasi dengan benar, strip LED Anda akan menyala hijau, dan pada serial Anda akan melihat WiFi terhubung, mendapatkan alamat IP, terhubung ke MQTT, dan pesan bahwa data suhu sedang didorong keluar.

terhubung dengan MyWiFiSSID, klien saluran 1dhcp start…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 = 5xQueueReceive +25.43xQuetue: (Kembali)menghubungkan ke server MQTT test.mosquitto.org …xQueueReceive +25.50xQueueSend ok doneKirim MQTT connect … MQTTv311donexQueueReceive +25.56 xQueueSend ok

Langkah 5: Berinteraksi

Dengan asumsi perangkat Anda telah terhubung ke WiFi dan broker MQTT berhasil, Anda akan dapat mengirim dan menerima data dari NodeMCU dengan MQTT. Jika Anda belum melakukannya, instal paket klien mosquitto:

sudo apt-get install mosquitto-clients

Anda sekarang seharusnya dapat menggunakan program mosquitto_pub dan mosquitto_sub dari shell Anda.

Menerima pembaruan suhu

Untuk menerima data suhu, kami ingin menggunakan perintah mosquitto_sub untuk berlangganan topik yang diterbitkan oleh NodeMCU.

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

Anda akan melihat data suhu (dalam Celcius), tiba di terminal.

+25.87+25.93+25.68…

Mengatur warna strip LED dari jarak jauh

Format pesan sederhana digunakan untuk mengirim nilai RGB ke NodeMCU melalui MQTT. Format perintah terlihat seperti ini:

r:RRRg:GGGb:BBB~

Di mana RRR, GGG, BBB sesuai dengan nilai RGB (0-255) dari warna yang ingin Anda kirim. Untuk mengirim perintah kita, kita akan menggunakan perintah mosquitto_pub. Berikut beberapa contohnya:

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~' # biru

Jika Anda ingin berkreasi, temukan pemilih warna online seperti ini, dan edit perintah dengan nilai RGB apa pun yang Anda pilih.

Awas

Topik dalam proyek ini disetel ke /cpe439/rgb dan /cpe439/temp pada broker MQTT publik, yang berarti tidak ada yang menghalangi orang lain untuk memublikasikan atau berlangganan topik yang sama seperti Anda. Untuk mencoba berbagai hal, menggunakan broker publik boleh saja, tetapi untuk proyek yang lebih serius, Anda harus terhubung ke broker dengan perlindungan kata sandi, atau menjalankan broker Anda sendiri di server.

Langkah 6: Detail Implementasi

Onewire

ESP8266 hanya memiliki 1 inti, begitu lama, memblokir tugas-tugas seperti menunggu 750ms untuk sensor suhu untuk melakukan pengukuran suhu biasanya akan mengakibatkan WiFi tidak berfungsi dengan baik, dan bahkan mungkin crash. Dalam paradigma FreeRTOS, Anda memanggil vTaskDelay() untuk menangani waktu tunggu yang lama ini, tetapi ada juga banyak waktu tunggu yang lebih singkat yang diperlukan antara membaca dan menulis yang lebih pendek daripada centang sistem FreeRTOS, dan dengan demikian tidak dapat dihindari dengan vTaskDelay(). Untuk juga menyiasatinya, driver onewire dalam proyek ini ditulis untuk menjalankan mesin negara yang digerakkan oleh timer perangkat keras ESP8266, yang dapat memicu peristiwa serendah setiap 10 mikro-detik, yang kebetulan merupakan yang terpendek waktu yang diperlukan antara operasi baca/tulis onewire. Sebagian besar implementasi lain menggunakan panggilan pemblokiran ke delay_us() atau serupa untuk menangani ini, tetapi jika Anda terus-menerus melakukan pembaruan suhu, semua penundaan itu mulai bertambah, menghasilkan aplikasi yang kurang responsif. Sumber untuk bagian kode ini terletak di folder extras/onewire.

WS2812B

ESP8266 tidak memiliki opsi perangkat keras standar untuk PWM yang cukup cepat untuk menggerakkan strip LED pada 800KHz. Untuk menyiasatinya, proyek ini menggunakan pin SPI MOSI untuk menggerakkan LED. Dengan menyesuaikan kecepatan clock SPI, dan mengubah payload SPI, Anda dapat mencapai kontrol yang cukup andal untuk setiap LED individu. Metode ini bukan tanpa kekurangannya- untuk satu LED harus ditenagai dengan sumber 5V dan pemindah level harus ditambahkan ke output pin SPI. Tapi 3.3V berfungsi. Kedua, terdapat gangguan yang terjadi karena timing yang tidak sempurna dengan menggunakan metode SPI. Dan ketiga sekarang Anda tidak dapat menggunakan SPI untuk hal lain. Latar belakang tambahan pada metode ini dapat ditemukan di sini, dan sumber untuk bagian kode ini terletak di folder extras/ws2812.

Metode yang lebih andal untuk menggerakkan strip LED adalah dengan menggunakan i2s. Namun metode ini memiliki banyak peretasan khusus chip, sehingga SPI tampaknya menjadi pilihan yang lebih baik sebagai latihan pembelajaran.

Direkomendasikan: