Բովանդակություն:

WiFi LED ժապավեն + ջերմաստիճանի տվիչ ESP8266- ով ՝ 6 քայլ
WiFi LED ժապավեն + ջերմաստիճանի տվիչ ESP8266- ով ՝ 6 քայլ

Video: WiFi LED ժապավեն + ջերմաստիճանի տվիչ ESP8266- ով ՝ 6 քայլ

Video: WiFi LED ժապավեն + ջերմաստիճանի տվիչ ESP8266- ով ՝ 6 քայլ
Video: Zigbee լույսի, ջերմաստիճանի և խոնավության սենսոր Moes էլեկտրոնային թանաքի էկրանով 2024, Հուլիսի
Anonim
WiFi LED ժապավեն + ջերմաստիճանի տվիչ ESP8266- ով
WiFi LED ժապավեն + ջերմաստիճանի տվիչ ESP8266- ով

Այս ձեռնարկը նկարագրում է ESP8266- ի ստեղծման և այն խոսելու ինչպես ջերմաստիճանի տվիչի, այնպես էլ LED շերտի քայլերը, միևնույն ժամանակ կարողանալ մուտքագրել և ելք ուղարկել MQTT- ով WiFi- ով: Նախագիծը կազմվել է 2016 թվականի աշնանը Cal Poly San Luis Obispo- ում անցկացված դասընթացի համար- CPE 439: Իրական ժամանակի ներդրված համակարգեր: Ընդհանուր նպատակն էր ցուցադրել էժան սարքավորումներով ինտերնետին միացված «իր» ստեղծելու հեշտությունը:

Պահանջվող պարագաներ/սարքավորումներ.

  • NodeMCU ESP8266 dev տախտակ
  • WS2812B LED ժապավեն
  • MAX31820 peratերմաստիճանի տվիչ
  • Breadboard
  • 4.7K Օմ դիմադրություն
  • 220 օմ դիմադրություն
  • jumper լարերը
  • միկրո USB մալուխ
  • Համակարգիչ (կամ VM), որն աշխատում է Linux- ով (օրինակ ՝ Ubuntu)

Ենթադրություններ/նախադրյալներ.

  • հրամանի տող գործիքների օգտագործման և դեբյան վրա հիմնված դիստրոյի վրա փաթեթներ տեղադրելու փորձ
  • Makefile շարահյուսության հիմնական ըմբռնումը
  • միացնող լարեր

Քայլ 1: Ստեղծեք կառուցողական միջավայր

Նախագիծը կառուցելու համար ձեզ հարկավոր է esp-open-sdk, որը տեղադրված է ձեր մեքենայի վրա: Հետևեք հղմանը և կարդացեք կառուցման հրահանգները: Մի խոսքով, դուք պետք է որոշ sudo apt-get հրամաններ կատարեք ՝ կախվածություններ տեղադրելու համար, git clone ՝ ռեկուրսիվ ՝ clon/download esp-open-sdk և վերջապես make հրաման ՝ esp-open-sdk կառուցելու համար:

Նայիր ինձ

Քայլ 2: Ստացեք աղբյուրի կոդ, կազմաձևեք և կառուցեք

Այժմ, երբ esp-open-sdk- ն կառուցված է, կլոնավորեք նախագծի պահոցը:

git կլոն

Փոխվեք նախագծի գրացուցակում, ստեղծեք.local թղթապանակ և պատճենեք օրինակի կարգավորումները:

cd esp-rtos- թեստեր

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

Այժմ բացեք.local/settings.mk ցանկացած տեքստային խմբագրիչով և փոխեք հետևյալ կարգավորումները.

  • OPENSDK_ROOT. Քայլ 1-ում ձեր կառուցած esp-open-sdk- ի գտնվելու վայրի բացարձակ ուղին:
  • WIFI_SSID. Ձեր WiFi ցանցի SSID- ը
  • WIFI_PASS. Ձեր WiFi ցանցի գաղտնաբառը
  • PIXEL_COUNT. Ձեր WS2812B LED շերտի պիքսելների քանակը

Նշում. Քանի որ այս նախագիծը SPI- ն օգտագործում է LED- ները վարելու համար և NodeMCU 3.3v- ն դրանք մատակարարելու համար, հավանաբար չեք կարողանա վարել ավելի քան 60 ֆունտ LED:

Նշում. Մնացած պարամետրերը փոփոխման կարիք չունեն, բայց ցանկության դեպքում կարող են փոփոխվել: Առաջարկվում է պահպանել առաջադրանքի առաջնահերթությունների կարգը: Որքան ցածր է գերակայության թիվը, այնքան ցածր է առաջադրանքի առաջնահերթությունը:

Այժմ կառուցեք նախագիծը.

կատարել -C օրինակներ/cpe439

Եթե ամեն ինչ ճիշտ է տեղադրված, ապա այն պետք է սկսի հավաքել: Վերջում դուք պետք է տեսնեք.

Հաջողությամբ ստեղծվեց «որոնվածը/cpe439.bin»

Նայիր ինձ

Քայլ 3: Միացրեք ապարատային բաղադրիչները

Միացրեք ապարատային բաղադրիչները
Միացրեք ապարատային բաղադրիչները

Այժմ, երբ ծածկագիրը կազմված է, ժամանակն է միացնել մեր ծայրամասային սարքերը:

Նախ, կպցրեք NodeMCU- ն սեղանի վրա, այնուհետև օգտագործեք jumper լարերը `միացումները կատարելու համար, ինչպես ցույց է տրված գծապատկերում:

Մի քանի բան, որոնց մասին պետք է տեղյակ լինել.

  1. Կարևոր. WS2812B տվյալների գիծը երկկողմանի չէ: Եթե ուշադիր նայեք շերտի LED կողմի գծանշումներին, ապա պետք է տեսնեք մի փոքր ուղղահայաց սլաքներ: NodeMCU- ի D7- ից ստացվող ելքը պետք է ուղղվի դեպի WS2812B այնպես, ինչպես ուղղության նշիչը, որը ուշադիր նայելու դեպքում կարող եք տեսնել դիագրամում:
  2. Կախված այն բանից, թե ինչպիսի միակցիչներով է գալիս ձեր WS2812B- ը, գուցե անհրաժեշտ լինի որոշ փոփոխություններ կատարել, որպեսզի դրանք ապահով կերպով միանան հացատախտակին: Դուք կարող եք նաև օգտագործել ալիգատորների տեսահոլովակներ `դրանք միացնելու համար տախտակին հարմարվող ցատկող մալուխներին:
  3. MAX31820 կապումներն ունեն ավելի փոքր սկիպիդար և ավելի բարակ են, քան ստանդարտ 0.1 դյույմ/2.54 մմ թռիչքները, ինչը նրանց բարդ է դարձնում: Դրա շուրջ մեկ ճանապարհն է `օգտագործել կանանցից տղամարդու ցատկող լարերը, պլաստիկ պատյանը հանել կանանց կողմից, այնուհետև օգտագործեք որոշ տափակաբերան աքցաններ, որոնք սեղմում են կանանց թռիչքի ծայրերը ՝ ավելի փոքր MAX31820 կապում:

NodeMCU- ն միացնելուց առաջ կրկնակի ստուգեք միացումները, որպեսզի չվնասեք բաղադրիչները:

Քայլ 4: Flash և գործարկել

Flashրամեկուսացում

Միացված բոլոր սարքավորումներով միացրեք ձեր NodeMCU- ը և բռնկվեք հետևյալ հրամանով.

կատարել flash -C օրինակներ/cpe439 ESPPORT =/dev/ttyUSB0

/dev/ttyUSB0- ը սերիական com է, որի ներքո պետք է հայտնվի NodeMCU- ն: Եթե այլ սերիական սարքեր ունեք միացված, այն կարող է ցուցադրվել որպես /dev /ttyUSB1 կամ որևէ այլ համար: Ստուգելու համար կարող եք երկու անգամ գործարկել այս հրամանը ՝ մեկ անգամ NodeMCU- ն անջատված, և մեկ անգամ այն միացված, և համեմատեք տարբերությունը.

ls /dev /ttyUSB*

Մեկ այլ խնդիր, որին կարող եք հանդիպել, սարքի մուտքի թույլտվություն չունենալն է: Սա շտկելու երկու եղանակ է.

  1. Ավելացրեք ձեր օգտվողին dialout խմբին.

    sudo adduser $ (whoami) dialout

  2. chmod կամ chown սարքը.

sudo chmod 666 /dev /ttyUSB0 sudo chown $ (whoami) ՝ $ (whoami) /dev /ttyUSB0Առաջին մեթոդը նախընտրելի է, քանի որ այն մշտական լուծում է:

Վազում

Flash հրամանը հաջողությամբ գործարկելուց հետո սարքն անմիջապես կբեռնվի և կսկսի աշխատել կազմված կոդը: Flashրամեկուսացումից հետո ցանկացած պահի կարող եք գործարկել հետևյալ հրամանը ՝ սերիական ելքը դիտելու համար.

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

Saveամանակ խնայելու համար կարող եք սա ավելացնել ձեր./. Bashrc ֆայլին ՝

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

.. ինչը թույլ է տալիս պարզապես մուտքագրել «nodemcu» որպես այդ հրամանի կեղծանուն:

Եթե ամեն ինչ ճիշտ է կազմաձևված, ձեր LED շերտը պետք է վառվի կանաչ գույնով, իսկ սերիալում դուք պետք է տեսնեք WiFi- ի միացումը, IP հասցեն, միացումը MQTT- ին և հաղորդագրությունները, որ ջերմաստիճանի տվյալները դուրս են մղվում:

կապված MyWiFiSSID- ի հետ, ալիքի 1dhcp հաճախորդի գործարկում… wifi_task: status = 1wifi_task: status = 1ip: 192.168.2.23, դիմակ ՝ 255.255.255.0, gw: 192.168.2.1ws2812_spi_init okRequest temp OKwifi_tasktemuqt: (Վեր) միացում MQTT սերվերին test.mosquitto.org… xQueueReceive +25.50xQueue Ուղարկել լավ, ուղարկեք MQTT միացում… MQTTv311donexQueueReceive +25.56 xQueueSend լավ

Քայլ 5: Փոխազդեցություն

Ենթադրելով, որ ձեր սարքը հաջողությամբ միացված է WiFi- ին և MQTT բրոքերին, դուք կկարողանաք տվյալներ ուղարկել և ստանալ NodeMCU- ից MQTT- ով: Եթե դեռ չեք հասցրել, տեղադրեք մոծակների հաճախորդների փաթեթը.

sudo apt-get տեղադրեք մոծակների հաճախորդներ

Այժմ դուք պետք է կարողանաք օգտագործել mosquitto_pub և mosquitto_sub ծրագրերը ձեր պատյանից:

Temperatureերմաստիճանի թարմացումներ ստանալը

Temperatureերմաստիճանի տվյալներ ստանալու համար մենք կցանկանանք mosquitto_sub հրամանի միջոցով բաժանորդագրվել այն թեմային, որին հրապարակում է NodeMCU- ն:

mosquitto_sub -h test.mosquitto.org -t /cpe439 /տեմպ

Դուք պետք է տեսնեք ջերմաստիճանի տվյալները (elsելսիուս), որոնք հասնում են տերմինալին:

+25.87+25.93+25.68…

LED շերտի գույնի հեռակա կարգավորում

Հաղորդագրության պարզ ձևաչափը օգտագործվում է RGB արժեքները NodeMCU- ին MQTT- ով ուղարկելու համար: Հրամանի ձևաչափն այսպիսին է.

r: RRRg: GGGb: BBB

Որտեղ RRR, GGG, BBB համապատասխանում են RGB- ի արժեքներին (0-255) այն գույնի, որը ցանկանում եք ուղարկել: Մեր հրամանը ուղարկելու համար մենք կօգտագործենք mosquitto_pub հրամանը: Ահա մի քանի օրինակ.

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 # ' # կապույտ

Եթե ցանկանում եք ստեղծագործական գործունեություն ծավալել, առցանց գտեք այսպիսի գույնի ընտրիչ և խմբագրեք հրամանը ՝ ձեր ընտրած ցանկացած RGB արժեքով:

Watchգուշացե՛ք:

Այս նախագծի թեմաները դրված են /cpe439 /rgb և /cpe439 /temp հանրային MQTT բրոքերի վրա, ինչը նշանակում է, որ ոչինչ չի խանգարում որևէ մեկին հրապարակել կամ բաժանորդագրվել ձեզ հետ նույն թեմաներին: Ամեն ինչ փորձելու համար հանրային բրոքեր օգտագործելը լավ է, բայց ավելի լուրջ նախագծերի համար կցանկանաք գաղտնաբառով պաշտպանված բրոքերին միանալ կամ սերվերի վրա գործարկել ձեր սեփական բրոքերը:

Քայլ 6: Իրականացման մանրամասներ

Onewire

ESP8266- ն ունի ընդամենը 1 միջուկ, այնքան երկար, այնքան արգելափակող առաջադրանքները, ինչպիսիք են ջերմաստիճանի տվիչին 750 մ ջերմաստիճանի չափման սպասելը, սովորաբար կհանգեցնի նրան, որ WiFi- ն լավ չի գործի, և գուցե նույնիսկ վթարի ենթարկվի: FreeRTOS- ի պարադիգմում դուք զանգահարում եք vTaskDelay () ՝ այս երկար սպասումները լուծելու համար, բայց կան նաև շատ ավելի կարճ սպասումներ, որոնք պահանջվում են ընթերցումների և գրությունների միջև, որոնք ավելի կարճ են, քան FreeRTOS համակարգի տիզը և, հետևաբար, հնարավոր չէ խուսափել vTaskDelay () - ով: Այս նախագծի միակ վարորդը գրել է, որ դուրս է գալիս պետական մեքենայից, որը շարժվում է ESP8266- ի ապարատային ժամանակաչափով, որը կարող է իրադարձություններ առաջացնել ամեն 10 միկրո վայրկյանի պես, ինչը, ամենայն հավանականությամբ, ամենակարճն է: պահանջվող ժամանակը մեկ կամ մեկ այլ ընթերցման/գրելու գործողությունների միջև: Այլ իրականացումներից շատերն օգտագործում են արգելափակման կանչ ՝ delay_us () կամ նմանատիպ ՝ դա կարգավորելու համար, բայց եթե դուք անընդհատ ջերմաստիճանի թարմացումներ եք կատարում, այդ բոլոր ուշացումները սկսում են ավելանալ, արդյունքում ՝ ավելի քիչ արձագանքող ծրագիր: Կոդի այս հատվածի աղբյուրը գտնվում է լրացուցիչ/onewire թղթապանակում:

WS2812B

ESP8266- ը չունի PWM- ի համար բավականաչափ արագ ապարատային ընտրանքներ, որոնք կարող են LED շերտեր վարել 800 ԿՀց հաճախականությամբ: Այս խնդիրը շրջանցելու համար այս նախագիծը օգտագործում է SPI MOSI քորոցը ՝ LED- ները վարելու համար: Կարգավորելով SPI- ի ժամաչափը և փոխելով SPI- ի բեռնվածքը, կարող եք հասնել յուրաքանչյուր առանձին LED- ի բավականին հուսալի վերահսկողության: Այս մեթոդը առանց թերությունների չէ. Մեկի համար LED- ները պետք է սնուցվեն 5 Վ աղբյուրով, իսկ SPI քորոցի ելքին պետք է ավելացվի մակարդակի փոխարկիչ: Բայց 3.3 Վ -ն աշխատում է: Երկրորդ, կան խափանումներ, որոնք առաջանում են SPI մեթոդի կիրառմամբ թերի ժամկետների պատճառով: Եվ երրորդը `այժմ դուք չեք կարող SPI- ն օգտագործել այլ բանի համար: Այս մեթոդի լրացուցիչ նախապատմությունը կարելի է գտնել այստեղ, և կոդի այս հատվածի աղբյուրը գտնվում է լրացուցիչ/ws2812 պանակում:

LED շերտերի վարման ավելի հուսալի մեթոդ է i2s- ի օգտագործումը: Այնուամենայնիվ, այս մեթոդը շատ չիպերի համար հատուկ հաքեր ունի, ուստի SPI- ն ավելի լավ ընտրություն էր որպես ուսումնական վարժություն:

Խորհուրդ ենք տալիս: