Სარჩევი:

WiFi LED ზოლები + ტემპერატურის სენსორი ESP8266: 6 ნაბიჯი
WiFi LED ზოლები + ტემპერატურის სენსორი ESP8266: 6 ნაბიჯი

ვიდეო: WiFi LED ზოლები + ტემპერატურის სენსორი ESP8266: 6 ნაბიჯი

ვიდეო: WiFi LED ზოლები + ტემპერატურის სენსორი ESP8266: 6 ნაბიჯი
ვიდეო: F&Home Radio #7, czujnik ruchu z sondą temperatury rH-P1T1 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 ტემპერატურის სენსორი
  • პურის დაფა
  • 4.7K ohm რეზისტორი
  • 220 ohm რეზისტორი
  • ჯუმბერის მავთულები
  • მიკრო USB კაბელი
  • PC (ან VM) მუშაობს Linux (მაგ. Ubuntu)

ვარაუდები/წინაპირობები:

  • გამოცდილება ბრძანების ხაზის ინსტრუმენტების გამოყენების და პაკეტების დაყენების შესახებ დებიანზე დაფუძნებულ დისტროზე
  • Makefile სინტაქსის ძირითადი გაგება
  • დამაკავშირებელი მავთულები

ნაბიჯი 1: გარემოს შექმნა

პროექტის შესაქმნელად დაგჭირდებათ თქვენს კომპიუტერზე დაინსტალირებული esp-open-sdk. მიჰყევით ბმულს და წაიკითხეთ მშენებლობის ინსტრუქცია. მოკლედ თქვენ აკეთებთ sudo apt-get ბრძანებებს დამოკიდებულებების დასაყენებლად, git კლონი-ეს არის რესურსის კლონირების/გადმოტვირთვის esp-open-sdk და ბოლოს გააკეთეთ ბრძანება esp-open-sdk- ის შესაქმნელად.

Მიყურე

ნაბიჯი 2: მიიღეთ კოდის კოდი, კონფიგურაცია და შექმნა

ახლა, როდესაც esp-open-sdk აშენებულია, კლონირება პროექტის საცავში.

git კლონი

შეცვალეთ პროექტის დირექტორიაში, შექმენით. ადგილობრივი საქაღალდე და დააკოპირეთ მაგალითის პარამეტრები.

cd esp-rtos- ტესტები

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

ახლა გახსენით.local/settings.mk ნებისმიერი ტექსტური რედაქტორით და შეცვალეთ შემდეგი პარამეტრები:

  • OPENSDK_ROOT: აბსოლუტური გზა esp-open-sdk ადგილმდებარეობისთვის, რომელიც თქვენ ააშენეთ 1 ნაბიჯში
  • WIFI_SSID: თქვენი WiFi ქსელის SSID
  • WIFI_PASS: თქვენი WiFi ქსელის პაროლი
  • PIXEL_COUNT: პიქსელების რაოდენობა თქვენს WS2812B LED ზოლზე

შენიშვნა: ვინაიდან ეს პროექტი იყენებს SPI- ს LED- ების მართვისთვის და იყენებს NodeMCU 3.3v მათ მიწოდებას, თქვენ ალბათ ვერ შეძლებთ 60 ~ ზე მეტი LED- ების მართვას.

შენიშვნა: სხვა პარამეტრები არ უნდა შეიცვალოს, მაგრამ შესაძლებელია სურვილისამებრ. მიზანშეწონილია დაიცვან დავალების პრიორიტეტები. რაც უფრო დაბალია პრიორიტეტული რიცხვი, მით უფრო დაბალია ამოცანის პრიორიტეტი.

ახლა ააშენეთ პროექტი:

გააკეთეთ -C მაგალითები/cpe439

თუ ყველაფერი სწორად არის დაყენებული, უნდა დაიწყოს შედგენა. დასასრულს თქვენ უნდა ნახოთ:

წარმატებით შეიქმნა 'firmware/cpe439.bin'

Მიყურე

ნაბიჯი 3: დააკავშირეთ აპარატურის კომპონენტები

აპარატურის კომპონენტების დაკავშირება
აპარატურის კომპონენტების დაკავშირება

ახლა, როდესაც კოდი შედგენილია, დროა დააკავშიროთ ჩვენი პერიფერიული მოწყობილობები.

პირველი, ჩადეთ NodeMCU პურის დაფაზე, შემდეგ გამოიყენეთ ჯუმბერის მავთულები, რათა გააკეთოთ კავშირები, როგორც ეს მოცემულია დიაგრამაში.

რამდენიმე რამ, რაც უნდა იცოდეთ:

  1. მნიშვნელოვანია: WS2812B მონაცემთა ხაზი არ არის ორმხრივი. თუ ყურადღებით დააკვირდებით მარკირებას ზოლის LED მხარეს, თქვენ უნდა ნახოთ პატარა ისრები, რომლებიც ერთი მიმართულებით მიუთითებს. NodeMCU– ს D7– დან გამომავალი უნდა იყოს მიმართული WS2812B– ში ისევე, როგორც მიმართულების მარკერი, რომელიც შეგიძლიათ იხილოთ დიაგრამაზე, თუ კარგად დააკვირდებით.
  2. იმისდა მიხედვით, თუ რა სახის კონექტორებს გააჩნია თქვენი WS2812B, შეიძლება დაგჭირდეთ გარკვეული მოდიფიკაციის გაკეთება, რათა ისინი უსაფრთხოდ დაუკავშირდნენ პურის დაფას. თქვენ ასევე შეგიძლიათ გამოიყენოთ ალიგატორის სამაგრები, რათა დააკავშიროთ ისინი პურის დაფაზე მყოფი ჯუმპერის კაბელებთან.
  3. MAX31820 ქინძისთავებს აქვთ უფრო მცირე სიმაღლე და უფრო თხელია ვიდრე სტანდარტული 0.1 "/2.54 მმ მხტუნავები, რაც მათ ართულებს ერთმანეთთან დაკავშირებას. ამის ერთ-ერთი გზაა მდედრობითი სქესის მამაკაცის მხტუნავების მავთულის გამოყენება, პლასტიკური ქეშის ამოღება ქალის მხრიდან, შემდეგ გამოიყენეთ ზოგიერთი pliers crimp ქალი jumper მთავრდება მჭიდროდ გარშემო პატარა MAX31820 ქინძისთავები.

ორმაგად შეამოწმეთ კავშირები NodeMCU- ს ჩართვამდე, რათა არ დაზიანდეს კომპონენტები.

ნაბიჯი 4: აანთეთ და გაუშვით

ციმციმებს

ყველა აპარატურა დაკავშირებული, შეაერთეთ თქვენი NodeMCU და განათავსეთ შემდეგი ბრძანებით:

გააკეთეთ ფლეშ -C მაგალითები/cpe439 ESPPORT =/dev/ttyUSB0

/dev/ttyUSB0 არის სერიული com NodeMCU უნდა გამოჩნდეს ქვეშ. თუ სხვა სერიული მოწყობილობები გაქვთ დაკავშირებული, ის შეიძლება გამოჩნდეს როგორც /dev /ttyUSB1 ან სხვა ნომერი. შესამოწმებლად შეგიძლიათ გაუშვათ ეს ბრძანება ორჯერ, ერთხელ NodeMCU გამორთული და ერთხელ მასთან ერთად ჩართული და შეადაროთ განსხვავება:

ls /dev /ttyUSB*

სხვა პრობლემა, რომელსაც შეიძლება წააწყდეთ, არის მოწყობილობაზე წვდომის ნებართვა. ამის გამოსწორების ორი გზაა:

  1. დაამატეთ თქვენი მომხმარებელი აკრიფეთ ჯგუფში:

    sudo adduser $ (whoami) dialout

  2. chmod ან chown მოწყობილობა:

sudo chmod 666 /dev /ttyUSB0 sudo chown $ (whoami): $ (whoami) /dev /ttyUSB0პირველი მეთოდი სასურველია, რადგან ეს არის მუდმივი გადაწყვეტა.

Სირბილი

Flash ბრძანების წარმატებით გაშვების შემდეგ, მოწყობილობა დაუყოვნებლივ ჩატვირთავს და დაიწყებს შედგენილი კოდის გაშვებას. ციმციმის შემდეგ ნებისმიერ მომენტში შეგიძლიათ შეასრულოთ შემდეგი ბრძანება სერიული გამოყვანის საყურებლად:

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

დროის დაზოგვის მიზნით შეგიძლიათ დაამატოთ ეს თქვენს ~/.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, mask: 255.255.255.0, gw: 192.168.2.1ws2812_spi_init okRequest temp OKwifi_taskteme_mk: (ხელახლა) დაკავშირება MQTT სერვერთან test.mosquitto.org… xQueueReceive +25.50xQueue გაგზავნა კარგად დასრულდა გაგზავნა MQTT დაკავშირება… MQTTv311donexQueueReceive +25.56 xQueueSend ok

ნაბიჯი 5: ურთიერთქმედება

თუ ვივარაუდოთ, რომ თქვენი მოწყობილობა WiFi და MQTT ბროკერი წარმატებით არის დაკავშირებული, თქვენ შეძლებთ მონაცემების გაგზავნას და მიღებას NodeMCU– დან MQTT– ით. თუ ჯერ არ გაქვთ, დააინსტალირეთ mosquitto კლიენტების პაკეტი:

sudo apt-get დააინსტალირეთ კოღო-კლიენტები

ახლა თქვენ უნდა შეეძლოთ mosquitto_pub და mosquitto_sub პროგრამების გამოყენება თქვენი ჭურვიდან.

ტემპერატურის განახლებების მიღება

ტემპერატურის მონაცემების მისაღებად ჩვენ გვსურს გამოვიყენოთ mosquitto_sub ბრძანება, რათა გამოვიწეროთ ის თემა, რომელსაც NodeMCU აქვეყნებს.

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

თქვენ უნდა ნახოთ ტერმინალში ჩამოსული ტემპერატურის მონაცემები (ცელსიუსში).

+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 მნიშვნელობით, რომელსაც აირჩევთ.

Ფრთხილად

ამ პროექტის თემები მითითებულია /cpe439 /rgb და /cpe439 /temp საჯარო MQTT ბროკერზე, რაც ნიშნავს რომ არაფერი არ შეუშლის ხელს სხვას გამოაქვეყნოს ან გამოიწეროს იგივე თემები, როგორც თქვენ. იმისათვის, რომ ყველაფერი გამოსცადოთ, საჯარო ბროკერის გამოყენება კარგია, მაგრამ უფრო სერიოზული პროექტებისთვის თქვენ გინდათ დაუკავშირდეთ ბროკერს პაროლის დაცვით, ან გაუშვათ საკუთარი ბროკერი სერვერზე.

ნაბიჯი 6: განხორციელების დეტალები

Onewire

ESP8266– ს აქვს მხოლოდ 1 ბირთვი, იმდენად დიდი ხნის განმავლობაში, ისეთი ამოცანების დაბლოკვა, როგორიცაა ტემპერატურის სენსორზე ტემპერატურის გაზომვისთვის 750 მმ ლოდინი, ჩვეულებრივ გამოიწვევს WiFi– ს არ ფუნქციონირებას და შესაძლოა ავარიასაც კი. FreeRTOS პარადიგმაში თქვენ ეძახით vTaskDelay () ამ გრძელი ლოდინის გადასატანად, მაგრამ ასევე არის ბევრი მოკლე ლოდინი წაკითხულსა და წერას შორის, რომლებიც უფრო მოკლეა ვიდრე FreeRTOS სისტემის ტიკები და ამრიგად მათი თავიდან აცილება შეუძლებელია vTaskDelay () - ით. ასევე, ამ პროექტში მყოფი მძღოლისთვის დაიწერა სახელმწიფო მანქანა, რომელიც ამოძრავებს ESP8266– ის აპარატურის ქრონომეტრს, რამაც შეიძლება გამოიწვიოს მოვლენები ყოველ 10 მიკრო წამში, რაც ყველაზე მოკლეა. საჭირო დრო ერთიმეორის წაკითხვის/ჩაწერის ოპერაციებს შორის. სხვა დანერგვების უმეტესობა იყენებს დაბლოკვის ზარს delay_us () ან მსგავსი მსგავსის მოსაგვარებლად, მაგრამ თუ თქვენ მუდმივად იღებთ ტემპერატურის განახლებებს, ყველა ეს შეფერხება იწყებს დამატებას, რის შედეგადაც ნაკლებად რეაგირებს პროგრამა. კოდის ამ ნაწილის წყარო მდებარეობს დამატებით/ერთ საქაღალდეში.

WS2812B

ESP8266– ს არ გააჩნია სტანდარტული აპარატურის პარამეტრები PWM– სთვის საკმარისად სწრაფად, რომ LED ზოლები მართოს 800KHz– ზე. ამის თავიდან ასაცილებლად, ეს პროექტი იყენებს SPI MOSI პინს LED- ების მართვისთვის. SPI– ის საათის მაჩვენებლის რეგულირებით და SPI– ის დატვირთვის შეცვლით, თქვენ შეგიძლიათ მიაღწიოთ თითოეული LED– ის საკმაოდ საიმედო კონტროლს. ეს მეთოდი არ არის ხარვეზების გარეშე- ერთისთვის LED- ები უნდა იკვებებოდეს 5V წყაროსთან და დონის გადამრთველი უნდა დაემატოს SPI pin- ის გამომავალს. მაგრამ 3.3V მუშაობს. მეორე, არის ხარვეზები, რომლებიც წარმოიქმნება არასრულყოფილი დროის გამო SPI მეთოდის გამოყენებით. და მესამე ის არის, რომ თქვენ არ შეგიძლიათ გამოიყენოთ SPI სხვა არაფერში. ამ მეთოდის დამატებითი ფონი შეგიძლიათ იხილოთ აქ, ხოლო კოდის ამ ნაწილის წყარო მდებარეობს დამატებით/ws2812 საქაღალდეში.

LED ზოლების მართვის უფრო საიმედო მეთოდია i2– ების გამოყენება. თუმცა ამ მეთოდს აქვს ბევრი ჩიპის სპეციფიკური გატეხვა, ამიტომ SPI, როგორც ჩანს, უკეთესი არჩევანია სასწავლო სავარჯიშოდ.

გირჩევთ: