Satura rādītājs:

WiFi LED sloksne + temperatūras sensors ar ESP8266: 6 soļi
WiFi LED sloksne + temperatūras sensors ar ESP8266: 6 soļi

Video: WiFi LED sloksne + temperatūras sensors ar ESP8266: 6 soļi

Video: WiFi LED sloksne + temperatūras sensors ar ESP8266: 6 soļi
Video: Введение в плату разработки NodeMCU ESP8266 WiFi с примером HTTP-клиента 2024, Jūlijs
Anonim
WiFi LED sloksne + temperatūras sensors ar ESP8266
WiFi LED sloksne + temperatūras sensors ar ESP8266

Šajā apmācībā ir aprakstītas darbības, kā iestatīt ESP8266 un panākt, lai tas sarunātos gan ar temperatūras sensoru, gan ar LED sloksni, vienlaikus arī saņemot un nosūtot izeju, izmantojot MQTT, izmantojot WiFi. Projekts tika izstrādāts kursam, kas tika apgūts Cal Poly San Luis Obispo 2016. gada rudenī- CPE 439: reālā laika iegultās sistēmas. Vispārējais mērķis bija parādīt, cik viegli izveidot ar internetu savienotu "lietu" ar lētu aparatūru.

Nepieciešamie piederumi/aprīkojums:

  • NodeMCU ESP8266 dev plate
  • WS2812B LED sloksne
  • MAX31820 Temperatūras sensors
  • Maizes dēlis
  • 4,7 K omu rezistors
  • 220 omu rezistors
  • džemperu vadi
  • mikro-usb kabelis
  • Dators (vai VM), kurā darbojas Linux (piemēram, Ubuntu)

Pieņēmumi/priekšnoteikumi:

  • pieredze komandrindas rīku izmantošanā un pakotņu instalēšanā izplatīšanā, kuras pamatā ir debian
  • pamatzināšanas par Makefile sintaksi
  • savienojošie vadi

1. darbība: būvniecības vides izveide

Lai izveidotu projektu, jūsu datorā būs jāinstalē esp-open-sdk. Izpildiet saiti un izlasiet veidošanas instrukcijas. Īsāk sakot, jūs veiksit dažas sudo apt-get komandas, lai instalētu atkarības, git klons-rekursīvs, lai klonētu/lejupielādētu esp-open-sdk, un visbeidzot-komanda make, lai izveidotu esp-open-sdk.

Skaties uz mani

2. darbība: iegūstiet avota kodu, konfigurējiet un veidojiet

Tagad, kad ir izveidots esp-open-sdk, klonējiet projekta krātuvi.

git klons

Pārslēdzieties uz projektu direktoriju, izveidojiet.local mapi un nokopējiet parauga iestatījumus.

cd esp-rtos-testi

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

Tagad atveriet.local/settings.mk ar jebkuru teksta redaktoru un mainiet šādus iestatījumus:

  • OPENSDK_ROOT: 1. solī izveidotā esp-open-sdk atrašanās vietas absolūtais ceļš
  • WIFI_SSID: jūsu WiFi tīkla SSID
  • WIFI_PASS: jūsu WiFi tīkla parole
  • PIXEL_COUNT: pikseļu skaits jūsu WS2812B LED joslā

Piezīme. Tā kā šis projekts izmanto SPI, lai vadītu gaismas diodes, un to piegādei izmanto NodeMCU 3.3v, jūs, iespējams, nevarēsit vadīt vairāk nekā ~ 60 gaismas diodes.

Piezīme. Pārējie iestatījumi nav jāmaina, bet, ja vēlaties, tos var mainīt. Ieteicams ievērot uzdevumu prioritāšu secību. Jo mazāks prioritātes numurs, jo zemāka ir uzdevuma prioritāte.

Tagad izveidojiet projektu:

izveidojiet -C piemērus/cpe439

Ja viss ir pareizi iestatīts, tas jāsāk apkopot. Beigās jums vajadzētu redzēt:

Veiksmīgi izveidota programmaparatūra/cpe439.bin

Skaties uz mani

3. darbība: pievienojiet aparatūras komponentus

Pievienojiet aparatūras komponentus
Pievienojiet aparatūras komponentus

Tagad, kad kods ir apkopots, ir pienācis laiks savienot mūsu perifērijas ierīces.

Vispirms pielīmējiet NodeMCU uz maizes dēļa, pēc tam izmantojiet savienojuma vadus, lai izveidotu savienojumus, kā parādīts diagrammā.

Pāris lietas, kas jāapzinās:

  1. Svarīgi: WS2812B datu līnija nav divvirzienu. Ja uzmanīgi aplūkojat marķējumu sloksnes LED pusē, jums vajadzētu redzēt mazas bultiņas, kas norāda vienā virzienā. NodeMCU izvadam no D7 jābūt virzītam uz WS2812B tāpat kā virziena marķierim, ko jūs varat redzēt diagrammā, ja paskatās cieši.
  2. Atkarībā no WS2812B savienotāju veida, iespējams, būs jāveic dažas izmaiņas, lai tie droši savienotos ar maizes dēli. Varat arī izmantot aligatora skavas, lai tās savienotu ar maizes dēļa džemperkabeļiem.
  3. MAX31820 tapām ir mazāks solis un tie ir plānāki nekā standarta 0,1 "/2,54 mm džemperi, tāpēc tos ir grūti savienot. Viens veids, kā to novērst, ir izmantot džemperu vadus no vīriešiem un noņemt plastmasas korpusu no sievietes puses, tad izmantojiet dažas knaibles, lai cieši saspiestu džempera galus ap mazākajām MAX31820 tapām.

Pirms NodeMCU ieslēgšanas vēlreiz pārbaudiet savienojumus, lai nesabojātu komponentus.

4. darbība: zibspuldze un palaišana

Mirgo

Kad ir pievienota visa aparatūra, pievienojiet NodeMCU un mirgo ar šādu komandu:

izveidojiet flash -C piemērus/cpe439 ESPPORT =/dev/ttyUSB0

/dev/ttyUSB0 ir sērijas komats, kurā jānorāda NodeMCU. Ja jums ir pievienotas citas sērijas ierīces, tas var parādīties kā /dev /ttyUSB1 vai kāds cits numurs. Lai pārbaudītu, jūs varat palaist šo komandu divas reizes, vienu reizi, kad NodeMCU ir atvienots no elektrotīkla, un vienu reizi, kad tas ir pievienots, un salīdziniet atšķirību:

ls /dev /ttyUSB*

Vēl viena problēma, ar kuru varat saskarties, nav atļaujas piekļūt ierīcei. Ir divi veidi, kā to novērst:

  1. Pievienojiet savu lietotāju iezvanes grupai:

    sudo adduser $ (whoami) izsaukums

  2. chmod vai nosauciet ierīci:

sudo chmod 666 /dev /ttyUSB0 sudo chown $ (whoami): $ (whoami) /dev /ttyUSB0Priekšroka tiek dota pirmajai metodei, jo tas ir pastāvīgs risinājums.

Skriešana

Pēc zibspuldzes komandas veiksmīgas palaišanas ierīce nekavējoties tiks sāknēta un sāks darbināt apkopoto kodu. Jebkurā brīdī pēc mirgošanas varat palaist šādu komandu, lai skatītos sērijas izvadi:

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

Lai ietaupītu laiku, varat to pievienot savam ~/.bashrc failam:

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

.. kas ļauj vienkārši ierakstīt "nodemcu" kā šīs komandas aizstājvārdu.

Ja viss ir pareizi konfigurēts, jūsu LED sloksnei vajadzētu iedegties zaļā krāsā, un sērijveidā jums vajadzētu redzēt WiFi savienojumu, iegūt IP adresi, izveidot savienojumu ar MQTT un ziņojumus, ka temperatūras dati tiek izstumti.

savienots ar MyWiFiSSID, kanāla 1dhcp klients start… wifi_task: status = 1wifi_task: status = 1ip: 192.168.2.23, maska: 255.255.255.0, gw: 192.168.2.1ws2812_spi_init ok: (Atkārtoti) tiek izveidots savienojums ar MQTT serveri test.mosquitto.org… xQueueReceived +25,50xQueueSend ok done

5. darbība. Mijiedarbība

Pieņemot, ka jūsu ierīce ir veiksmīgi izveidojusi savienojumu ar WiFi un MQTT brokeris, jūs varēsit nosūtīt un saņemt datus no NodeMCU, izmantojot MQTT. Ja vēl neesat to izdarījis, instalējiet moskītu klientu pakotni:

sudo apt-get install mosquitto-customers

Tagad jums vajadzētu būt iespējai izmantot mosquitto_pub un mosquitto_sub programmas no sava apvalka.

Temperatūras atjauninājumu saņemšana

Lai saņemtu temperatūras datus, mēs vēlamies izmantot komandu mosquitto_sub, lai abonētu tēmu, kurā NodeMCU publicē.

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

Jums vajadzētu redzēt temperatūras datus (pēc Celsija), ierodoties terminālī.

+25.87+25.93+25.68…

LED sloksnes krāsas iestatīšana attālināti

Lai nosūtītu RGB vērtības NodeMCU, izmantojot MQTT, tiek izmantots vienkāršs ziņojumu formāts. Komandas formāts izskatās šādi:

r: RRRg: GGGb: BBB ~

Ja RRR, GGG, BBB atbilst nosūtāmās krāsas RGB vērtībām (0–255). Lai nosūtītu savu komandu, mēs izmantosim komandu mosquitto_pub. Šeit ir daži piemēri:

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

Ja vēlaties būt radošs, atrodiet tiešsaistē tādu krāsu atlasītāju kā šis un rediģējiet komandu ar jebkuru izvēlēto RGB vērtību.

Uzmanies

Šī projekta tēmas ir iestatītas uz /cpe439 /rgb un /cpe439 /temp publiskā MQTT brokerī, kas nozīmē, ka nekas neliedz kādam citam publicēt vai abonēt tādas pašas tēmas kā jūs. Lai izmēģinātu lietas, ir labi izmantot publisko brokeri, bet nopietnākiem projektiem vēlaties izveidot savienojumu ar brokeri ar paroles aizsardzību vai vadīt savu brokeri serverī.

6. darbība. Informācija par ieviešanu

Onewire

ESP8266 ir tikai viens kodols, tāpēc ilgstoši bloķēšanas uzdevumi, piemēram, 750 ms gaidīšana, līdz temperatūras sensors veic temperatūras mērīšanu, parasti novedīs pie tā, ka WiFi nedarbosies labi un varbūt pat avarēs. FreeRTOS paradigmā jūs izsaucat vTaskDelay (), lai apstrādātu šīs ilgās gaidīšanas, taču starp lasījumiem un rakstīšanu ir nepieciešams arī daudz īsāks gaidīšanas laiks, kas ir īsāks par FreeRTOS sistēmas atzīmi, un tāpēc to nevar izvairīties, izmantojot vTaskDelay (). Lai arī tos apiet, šī projekta onewire draiveris tika uzrakstīts, lai palaistu no valsts iekārtas, kuru darbina ESP8266 aparatūras taimeris, kas var izraisīt notikumus pat ik pēc 10 mikrosekundēm, kas ir īsākais nepieciešamais laiks starp viena stieņa lasīšanas/rakstīšanas operācijām. Lielākā daļa citu ieviešanu izmanto bloķējošu zvanu uz delay_us () vai līdzīgu, lai to apstrādātu, bet, ja jūs pastāvīgi atjaunināt temperatūru, visi šie kavējumi sāk palielināties, kā rezultātā lietojumprogramma reaģē mazāk. Šīs koda daļas avots atrodas mapē extras/onewire.

WS2812B

ESP8266 nav standarta aparatūras opciju PWM pietiekami ātri, lai vadītu LED sloksnes pie 800KHz. Lai to novērstu, šis projekts izmanto SPI MOSI tapu, lai vadītu gaismas diodes. Pielāgojot SPI pulksteņa ātrumu un mainot SPI lietderīgo slodzi, jūs varat panākt diezgan uzticamu katra atsevišķa gaismas diodes vadību. Šī metode nav bez trūkumiem- vienam gaismas diodēm jābūt barotām ar 5 V avotu un SPI tapas izejai jāpievieno līmeņa pārslēdzējs. Bet 3.3V darbojas. Otrkārt, ir traucējumi, kas rodas nepilnīga laika dēļ, izmantojot SPI metodi. Un trešais - tagad jūs nevarat izmantot SPI kaut kam citam. Papildu informāciju par šo metodi var atrast šeit, un šīs koda daļas avots atrodas mapē extras/ws2812.

Uzticamāka metode LED sloksņu virzīšanai ir i2 izmantošana. Tomēr šai metodei ir daudz mikroshēmai raksturīgu uzlaušanas, tāpēc SPI šķita labāka izvēle kā mācību uzdevums.

Ieteicams: