Turinys:

„WiFi“LED juostelė + temperatūros jutiklis su ESP8266: 6 žingsniai
„WiFi“LED juostelė + temperatūros jutiklis su ESP8266: 6 žingsniai

Video: „WiFi“LED juostelė + temperatūros jutiklis su ESP8266: 6 žingsniai

Video: „WiFi“LED juostelė + temperatūros jutiklis su ESP8266: 6 žingsniai
Video: Программирование МК ESP8266. Урок 13. Программный таймер 2024, Liepa
Anonim
„WiFi“LED juostelė + temperatūros jutiklis su ESP8266
„WiFi“LED juostelė + temperatūros jutiklis su ESP8266

Šioje pamokoje aprašomi žingsniai, kaip nustatyti ESP8266 ir priversti jį kalbėti tiek su temperatūros jutikliu, tiek su LED juosta, taip pat galima priimti įvestį ir siųsti išvestį naudojant MQTT per „WiFi“. Projektas buvo sukurtas kursui, kuris vyko 2016 m. Rudenį „Cal Poly San Luis Obispo“- CPE 439: realaus laiko įterptosios sistemos. Bendras tikslas buvo pademonstruoti, kaip lengva sukurti prie interneto prijungtą „daiktą“naudojant pigią aparatūrą.

Reikalingos medžiagos/įranga:

  • „NodeMCU ESP8266 dev“plokštė
  • WS2812B LED juostelė
  • MAX31820 Temperatūros jutiklis
  • Bandomoji Lenta
  • 4,7 K omų rezistorius
  • 220 omų rezistorius
  • jungiamieji laidai
  • mikro-usb kabelis
  • Kompiuteris (arba VM), kuriame veikia „Linux“(pvz., „Ubuntu“)

Prielaidos/prielaidos:

  • patirties naudojant komandinės eilutės įrankius ir diegiant paketus „debian“pagrindu veikiančiame distro
  • pagrindinis „Makefile“sintaksės supratimas
  • jungiamieji laidai

1 veiksmas: kūrimo aplinkos kūrimas

Norėdami sukurti projektą, kompiuteryje turėsite įdiegti esp-open-sdk. Sekite nuorodą ir perskaitykite kūrimo instrukcijas. Trumpai tariant, jūs atliksite keletą sudo apt-get komandų, kad įdiegtumėte priklausomybes, git klonas-rekursyvus, kad klonuotumėte/atsisiųstumėte esp-open-sdk, ir galiausiai atlikite komandą make sukurti esp-open-sdk.

Stebėk mane

2 veiksmas: gaukite šaltinio kodą, sukonfigūruokite ir sukurkite

Dabar, kai esp-open-sdk yra sukurtas, klonuokite projekto saugyklą.

git klonas

Pakeiskite į projekto katalogą, sukurkite.local aplanką ir nukopijuokite pavyzdinius nustatymus.

cd esp-rtos testai

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

Dabar bet kuriuo teksto redaktoriumi atidarykite.local/settings.mk ir pakeiskite šiuos nustatymus:

  • OPENSDK_ROOT: absoliutus esp-open-sdk vietos, kurią sukūrėte atlikdami 1 veiksmą, kelias
  • WIFI_SSID: jūsų „WiFi“tinklo SSID
  • WIFI_PASS: „WiFi“tinklo slaptažodis
  • PIXEL_COUNT: WS2812B LED juostos pikselių skaičius

Pastaba: kadangi šiame projekte šviesos diodams valdyti naudojamas SPI, o jiems tiekti - „NodeMCU 3.3v“, greičiausiai negalėsite įvesti daugiau nei ~ 60 šviesos diodų.

Pastaba: kitų nustatymų keisti nereikia, tačiau, jei pageidaujama, juos galima pakeisti. Rekomenduojama laikytis užduočių prioritetų tvarkos. Kuo mažesnis prioriteto skaičius, tuo mažesnis užduoties prioritetas.

Dabar kurkite projektą:

padaryti -C pavyzdžius/cpe439

Jei viskas teisingai nustatyta, ji turėtų pradėti kompiliuoti. Pabaigoje turėtumėte pamatyti:

Sėkmingai sukurta „firmware/cpe439.bin“

Stebėk mane

3 veiksmas: prijunkite aparatūros komponentus

Prijunkite aparatūros komponentus
Prijunkite aparatūros komponentus

Dabar, kai kodas yra sudarytas, atėjo laikas prijungti mūsų išorinius įrenginius.

Pirmiausia priklijuokite „NodeMCU“prie duonos lentos, tada naudokite jungiamuosius laidus, kad sujungtumėte, kaip parodyta diagramoje.

Pora dalykų, kuriuos reikia žinoti:

  1. Svarbu: WS2812B duomenų linija nėra dvikryptė. Jei atidžiai pažvelgsite į žymes juostos šviesos diodų pusėje, turėtumėte pamatyti mažas rodykles, nukreiptas viena kryptimi. „NodeMCU“D7 išvestis turi būti nukreipta į WS2812B taip pat, kaip ir krypties žymeklis, kurį galite pamatyti diagramoje, jei atidžiai pažvelgsite.
  2. Priklausomai nuo to, kokios jungtys yra jūsų „WS2812B“, gali tekti atlikti tam tikrus pakeitimus, kad jos būtų saugiai prijungtos prie duonos lentos. Taip pat galite naudoti aligatoriaus spaustukus, kad prijungtumėte juos prie maitinimo plokštės jungiamųjų kabelių.
  3. MAX31820 kaiščiai turi mažesnį žingsnį ir yra plonesni nei standartiniai 0,1 colio/2,54 mm džemperiai, todėl juos sunku prijungti. Vienas iš būdų yra naudoti trumpiklius nuo moterų iki vyrų, nuimti plastikinį dėklą iš patelės pusės, tada kai kuriomis replėmis sandariai užveržkite megztinio galus aplink mažesnius MAX31820 kaiščius.

Prieš įjungdami „NodeMCU“dar kartą patikrinkite jungtis, kad nepažeistumėte komponentų.

4 žingsnis: „Flash“ir „Run“

Mirksi

Prijungę visą aparatūrą, prijunkite „NodeMCU“ir mirksėkite naudodami šią komandą:

padaryti „flash“pavyzdžius/cpe439 ESPPORT =/dev/ttyUSB0

/dev/ttyUSB0 yra serijinis komas, kuriame turėtų būti rodomas „NodeMCU“. Jei prijungti kiti serijiniai įrenginiai, jis gali būti rodomas kaip /dev /ttyUSB1 arba kitas numeris. Norėdami patikrinti, galite paleisti šią komandą du kartus, vieną kartą atjungę „NodeMCU“ir vieną kartą prijungę, ir palyginkite skirtumą:

ls /dev /ttyUSB*

Kita problema, su kuria galite susidurti, yra leidimo pasiekti įrenginį neturėjimas. Du būdai tai išspręsti:

  1. Pridėkite savo vartotoją prie skambinimo grupės:

    sudo adduser $ (whoami) dialout

  2. chmod arba pasirinkite įrenginį:

sudo chmod 666 /dev /ttyUSB0 sudo chown $ (whoami): $ (whoami) /dev /ttyUSB0Pirmasis metodas yra pageidautinas, nes tai yra nuolatinis sprendimas.

Bėgimas

Sėkmingai paleidus „flash“komandą, įrenginys iškart paleidžiamas ir pradeda vykdyti surinktą kodą. Bet kuriuo metu po mirksėjimo galite paleisti šią komandą, norėdami žiūrėti serijinę išvestį:

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

Norėdami sutaupyti laiko, galite jį pridėti prie failo ~/.bashrc:

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

..kuris leidžia tiesiog įvesti „nodemcu“kaip tos komandos slapyvardį.

Jei viskas sukonfigūruota teisingai, jūsų šviesos diodų juostelė turėtų užsidegti žalia spalva, o serijoje turėtumėte matyti „WiFi“ryšį, gauti IP adresą, prisijungti prie MQTT ir gauti pranešimus apie temperatūros duomenis.

prijungtas prie „MyWiFiSSID“, kanalo 1dhcp klientas pradėti… 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 = 5xQueueQiue: (Iš naujo) prisijungiama prie MQTT serverio test.mosquitto.org… xQueueRecept +25.50xQueueSend gerai padarytaSiųsti MQTT connect… MQTTv311donexQueueRecept +25.56 xQueueSend

5 žingsnis: sąveika

Darant prielaidą, kad jūsų įrenginys sėkmingai prijungtas prie „WiFi“ir MQTT brokerio, galėsite siųsti ir gauti duomenis iš „NodeMCU“naudodami MQTT. Jei to dar nepadarėte, įdiekite „Mosquitto“klientų paketą:

sudo apt-get install mosquitto-customers

Dabar turėtumėte turėti galimybę naudoti „mosquitto_pub“ir „mosquitto_sub“programas iš savo apvalkalo.

Gaunami temperatūros atnaujinimai

Norėdami gauti temperatūros duomenis, norime naudoti komandą mosquitto_sub, norėdami užsiprenumeruoti temą, kurią skelbia „NodeMCU“.

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

Atvykę į terminalą turėtumėte matyti temperatūros duomenis (Celsijaus laipsniais).

+25.87+25.93+25.68…

LED juostos spalvos nustatymas nuotoliniu būdu

Paprastas pranešimo formatas naudojamas RGB reikšmėms siųsti į „NodeMCU“per MQTT. Komandos formatas atrodo taip:

r: RRRg: GGGb: BBB ~

Kur RRR, GGG, BBB atitinka norimos siųsti spalvos RGB reikšmes (0–255). Norėdami išsiųsti komandą, naudosime komandą „mosquitto_pub“. Štai keletas pavyzdžių:

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 ~ ' # mėlyna

Jei norite būti kūrybingi, susiraskite internete spalvų rinkiklį, kaip šis, ir redaguokite komandą naudodami bet kurią pasirinktą RGB reikšmę.

Saugokis

Šio projekto temos yra nustatytos į /cpe439 /rgb ir /cpe439 /temp viešajame MQTT brokeryje, o tai reiškia, kad niekas netrukdo kitam skelbti ar užsiprenumeruoti tų pačių temų kaip jūs. Jei norite išbandyti dalykus, gerai naudoti viešąjį tarpininką, tačiau rimtesniems projektams norėsite prisijungti prie brokerio su slaptažodžio apsauga arba paleisti savo tarpininką serveryje.

6 veiksmas: išsami diegimo informacija

Onewire

ESP8266 turi tik 1 branduolį, todėl ilgai trunkančios blokavimo užduotys, tokios kaip laukimas 750 ms, kol temperatūros jutiklis atliks temperatūros matavimą, paprastai „WiFi“neveiks gerai, o gal net ir suges. Pagal „FreeRTOS“paradigmą skambinate „vTaskDelay“(), kad galėtumėte tvarkyti šiuos ilgus laukimus, tačiau taip pat reikia daug trumpesnių laukimų tarp skaitymų ir rašymų, kurie yra trumpesni už „FreeRTOS“sistemos varnelę, todėl jų negalima išvengti naudojant „vTaskDelay“(). Kad tai taip pat būtų išvengta, šio projekto „onewire“tvarkyklė buvo parašyta, kad paleistų būsenos mašiną, kurią varo ESP8266 aparatūros laikmatis, kuris gali sukelti įvykius net kas 10 mikrosekundžių, o tai yra trumpiausia reikiamas laikas tarp vieno laido skaitymo/rašymo operacijų. Dauguma kitų diegimų naudoja blokuojantį skambutį į delay_us () arba panašų, kad tai būtų galima išspręsti, tačiau jei nuolat atnaujinate temperatūrą, visi šie vėlavimai pradeda kauptis, todėl programa reaguoja mažiau. Šios kodo dalies šaltinis yra aplanke „extras/onewire“.

WS2812B

ESP8266 neturi jokių standartinių aparatinės įrangos parinkčių, skirtų PWM pakankamai greitai, kad būtų galima valdyti 800KHz šviesos diodų juosteles. Norėdami tai išspręsti, šis projektas naudoja SPI MOSI kaištį šviesos diodams valdyti. Sureguliuodami SPI laikrodžio dažnį ir pakeisdami SPI naudingąją apkrovą, galite pasiekti gana patikimą kiekvieno atskiro šviesos diodo valdymą. Šis metodas nėra be trūkumų- vienam šviesos diodai turėtų būti maitinami 5 V šaltiniu, o prie SPI kaiščio išvesties reikia pridėti lygio perjungiklį. Bet 3.3V veikia. Antra, yra trūkumų, atsirandančių dėl netobulo laiko naudojant SPI metodą. Ir trečia, dabar jūs negalite naudoti SPI niekam kitam. Daugiau informacijos apie šį metodą rasite čia, o šios kodo dalies šaltinis yra aplanke „extras/ws2812“.

Patikimesnis LED juostų varymo būdas yra naudoti „i2s“. Tačiau šis metodas turi daug mikroschemų specifinių įsilaužimų, todėl SPI atrodė geresnis pasirinkimas kaip mokymosi pratimas.

Rekomenduojamas: