Përmbajtje:

WiFi LED Rrip + Sensor Temperature Me ESP8266: 6 Hapa
WiFi LED Rrip + Sensor Temperature Me ESP8266: 6 Hapa

Video: WiFi LED Rrip + Sensor Temperature Me ESP8266: 6 Hapa

Video: WiFi LED Rrip + Sensor Temperature Me ESP8266: 6 Hapa
Video: Погодная станция на ESP8266, MQTT и Epaper дисплее 2024, Nëntor
Anonim
WiFi LED Rrip + Sensor Temperature Me ESP8266
WiFi LED Rrip + Sensor Temperature Me ESP8266

Ky tutorial përshkruan hapat për të ngritur një ESP8266 dhe për ta bërë atë të flasë si me një sensor të temperaturës ashtu edhe me shiritin LED, ndërsa gjithashtu të jetë në gjendje të marrë hyrje dhe të dërgojë dalje me MQTT përmes WiFi. Projekti u krijua për një kurs të marrë në Cal Poly San Luis Obispo në Vjeshtë 2016- CPE 439: Sistemet e Integruara në Kohë Reale. Qëllimi i përgjithshëm ishte të demonstronte lehtësinë e krijimit të një "gjëje" të lidhur me internetin me pajisje të lira.

Furnizimet/Pajisjet e kërkuara:

  • NodeMCU ESP8266 bordi dev
  • Shirit LED WS2812B
  • MAX31820 Sensori i temperaturës
  • Breadboard
  • Rezistencë 4.7K Ohm
  • Rezistencë 220 ohm
  • telat e kërcyesit
  • kabllo mikro-usb
  • PC (ose VM) që punon me Linux (p.sh. Ubuntu)

Supozimet/Parakushtet:

  • përvojë me përdorimin e mjeteve të linjës komanduese dhe instalimin e paketave në një shpërndarje me bazë debian
  • të kuptuarit bazë të sintaksës Makefile
  • telat lidhës

Hapi 1: Krijimi i një mjedisi të ndërtuar

Për të ndërtuar projektin, do t'ju duhet esp-open-sdk i instaluar në kompjuterin tuaj. Ndiqni lidhjen dhe lexoni udhëzimet e krijimit. Shkurtimisht do të bëni disa komanda sudo apt-get për të instaluar varësitë, një klon git-rekursiv për të klonuar/shkarkuar esp-open-sdk, dhe së fundi një komandë make për të ndërtuar esp-open-sdk.

Me shiko

Hapi 2: Merrni Kodin Burimor, Konfiguroni dhe Ndërtoni

Tani që esp-open-sdk është ndërtuar, klononi depon e projektit.

git klon

Ndryshoni në drejtorinë e projektit, krijoni një dosje.local dhe kopjoni cilësimet e shembullit.

cd esp-rtos-teste

mkdir -p. cilësimet e cp lokale. shembull.mk. lokal/settings.mk

Tani hapni.local/settings.mk me çdo redaktues teksti dhe ndryshoni cilësimet e mëposhtme:

  • OPENSDK_ROOT: Rruga absolute për vendndodhjen e esp-open-sdk që keni ndërtuar në hapin 1
  • WIFI_SSID: SSID -i i rrjetit tuaj WiFi
  • WIFI_PASS: Fjalëkalimi i rrjetit tuaj WiFi
  • PIXEL_COUNT: Numri i pikselëve në shiritin tuaj LED WS2812B

Shënim: Meqenëse ky projekt përdor SPI për të drejtuar LED -të dhe përdor NodeMCU 3.3v për t'i furnizuar ato, ndoshta nuk do të jeni në gjendje të drejtoni më shumë se LED 60 LED.

Shënim: Cilësimet e tjera nuk kanë nevojë të ndryshohen, por mund të ndryshojnë sipas dëshirës. Rekomandohet të mbani rendin e përparësive të detyrës. Sa më i ulët numri i përparësisë, aq më i ulët është përparësia e detyrës.

Tani ndërtoni projektin:

bëj -C shembuj/cpe439

Nëse gjithçka është vendosur si duhet, duhet të fillojë përpilimin. Në fund duhet të shihni:

Krijuar me sukses 'firmware/cpe439.bin'

Me shiko

Hapi 3: Lidhni Komponentët e Hardware

Lidhni Komponentët e Hardware
Lidhni Komponentët e Hardware

Tani që kodi është përpiluar, është koha për të lidhur pajisjet tona periferike.

Së pari, ngjiteni NodeMCU në tabelën e bukës, pastaj përdorni telat e kërcyesit për të bërë lidhjet siç tregohet në diagram.

Disa gjëra që duhet të keni parasysh:

  1. E rëndësishme: Linja e të dhënave WS2812B nuk është dy-drejtimëshe. Nëse shikoni nga afër shenjat në anën LED të shiritit, duhet të shihni shigjeta të vogla që tregojnë një drejtim. Dalja nga D7 e NodeMCU duhet të drejtohet në WS2812B në të njëjtën mënyrë si shënuesi i drejtimit, të cilin mund ta shihni në diagram nëse shikoni nga afër.
  2. Në varësi të llojit të lidhësve që vjen WS2812B juaj, mund t'ju duhet të bëni disa modifikime për t'i bërë ato të lidhen në mënyrë të sigurtë në tabelën e bukës. Ju gjithashtu mund të përdorni kapësa aligatori për t'i lidhur ato me kabllot e kërcyesit të aftë për bukë.
  3. Kunjat MAX31820 kanë një lartësi më të vogël dhe janë më të hollë se kërcyesit standard 0.1 "/2.54 mm, duke i bërë ato të ndërlikuara për t'u lidhur. Një mënyrë për këtë është përdorimi i telave të bluzave nga femra në meshkuj, heqja e kutisë plastike nga ana e femrës, pastaj përdorni disa pincë për të shtypur skajet e kërcyesit femër fort rreth kunjave më të vegjël MAX31820.

Kontrolloni dy herë lidhjet para se të ndizni NodeMCU në mënyrë që të mos dëmtoni përbërësit.

Hapi 4: Flash dhe Run

Ndezje

Me të gjithë pajisjet e lidhura, futni NodeMCU -në tuaj dhe ndizni me komandën e mëposhtme:

bëni flash -C shembuj/cpe439 ESPPORT =/dev/ttyUSB0

/dev/ttyUSB0 është komi serik nën të cilin NodeMCU duhet të shfaqet. Nëse keni pajisje të tjera serike të lidhura, mund të shfaqet si /dev /ttyUSB1 ose ndonjë numër tjetër. Për të kontrolluar, mund ta ekzekutoni këtë komandë dy herë, një herë me NodeMCU të shkyçur, dhe një herë me të në prizë, dhe krahasoni ndryshimin:

ls /dev /ttyUSB*

Një çështje tjetër që mund të hasni është të mos keni leje për të hyrë në pajisje. Dy mënyra për ta rregulluar këtë janë:

  1. Shtoni përdoruesin tuaj në grupin e dialout:

    sudo adduser $ (whoami) dialout

  2. chmod ose chown pajisjen:

sudo chmod 666 /dev /ttyUSB0 sudo chown $ (whoami): $ (whoami) /dev /ttyUSB0Metoda e parë preferohet pasi është një zgjidhje e përhershme.

Duke vrapuar

Pasi të keni ekzekutuar me sukses komandën flash, pajisja do të fillojë menjëherë dhe do të fillojë të ekzekutojë kodin e përpiluar. Në çdo moment pas ndezjes mund të ekzekutoni komandën e mëposhtme për të parë daljen serike:

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

Për të kursyer kohë, mund ta shtoni këtë në skedarin tuaj ~/.bashrc:

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

..që ju lejon të shkruani thjesht "nodemcu" si alias për atë komandë.

Nëse gjithçka është konfiguruar si duhet, shiriti juaj LED duhet të ndizet jeshil dhe në serial duhet të shihni lidhjen WiFi, marrjen e një adrese IP, lidhjen me MQTT dhe mesazhet që të dhënat e temperaturës po nxirren jashtë.

i lidhur me MyWiFiSSID, fillimi i klientit të kanalit 1dhcp… 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_tasktttw: (Ri) lidhja me serverin MQTT test.mosquitto.org… xQueueReceive +25.50xQueueDërgo në rregullDërgo MQTT lidh… MQTTv311donexQueueReceive +25.56 xQueueSend në rregull

Hapi 5: Ndërveprimi

Duke supozuar se pajisja juaj është lidhur me WiFi dhe ndërmjetësi MQTT me sukses, do të jeni në gjendje të dërgoni dhe merrni të dhëna nga NodeMCU me MQTT. Nëse nuk e keni bërë ende, instaloni paketën e klientëve të mushkonjave:

sudo apt-get install mushkonja-klientë

Tani duhet të jeni në gjendje të përdorni programet mosquitto_pub dhe mosquitto_sub nga guaska juaj.

Marrja e përditësimeve të temperaturës

Për të marrë të dhënat e temperaturës, ne do të duam të përdorim komandën mosquitto_sub për t'u abonuar në temën të cilës NodeMCU po i publikon.

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

Ju duhet të shihni të dhënat e temperaturës (në Celsius), që mbërrijnë në terminal.

+25.87+25.93+25.68…

Vendosja e ngjyrës së shiritit LED nga distanca

Një format i thjeshtë mesazhi përdoret për të dërguar vlera RGB në NodeMCU mbi MQTT. Formati i komandës duket kështu:

r: RRRg: GGGb: BBB

Aty ku RRR, GGG, BBB korrespondojnë me vlerat RGB (0-255) të ngjyrës që dëshironi të dërgoni. Për të dërguar komandën tonë, ne do të përdorim komandën mosquitto_pub. Ketu jane disa shembuj:

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 # ' # blu

Nëse doni të bëheni krijues, gjeni një zgjedhës ngjyrash në internet si ky dhe modifikoni komandën me çfarëdo vlere RGB që zgjidhni.

Kujdes

Temat në këtë projekt janë vendosur në /cpe439 /rgb dhe /cpe439 /temp në një ndërmjetës publik MQTT, që do të thotë se nuk ka asgjë që pengon dikë tjetër të botojë ose të regjistrohet në të njëjtat tema si ju. Për të provuar gjërat, përdorimi i një ndërmjetësi publik është mirë, por për projekte më serioze do të dëshironi të lidheni me një ndërmjetës me mbrojtje me fjalëkalim, ose të drejtoni ndërmjetësin tuaj në server.

Hapi 6: Detajet e zbatimit

Njëra -tjetra

ESP8266 ka vetëm 1 bërthamë, aq gjatë, duke bllokuar detyra të tilla si të presësh 750ms që sensori i temperaturës të kryejë një matje të temperaturës normalisht do të rezultonte që WiFi të mos funksiononte mirë, dhe ndoshta edhe një përplasje. Në paradigmën FreeRTOS, ju thërrisni vTaskDelay () për të trajtuar këto pritje të gjata, por ka edhe shumë pritje më të shkurtra që kërkohen midis leximeve dhe shkrimeve që janë më të shkurtra se shënimi i sistemit FreeRTOS, dhe kështu nuk mund të shmangen me vTaskDelay (). Për t'i kapërcyer këto, drejtuesi i njëtrajtshëm në këtë projekt u shkrua për të ikur nga një makinë shtetërore që drejtohet nga kohëmatësi harduerik i ESP8266, i cili mund të shkaktojë ngjarje aq të ulëta sa çdo 10 mikro-sekonda, që ndodh të jetë më i shkurtër. koha e kërkuar midis operacioneve të leximit/shkrimit të një teli. Shumica e zbatimeve të tjera përdorin një thirrje bllokuese për të delay_us () ose të ngjashme për ta trajtuar këtë, por nëse jeni duke marrë vazhdimisht përditësime të temperaturës, të gjitha ato vonesa fillojnë të shtohen, duke rezultuar në një aplikim më pak të përgjegjshëm. Burimi për këtë pjesë të kodit gjendet në dosjen shtesë/onewire.

GJ1812B

ESP8266 nuk ka asnjë mundësi standarde harduerike për PWM aq shpejt sa të drejtojë shirita LED në 800KHz. Për të shmangur këtë, ky projekt përdor kunjin SPI MOSI për të drejtuar LED -të. Duke rregulluar normën e orës së SPI dhe duke ndryshuar ngarkesën e SPI përreth, mund të arrini një kontroll mjaft të besueshëm të secilës LED individuale. Kjo metodë nuk është pa të metat e saj- për njërën LED dritat duhet të mundësohen me një burim 5V dhe një ndërrues niveli duhet shtuar në daljen e kunjit SPI. Por 3.3V funksionon. Së dyti, ka defekte që ndodhin për shkak të kohës së papërsosur duke përdorur metodën SPI. Dhe e treta tani nuk mund të përdorni SPI për asgjë tjetër. Sfond shtesë për këtë metodë mund të gjenden këtu, dhe burimi për këtë pjesë të kodit gjendet në dosjen extras/ws2812.

Një metodë më e besueshme për drejtimin e shiritave LED është përdorimi i2. Sidoqoftë, kjo metodë ka shumë hake specifike për çipet, kështu që SPI dukej të ishte një zgjedhje më e mirë si një ushtrim mësimi.

Recommended: