Isi kandungan:

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

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

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

Tutorial ini menerangkan langkah-langkah untuk menyiapkan ESP8266 dan membincangkannya dengan sensor suhu dan jalur LED, sementara juga dapat menerima input dan mengirim output dengan MQTT melalui WiFi. Projek ini dibuat untuk kursus yang diambil di Cal Poly San Luis Obispo pada musim gugur 2016- CPE 439: Sistem Masa Nyata. Tujuan keseluruhannya adalah untuk menunjukkan kemudahan membuat "benda" yang tersambung ke internet dengan perkakasan yang murah.

Bekalan / Peralatan Diperlukan:

  • Papan dev NodeMCU ESP8266
  • Jalur LED WS2812B
  • Sensor suhu MAX31820
  • Papan roti
  • Perintang 4.7K ohm
  • Perintang 220 ohm
  • wayar pelompat
  • kabel mikro-usb
  • PC (atau VM) yang menjalankan linux (mis. Ubuntu)

Andaian / Prasyarat:

  • pengalaman menggunakan alat baris perintah dan memasang pakej pada distro berasaskan debian
  • pemahaman asas mengenai sintaks Makefile
  • wayar penyambung

Langkah 1: Membuat Persekitaran Binaan

Untuk membina projek, anda perlu memasang esp-open-sdk pada mesin anda. Ikuti pautan dan baca arahan membina. Singkatnya, anda akan melakukan beberapa perintah sudo apt-get untuk memasang dependensi, clone git --reursive to clone / download esp-open-sdk, dan akhirnya perintah make untuk membangun esp-open-sdk.

Lihat saya

Langkah 2: Dapatkan Kod Sumber, Konfigurasi, dan Bangun

Sekarang esp-open-sdk dibina, klon repositori projek.

git klon

Tukar ke direktori projek, buat folder.local, dan salin tetapan contoh.

cd esp-rtos-ujian

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

Sekarang buka.local / settings.mk dengan mana-mana editor teks dan ubah tetapan berikut:

  • OPENSDK_ROOT: Jalan mutlak untuk lokasi esp-open-sdk yang anda bina pada langkah 1
  • WIFI_SSID: SSID rangkaian WiFi anda
  • WIFI_PASS: Kata laluan rangkaian WiFi anda
  • PIXEL_COUNT: Bilangan piksel pada jalur LED WS2812B anda

Catatan: Oleh kerana projek ini menggunakan SPI untuk menggerakkan LED dan menggunakan NodeMCU 3.3v untuk membekalkannya, anda mungkin tidak akan dapat memandu lebih dari ~ 60 LED.

Catatan: Tetapan lain tidak perlu diubah, tetapi boleh dilakukan jika dikehendaki. Dianjurkan untuk menjaga urutan keutamaan tugas. Semakin rendah nombor keutamaan, semakin rendah keutamaan tugas.

Sekarang bina projek:

buat -C contoh / cpe439

Sekiranya semuanya disusun dengan betul, ia mesti mula disusun. Pada akhirnya anda akan melihat:

Berjaya membuat 'firmware / cpe439.bin'

Lihat saya

Langkah 3: Sambungkan Komponen Perkakasan

Sambungkan Komponen Perkakasan
Sambungkan Komponen Perkakasan

Sekarang kodnya disusun, sudah tiba masanya untuk menghubungkan persisian kami.

Pertama, pasangkan NodeMCU ke papan roti, kemudian gunakan wayar jumper untuk membuat sambungan seperti yang ditunjukkan dalam rajah.

Beberapa perkara yang perlu diberi perhatian:

  1. Penting: Garis data WS2812B tidak dua arah. Sekiranya anda melihat dengan teliti tanda pada bahagian LED jalur, anda akan melihat anak panah kecil menunjuk satu arah. Keluaran dari D7 dari NodeMCU perlu menuju ke WS2812B dengan cara yang sama seperti penanda arah, yang dapat anda lihat dalam rajah jika anda melihat dengan teliti.
  2. Bergantung pada jenis penyambung yang disertakan WS2812B anda, anda mungkin perlu melakukan beberapa pengubahsuaian untuk menyambungkannya dengan selamat ke papan roti. Anda juga boleh menggunakan klip buaya untuk menyambungkannya ke kabel pelompat yang dapat memenuhi papan roti.
  3. Pin MAX31820 mempunyai nada yang lebih kecil dan lebih tipis daripada jumper 0.1 "/2.54mm standard, menjadikannya sukar untuk disambungkan. Salah satu cara untuk mengatasi ini adalah dengan menggunakan wayar jumper wanita-ke-lelaki, menanggalkan casing plastik dari sisi wanita, kemudian gunakan beberapa tang untuk merapatkan hujung pelompat wanita dengan erat di sekitar pin MAX31820 yang lebih kecil.

Periksa semula sambungan sebelum menghidupkan NodeMCU agar tidak merosakkan komponen.

Langkah 4: Flash dan Jalankan

Berkelip

Dengan semua perkakasan yang disambungkan, pasangkan NodeMCU anda dan flash dengan arahan berikut:

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

/ dev / ttyUSB0 adalah com bersiri yang NodeMCU akan muncul di bawah. Sekiranya anda mempunyai peranti bersiri lain yang disambungkan, ia mungkin muncul sebagai / dev / ttyUSB1 atau beberapa nombor lain. Untuk memeriksa, anda boleh menjalankan perintah ini dua kali, sekali dengan NodeMCU dicabut, dan sekali dengan pemalamnya, dan bandingkan perbezaannya:

ls / dev / ttyUSB *

Masalah lain yang mungkin anda hadapi ialah tidak mempunyai kebenaran untuk mengakses peranti. Dua cara untuk memperbaikinya ialah:

  1. Tambahkan pengguna anda ke kumpulan dialout:

    sudo adduser $ (whoami) dialout

  2. chmod atau chown peranti:

sudo chmod 666 / dev / ttyUSB0 sudo chown $ (whoami): $ (whoami) / dev / ttyUSB0Kaedah pertama lebih disukai kerana ia adalah penyelesaian kekal.

Berlari

Setelah berjaya menjalankan perintah flash, peranti akan segera boot dan mula menjalankan kod yang disusun. Pada bila-bila masa selepas flash anda boleh menjalankan perintah berikut untuk menonton output bersiri:

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

Untuk menjimatkan masa, anda boleh menambahkannya ke fail ~ /.bashrc anda:

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

.. yang membolehkan anda hanya menaip "nodemcu" sebagai alias untuk perintah itu.

Sekiranya semuanya dikonfigurasi dengan betul, jalur LED anda harus menyala hijau, dan secara bersiri anda akan melihat sambungan WiFi, mendapatkan alamat IP, menyambung ke MQTT, dan mesej bahawa data suhu dikeluarkan.

disambungkan dengan MyWiFiSSID, saluran pelanggan 1dhcp mula… wifi_task: status = 1wifi_task: status = 1ip: 192.168.2.23, topeng: 255.255.255.0, gw: 192.168.2.1ws2812_spi_init okRespest temp OKwifi_task: status = 5xQueueStwtkwtkwtwtwtwtwtwtwtwtwtwtwtwtwtwtwtwtwtwtwtwtwtwtwtwt: (Re) menyambung ke test server MQTT.mosquitto.org… xQueueReceive + 25.50xQueueHantar ok selesai Hantar MQTT sambungkan… MQTTv311donexQueueReceive +25.56 xQueueSend ok

Langkah 5: Berinteraksi

Dengan andaian bahawa peranti anda telah tersambung ke WiFi dan broker MQTT dengan berjaya, anda akan dapat mengirim dan menerima data dari NodeMCU dengan MQTT. Sekiranya anda belum melakukannya, pasang pakej klien nyamuk:

sudo apt-get pasang mosquitto-klien

Anda kini boleh menggunakan program mosquitto_pub dan mosquitto_sub dari cengkerang anda.

Menerima kemas kini suhu

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

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

Anda mesti melihat data suhu (dalam Celsius), tiba di terminal.

+25.87+25.93+25.68…

Menetapkan warna jalur LED dari jauh

Format pesanan ringkas digunakan untuk mengirim nilai RGB ke NodeMCU melalui MQTT. Format arahan kelihatan seperti ini:

r: RRRg: GGGb: BBB ~

Di mana RRR, GGG, BBB sesuai dengan nilai RGB (0-255) warna yang ingin anda hantar. Untuk menghantar arahan kami, kami akan menggunakan perintah mosquitto_pub. Berikut adalah beberapa contoh:

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

Sekiranya anda ingin menjadi kreatif, cari pemilih warna dalam talian seperti ini, dan edit perintah dengan nilai RGB apa sahaja yang anda pilih.

Berhati-hati

Topik dalam projek ini ditetapkan ke / cpe439 / rgb dan / cpe439 / temp pada broker MQTT awam, yang bermaksud bahawa tidak ada yang menghalang orang lain daripada menerbitkan atau melanggan topik yang sama seperti anda. Untuk mencuba sesuatu, menggunakan broker awam adalah baik, tetapi untuk projek yang lebih serius, anda ingin menyambung ke broker dengan perlindungan kata laluan, atau menjalankan broker anda sendiri di pelayan.

Langkah 6: Perincian Pelaksanaan

Onewire

ESP8266 hanya mempunyai 1 teras, sekian lama, tugas menyekat seperti menunggu 750ms sensor suhu untuk melakukan pengukuran suhu biasanya akan mengakibatkan WiFi tidak berfungsi dengan baik, dan mungkin juga berlaku kerosakan. Dalam paradigma FreeRTOS, anda memanggil vTaskDelay () untuk menangani penantian lama ini, tetapi terdapat juga banyak penantian yang lebih pendek yang diperlukan antara bacaan dan penulisan yang lebih pendek daripada centang sistem FreeRTOS, dan dengan itu tidak dapat dielakkan dengan vTaskDelay (). Untuk mengatasi ini, pemacu onewire dalam projek ini ditulis untuk menjalankan mesin keadaan yang dipacu oleh pemasa perkakasan ESP8266, yang dapat mencetuskan peristiwa serendah setiap 10 mikro-detik, yang kebetulan menjadi yang terpendek masa yang diperlukan antara operasi membaca / menulis onewire. Sebilangan besar pelaksanaan lain menggunakan panggilan pemblokiran untuk delay_us () atau serupa untuk menangani hal ini, tetapi jika anda terus-menerus melakukan pembaruan suhu, semua kelewatan itu mulai bertambah, menghasilkan aplikasi yang kurang responsif. Sumber untuk bahagian kod ini terletak di folder ekstra / onewire.

WS2812B

ESP8266 tidak mempunyai pilihan perkakasan standard untuk PWM yang cukup pantas untuk menggerakkan jalur LED pada 800KHz. Untuk menyelesaikannya, projek ini menggunakan pin SPI MOSI untuk menggerakkan LED. Dengan menyesuaikan kadar jam SPI, dan mengubah muatan SPI di sekitar, anda dapat mencapai kawalan yang cukup dipercayai bagi setiap LED individu. Kaedah ini bukan tanpa kekurangan - untuk satu LED harus dihidupkan dengan sumber 5V dan pergeseran level harus ditambahkan pada output pin SPI. Tetapi 3.3V berfungsi. Kedua, terdapat gangguan yang berlaku kerana masa yang tidak sempurna menggunakan kaedah SPI. Dan ketiga sekarang anda tidak boleh menggunakan SPI untuk perkara lain. Latar belakang tambahan kaedah ini boleh didapati di sini, dan sumber bahagian kod ini terdapat di folder ekstra / ws2812.

Kaedah yang lebih dipercayai untuk memandu jalur LED adalah menggunakan i2s. Namun kaedah ini mempunyai banyak peretasan khusus cip, jadi SPI sepertinya menjadi pilihan yang lebih baik sebagai latihan pembelajaran.

Disyorkan: