Talaan ng mga Nilalaman:

WiFi LED Strip + Temperature Sensor Sa ESP8266: 6 na Hakbang
WiFi LED Strip + Temperature Sensor Sa ESP8266: 6 na Hakbang

Video: WiFi LED Strip + Temperature Sensor Sa ESP8266: 6 na Hakbang

Video: WiFi LED Strip + Temperature Sensor Sa ESP8266: 6 na Hakbang
Video: ESP8266 ESP01 WIFI Mobile Phone Control | LDmicro-Roboremo Programming 2024, Hulyo
Anonim
WiFi LED Strip + Temperature Sensor Sa ESP8266
WiFi LED Strip + Temperature Sensor Sa ESP8266

Inilalarawan ng tutorial na ito ang mga hakbang upang mag-set up ng isang ESP8266 at makipag-usap sa parehong sensor ng temperatura at LED strip, habang makakatanggap din ng input at magpadala ng output sa MQTT sa paglipas ng WiFi. Ang proyekto ay ginawa para sa isang kurso na kinuha sa Cal Poly San Luis Obispo noong Fall 2016- CPE 439: Real Time Embedded Systems. Ang pangkalahatang layunin ay upang ipakita ang kadalian ng paglikha ng isang "bagay" na konektado sa internet na may murang hardware.

Kailangan ng Mga Pantustos / Kagamitan:

  • NodeMCU ESP8266 dev board
  • WS2812B LED strip
  • MAX31820 Temperatura sensor
  • Breadboard
  • 4.7K ohm risistor
  • 220 ohm risistor
  • jumper wires
  • micro-usb cable
  • Ang PC (o VM) na tumatakbo sa linux (hal. Ubuntu)

Mga Pagpapalagay / Pangangailangan:

  • karanasan sa paggamit ng mga tool ng command-line at pag-install ng mga pakete sa isang distro na batay sa debian
  • pangunahing pag-unawa sa Makefile syntax
  • pagkonekta ng mga wire

Hakbang 1: Lumilikha ng isang Kapaligiran na Bumuo

Upang maitayo ang proyekto, kakailanganin mong i-install ang esp-open-sdk sa iyong machine. Sundin ang link at basahin ang mga tagubilin sa pagbuo. Sa madaling salita gagawa ka ng ilang mga utos ng apt-get apt upang mai-install ang mga dependency, isang clone ng git --recursive upang i-clone / i-download ang esp-open-sdk, at sa wakas ay gumawa ng utos upang bumuo ng esp-open-sdk.

Panoorin mo ako

Hakbang 2: Kumuha ng Source Code, I-configure, at Bumuo

Ngayon na binuo ang esp-open-sdk, i-clone ang imbakan ng proyekto.

git clone

Baguhin sa direktoryo ng proyekto, lumikha ng isang.local folder, at kopyahin ang mga setting ng halimbawa.

cd esp-rtos-test

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

Ngayon buksan ang.local / setting.mk sa anumang text editor at baguhin ang mga sumusunod na setting:

  • OPENSDK_ROOT: Ang ganap na landas para sa lokasyon ng esp-open-sdk na iyong itinayo sa hakbang 1
  • WIFI_SSID: Ang SSID ng iyong WiFi network
  • WIFI_PASS: Ang password ng iyong WiFi network
  • PIXEL_COUNT: Ang bilang ng mga pixel sa iyong WS2812B LED strip

Tandaan: Dahil ang proyektong ito ay gumagamit ng SPI upang himukin ang mga LED at ginagamit ang NodeMCU 3.3v upang maibigay ang mga ito, marahil ay hindi ka maaaring magmaneho ng higit sa ~ 60 LEDs.

Tandaan: Ang iba pang mga setting ay hindi kailangang baguhin, ngunit maaari kung nais. Inirerekumenda na panatilihin ang pagkakasunud-sunod ng mga priyoridad sa gawain. Mas mababa ang numero ng priyoridad, mas mababa ang priyoridad ng gawain.

Bumuo ngayon ng proyekto:

gumawa ng -C mga halimbawa / cpe439

Kung ang lahat ay na-set up nang tama, dapat itong magsimulang mag-ipon. Sa huli dapat mong makita ang:

Matagumpay na nilikha ang 'firmware / cpe439.bin'

Panoorin mo ako

Hakbang 3: Ikonekta ang Mga Component ng Hardware

Ikonekta ang Mga Component ng Hardware
Ikonekta ang Mga Component ng Hardware

Ngayon na ang code ay naipon, oras na upang ikonekta ang aming mga peripheral.

Una, idikit ang NodeMCU sa breadboard, pagkatapos ay gumamit ng mga jumper wires upang gawin ang mga koneksyon tulad ng ipinakita sa diagram.

Isang pares na bagay na dapat magkaroon ng kamalayan:

  1. Mahalaga: Ang linya ng data ng WS2812B ay hindi dalawang direksyon. Kung titingnan mo nang mabuti ang mga marka sa LED na gilid ng strip, dapat mong makita ang mga maliliit na arrow na tumuturo sa isang direksyon. Ang output mula sa D7 ng NodeMCU ay kailangang magtungo sa WS2812B sa parehong paraan tulad ng tagamarka ng direksyon, na makikita mo sa diagram kung titingnan mo nang mabuti.
  2. Nakasalalay sa kung anong uri ng mga konektor ang kasama ng iyong WS2812B, maaaring kailanganin mong gumawa ng ilang mga pagbabago upang ligtas silang kumonekta sa breadboard. Maaari mo ring gamitin ang mga clip ng buaya upang ikonekta ang mga ito sa mga kable ng jumper na may kakayahang tinapay.
  3. Ang MAX31820 na mga pin ay may isang mas maliit na pitch at mas payat kaysa sa karaniwang 0.1 "/2.54mm jumper, ginagawa itong mahirap na kumonekta. Ang isang paraan sa paligid nito ay ang paggamit ng mga babaeng jumper na wire, alisin ang plastic case mula sa babaeng panig, pagkatapos ay gumamit ng ilang mga pliers upang crimp ang babaeng jumper ay nagtatapos nang mahigpit sa paligid ng mas maliit na MAX31820 na mga pin.

Suriing muli ang mga koneksyon bago paandar ang NodeMCU upang hindi makapinsala sa mga sangkap.

Hakbang 4: Flash at Patakbuhin

Kumikislap

Sa lahat ng nakakonektang hardware, i-plug ang iyong NodeMCU at i-flash gamit ang sumusunod na utos:

gumawa ng flash -C mga halimbawa / cpe439 ESPPORT = / dev / ttyUSB0

/ dev / ttyUSB0 ang serial com na dapat ipakita sa ilalim ng NodeMCU. Kung mayroon kang iba pang mga serial device na konektado, maaari itong ipakita bilang / dev / ttyUSB1 o ilang iba pang numero. Upang suriin maaari mong patakbuhin ang utos na ito nang dalawang beses, isang beses nang hindi naka-plug ang NodeMCU, at isang beses na naka-plug in, at ihambing ang pagkakaiba:

ls / dev / ttyUSB *

Ang isa pang isyu na maaari mong makatagpo ay walang pagkakaroon ng pahintulot na mag-access sa aparato. Dalawang paraan upang ayusin ito ay:

  1. Idagdag ang iyong gumagamit sa pangkat ng pag-dialout:

    sudo adduser na $ (whoami) dialout

  2. chmod o chown ang aparato:

sudo chmod 666 / dev / ttyUSB0 sudo chown $ (whoami): $ (whoami) / dev / ttyUSB0Mas gusto ang unang pamamaraan dahil ito ay isang permanenteng solusyon.

Tumatakbo

Matapos matagumpay na patakbuhin ang flash command, agad na mag-boot ang aparato at magsisimulang patakbuhin ang naipong code. Sa anumang punto pagkatapos ng pag-flashing maaari mong patakbuhin ang sumusunod na utos upang manuod ng serial output:

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

Upang makatipid ng oras maaari mo itong idagdag sa iyong ~ /.bashrc file:

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

..na nagpapahintulot sa iyo na simpleng i-type ang "nodemcu" bilang isang alias para sa utos na iyon.

Kung ang lahat ay na-configure nang tama, ang iyong LED strip ay dapat na ilaw up berde, at sa serial dapat mong makita ang WiFi na kumonekta, kumuha ng isang IP address, kumonekta sa MQTT, at mga mensahe na ang data ng temperatura ay itinutulak.

Nakakonekta sa MyWiFiSSID, magsimula ang channel 1dhcp client… 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 = 5xQueueReceiveuettt:: (Re) kumokonekta sa MQTT server test.mosquitto.org… xQueueReceive + 25.50xQueueSend ok taposSend MQTT connect… MQTTv311donexQueueReceive +25.56 xQueueSend ok

Hakbang 5: Nakikipag-ugnay

Ipagpalagay na ang iyong aparato ay nakakonekta sa WiFi at matagumpay na matagumpay ang MQTT broker, magpapadala ka at makatanggap ng data mula sa NodeMCU gamit ang MQTT. Kung hindi mo pa nagagawa, i-install ang mosquitto client package:

sudo apt-get install Mosquitto-kliyente

Dapat mo na ngayong magamit ang mga programa ng mosquitto_pub at mosquitto_sub mula sa iyong shell.

Tumatanggap ng mga update sa temperatura

Upang makatanggap ng data ng temperatura nais naming gamitin ang utos ng mosquitto_sub upang mag-subscribe sa paksang pinaglathala ng NodeMCU.

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

Dapat mong makita ang data ng temperatura (sa Celsius), pagdating sa terminal.

+25.87+25.93+25.68…

Ang pagtatakda ng kulay ng LED strip mula sa malayo

Ginagamit ang isang simpleng format ng mensahe upang maipadala ang mga halaga ng RGB sa NodeMCU sa paglipas ng MQTT. Ganito ang format ng utos:

r: RRRg: GGGb: BBB ~

Kung saan tumutugma ang RRR, GGG, BBB sa mga halagang RGB (0-255) ng kulay na nais mong ipadala. Upang maipadala ang aming utos, gagamitin namin ang utos na mosquitto_pub. Narito ang ilang mga halimbawa:

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

Kung nais mong maging malikhain, maghanap ng tagapili ng kulay sa online na tulad nito, at i-edit ang utos sa anumang halagang RGB na iyong pipiliin.

Tingnan mo

Ang mga paksa sa proyektong ito ay nakatakda sa / cpe439 / rgb at / cpe439 / temp sa isang pampublikong broker ng MQTT, na nangangahulugang walang pumipigil sa ibang tao na mai-publish o mag-subscribe sa parehong mga paksa tulad mo. Para sa pagsubok sa mga bagay, ang paggamit ng isang pampublikong broker ay mabuti, ngunit para sa mas seryosong mga proyekto gugustuhin mong kumonekta sa isang broker na may proteksyon ng password, o patakbuhin ang iyong sariling broker sa server.

Hakbang 6: Mga Detalye ng Pagpapatupad

Onewire

Ang ESP8266 ay may lamang 1 core, napakahaba, pagharang sa mga gawain tulad ng paghihintay ng 750ms para sa sensor ng temperatura na magsagawa ng pagsukat ng temperatura ay karaniwang magreresulta sa hindi gumana nang maayos ang WiFi, at marahil kahit isang pag-crash. Sa FreeRTOS paradigm, tatawagan mo ang vTaskDelay () upang hawakan ang mga mahabang paghihintay na ito, ngunit marami ring mas maikli na paghihintay na kinakailangan sa pagitan ng mga pagbasa at pagsusulat na mas maikli kaysa sa sistemang FreeRTOS na tick, at sa gayon ay hindi maiiwasan ng vTaskDelay (). Upang maiikot din ang mga ito, ang driver ng onewire sa proyektong ito ay isinulat upang patakbuhin ang isang state-machine na hinihimok ng timer ng hardware ng ESP8266, na maaaring magpalitaw ng mga kaganapan na kasing baba ng bawat 10 micro-segundo, na mangyayari na ang pinakamaikling kinakailangang oras sa pagitan ng onewire na pagbabasa / pagsulat ng mga operasyon. Karamihan sa iba pang mga pagpapatupad ay gumagamit ng isang tawag sa pag-block upang delay_us () o katulad upang hawakan ito, ngunit kung patuloy kang kumukuha ng mga pag-update sa temperatura, ang lahat ng mga pagkaantala ay nagsisimulang magdagdag, na nagreresulta sa isang hindi gaanong tumutugon na application. Ang mapagkukunan para sa bahaging ito ng code ay matatagpuan sa extra / onewire folder.

WS2812B

Ang ESP8266 ay walang anumang karaniwang mga pagpipilian sa hardware para sa PWM na sapat na mabilis upang himukin ang mga LED strips sa 800KHz. Upang maiikot ito, ginagamit ng proyektong ito ang pin ng SPI MOSI upang himukin ang mga LED. Sa pamamagitan ng pag-aayos ng rate ng orasan ng SPI, at pagbabago ng SPI payload sa paligid, maaari mong makamit ang medyo maaasahang kontrol ng bawat indibidwal na LED. Ang pamamaraang ito ay hindi walang mga kapintasan- para sa isa ang mga LED ay dapat na pinalakas ng isang mapagkukunan ng 5V at isang antas ng shifter ay dapat idagdag sa output ng SPI pin. Ngunit gagana ang 3.3V. Pangalawa, may mga glitches na nagaganap dahil sa hindi perpektong tiyempo gamit ang pamamaraang SPI. At pangatlo ngayon ay hindi mo magagamit ang SPI para sa iba pa. Ang karagdagang background sa pamamaraang ito ay matatagpuan dito, at ang mapagkukunan para sa bahaging ito ng code ay matatagpuan sa mga extra / ws2812 folder.

Ang isang mas maaasahang pamamaraan para sa pagmamaneho ng mga LED strip ay ang paggamit ng mga i2. Gayunpaman ang pamamaraang ito ay mayroong maraming mga hack na tukoy sa chip, kaya't ang SPI ay tila isang mas mahusay na pagpipilian bilang isang ehersisyo sa pag-aaral.

Inirerekumendang: