Სარჩევი:

სახლის ქსელის ტემპერატურის სენსორი: 7 ნაბიჯი
სახლის ქსელის ტემპერატურის სენსორი: 7 ნაბიჯი

ვიდეო: სახლის ქსელის ტემპერატურის სენსორი: 7 ნაბიჯი

ვიდეო: სახლის ქსელის ტემპერატურის სენსორი: 7 ნაბიჯი
ვიდეო: Как проверить генератор. За 3 минуты, БЕЗ ПРИБОРОВ и умений. 2024, ნოემბერი
Anonim
სახლის ქსელის ტემპერატურის სენსორი
სახლის ქსელის ტემპერატურის სენსორი

რა უნდა იცოდეთ ამ პროექტის შესაქმნელად:

თქვენ უნდა იცოდეთ:- ელექტრონიკის ზოგიერთი უნარი (შედუღება)

- Linux

- Arduino IDE

(თქვენ დაგჭირდებათ IDE– ში დამატებითი დაფების განახლება:

- ESP დაფის განახლება/დაპროგრამება Arduino IDE– ს საშუალებით.

(არსებობს რამდენიმე კარგი გაკვეთილი ინტერნეტში)

ეს შეიძლება გაკეთდეს Arduino Uno– ს გამოყენებით ან FTDI– ით (usb სერიული ადაპტერით).

მე გამოვიყენე ჩემი Uno, რადგან მე არ მქონდა სერიული პორტი ჩემს კომპიუტერზე და არც მქონდა FTDI

ნაბიჯი 1: წადი საყიდლებზე

Საყიდლებზე წასვლა
Საყიდლებზე წასვლა

რა დაგჭირდებათ რომ ეს მოხდეს?

ციფრული ტემპერატურისა და ტენიანობის სენსორისთვის:

- ან პურის დაფა, ან ალტერნატივა, როგორიცაა pcb პროტოტიპი, შედუღება, გასაყიდი რკინა…

- რაღაც მავთული

- ორი მხტუნავი

- 10k Ohm რეზისტორი

- ESP12F (შესაძლოა სხვა მოდელებმაც იმუშაონ …)

- DHT22 (ცოტა უფრო ძვირი ვიდრე DHT11, მაგრამ უფრო ზუსტი)

- 3 AA დატენვის ბატარეა და ბატარეის დამჭერი

- პატარა პლასტიკური ყუთი თქვენი პროექტის ჩასადებად

- მოგვიანებით ეტაპზე ვგეგმავ დამატებას HT7333 ორი 10uF კონდენსატორებით ბატარეის პაკეტსა და ESP- ს შორის

შემომავალი ძაბვის (VCC) სტაბილიზაციისათვის რეკომენდებულ 3.3V– მდე, არამედ ESP– ის დაძაბულობისგან დასაცავად.

ქსელის ნაწილისთვის:

- თქვენი სახლის WiFi ქსელი

სერვერის ნაწილისთვის:

- Linux– ზე დაფუძნებული ნებისმიერი სისტემა (ყოველთვის ჩართულია!)

მე გამოვიყენე Raspberry Pi (რომელსაც ასევე ვიყენებ როგორც სერვერი ჩემი გარე IP კამერებისათვის.)

- gcc შემდგენელი თქვენი სერვერის კოდის შესადგენად

- rrdtool პაკეტი მონაცემების შესანახად და გრაფიკების შესაქმნელად

- apache (ან სხვა ვებ სერვერი)

თქვენი საყვარელი კომპიუტერი ან ლეპტოპი Arduino IDE მასზე.

ნაბიჯი 2: დაყენება და ფონი

დაყენება და ფონი
დაყენება და ფონი

WiFi- ის ამ ვერსიაში, რომელიც დაკავშირებულია - რომ აღარაფერი ვთქვათ IOT - ტემპერატურისა და ტენიანობის სენსორზე, გამოვიყენე ESP12F, DHT22 და 3 AA ბატარეის დამჭერი დატენვის ბატარეებით.

ყოველ 20 წუთში ESP იღებს გაზომვას DHT22– დან და აგზავნის მას სერვერზე (Raspberry Pi) UDP– ით ჩემი სახლის WiFi ქსელში. გაზომვების გაგზავნის შემდეგ, ESP მიდის ღრმა ძილში. ეს ნიშნავს, რომ მოდულის მხოლოდ რეალურ დროში რჩება ძალა, რის შედეგადაც წარმოუდგენლად დაზოგავს ენერგიას. დაახლოებით 5 წამის განმავლობაში, მოდული მოითხოვს დაახლოებით 100mA- ს, შემდეგ 20 წუთის განმავლობაში ღრმა ძილს მხოლოდ 150uA.

მე არ მსურს გამოვიყენო ინტერნეტით დაფუძნებული სერვისი, რადგან მე მაქვს ჩემი Raspberry Pi, რომელიც ყოველთვის ჩართულია და ამ გზით მე მქონდა სიამოვნება სერვერის ნაწილის დაწერაც.

სერვერზე (Raspberry– ის გაშვებული Raspberry Pi) მე დავწერე მარტივი UDP მსმენელი (სერვერი), რომელიც ინახავს ღირებულებებს უბრალო RRD– ში. (მრგვალი რობინის მონაცემთა ბაზა ტობიას ოტიკერის RRDtool– ის გამოყენებით.)

RRDtool– ის უპირატესობა ის არის, რომ თქვენ შექმნით თქვენს მონაცემთა ბაზას ერთხელ და ზომა იგივე რჩება. სხვაგვარად, თქვენ არ გჭირდებათ მონაცემთა ბაზის სერვერი (როგორიცაა mySQLd), რომელიც მუშაობს ფონზე. RRDtool გაძლევთ ინსტრუმენტებს მონაცემთა ბაზის შესაქმნელად და გრაფიკების შესაქმნელად.

ჩემი სერვერი პერიოდულად ქმნის გრაფიკებს და აჩვენებს ყველაფერს ძალიან მარტივ http გვერდზე. შემიძლია კონსულტაციები გავუწიო მარტივ ბრაუზერს Apache2 ვებ სერვერთან Raspberry Pi– სთან დაკავშირებით!

დაბოლოს, მე არ მქონდა FTDI (USB to Serial), ამიტომ გამოვიყენე ჩემი Arduino UNO. თქვენ უნდა დააკავშიროთ TX და RX და GND ESP და UNO. (ვიცი, თქვენმა ინსტინქტმა შეიძლება გითხრათ, რომ გადაკვეთოთ RX და TX … ესეც სცადე, არ მუშაობს.)

მე არ გავაკეთე დონის კონვერტაცია (UNO: მაღალი = 5V, მაგრამ ESP ძირითადად 3.3V მოწყობილობაა … ბაზარზე არის რამდენიმე ლამაზი FTDI, სადაც შეგიძლიათ აირჩიოთ თქვენი მაღალი დონე 5 ან 3.3V.

ჩემი წრე იკვებება 3 AA დატენვის ბატარეით - ასე რომ ფაქტობრივად 3 X 1.2V. შემდგომ ფაზაში ვაპირებ HT7333- ის დაყენებას ბატარეის პაკეტსა და მიკროსქემს შორის უსაფრთხოების მიზნით; ახლად დამუხტულ ბატარეებს შეიძლება ჰქონდეთ 1.2 ვ -ზე მეტი და ESP უნდა იკვებებოდეს მინ. 3V და მაქს. 3.6V ასევე, თუ მე გადავწყვეტ - სისუსტის მომენტში - ჩავსვი ტუტე ბატარეები (3 X 1.5V = 4.5V) ჩემი ESP არ იქნება შემწვარი!

მე ასევე განვიხილე 10 სმ x 10 სმ მზის პანელის გამოყენება, მაგრამ ეს არ ღირდა ამდენი პრობლემისთვის. საათში 3 გაზომვის გაკეთებით (ძირითადად 3x 5 წამი @ 100mA max. და დანარჩენი დრო @ 100uA), ვიმედოვნებ, რომ დავამუხტებ ჩემს წრეს 1 წლით იმავე დატენვის ბატარეებზე.

ნაბიჯი 3: Arduino - ESP12 ნაწილი

Arduino - ESP12 ნაწილი
Arduino - ESP12 ნაწილი
Arduino - ESP12 ნაწილი
Arduino - ESP12 ნაწილი

მე გავაკეთე ეს პროექტი სხვადასხვა ნაბიჯებით.

არსებობს რამოდენიმე ბმული, რომელიც დაგეხმარებათ ESP12 (aka. ESP8266) იმპორტირებაში Arduino IDE- ში. (მე უნდა გამოვიყენო ვერსია 2.3.0 უახლესი ვერსიის ნაცვლად, იმ ხარვეზის გამო, რომელიც შესაძლოა ამასობაში მოგვარებულიყო …)

დავიწყე ESP– ის მიერთებით, ჩემი Arduino UNO– ს საშუალებით (მხოლოდ როგორც ხიდი ჩემს კომპიუტერს შორის USB– დან სერიულამდე) ESP– ის სერიულ ინტერფეისზე. არსებობს ცალკეული ინსტრუქცია, რომელიც ხსნის ამას.

ჩემს დასრულებულ პროექტში დავტოვე მავთულები სერიალთან დასაკავშირებლად იმ შემთხვევაში, თუ ოდესმე დამჭირდება პრობლემის მოგვარება. RX

შემდეგ თქვენ უნდა დააკავშიროთ თქვენი ESP12 შემდეგნაირად:

ESP ქინძისთავები…

GND UNO GND

RX UNO RX

TX UNO TX

EN VCC

GPIO15 GND

თავდაპირველად ვცდილობდი ენერგოეფექტურობის გაძლიერებას 3.3V– დან UNO– ზე, მაგრამ მე სწრაფად გადავედი ელექტროენერგიის მიწოდებით ESP– ით, მაგრამ თქვენ ასევე შეგიძლიათ გამოიყენოთ თქვენი ბატარეის პაკეტი.

GPIO0 ეს jumper– ით დავუკავშირე GND– ს, რათა შესაძლებელი გამხდარიყო (= პროგრამირება) ESP.

პირველი ტესტი: დატოვეთ ჯუმპერი ღია და დაიწყეთ სერიული მონიტორი Arduino IDE– ში (115200 baud!).

ენერგიის ციკლი ESP, თქვენ უნდა ნახოთ ნაგვის სიმბოლოები და შემდეგ შეტყობინება, როგორიცაა:

Ai-Thinker Technology Co. Ltd. მზად არის

ამ რეჟიმში, ESP ოდნავ მოძველებული მოდემის მსგავსია. თქვენ უნდა გამოიყენოთ AT ბრძანებები.

სცადეთ შემდეგი ბრძანებები:

AT+RST

და შემდეგი ორი ბრძანება

AT+CWMODE = 3

კარგი

AT+CWLAP

ეს უნდა მოგაწოდოთ ყველა WiFi ქსელის სია ამ მხარეში.

თუ ეს მუშაობს, თქვენ მზად ხართ შემდეგი ნაბიჯისათვის.

ნაბიჯი 4: ტესტირება ESP როგორც ქსელის დროის პროტოკოლის (NTP) კლიენტი

ESP როგორც ქსელის დროის პროტოკოლის (NTP) კლიენტის ტესტირება
ESP როგორც ქსელის დროის პროტოკოლის (NTP) კლიენტის ტესტირება
ESP როგორც ქსელის დროის პროტოკოლის (NTP) კლიენტის ტესტირება
ESP როგორც ქსელის დროის პროტოკოლის (NTP) კლიენტის ტესტირება

Arduino IDE– ში, ფაილი, მაგალითები, ESP8266WiFi, ჩატვირთეთ NTPClient.

უმნიშვნელო შესწორებებია საჭირო იმისათვის, რომ ის იმუშაოს; თქვენ უნდა შეიყვანოთ თქვენი SSID და თქვენი WiFi ქსელის პაროლი.

ახლა მოათავსეთ მხტუნავი, დააკლეთ GPIO0 GND– ს.

ჩართეთ ESP ციკლი და ატვირთეთ ესკიზი ESP– ში.

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

მე შევამჩნიე, რომ ცოტათი უნდა ვითამაშო IDE– ს გადატვირთვით და ESP– ს გადატვირთვით, სანამ ატვირთვა იმუშავებდა.

სანამ დაიწყებთ ესკიზის შედგენას/ატვირთვას, დარწმუნდით, რომ დახურეთ სერიული კონსოლი (= სერიული მონიტორი), რადგან ეს ხელს შეუშლის თქვენ ატვირთვას.

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

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

შემდეგი ნაბიჯი ჩვენ შევამოწმოთ DHT22.

ნაბიჯი 5: DHT22 სენსორის ტესტირება

DHT22 სენსორის ტესტირება
DHT22 სენსორის ტესტირება

ახლა დამატებითი გაყვანილობაა საჭირო.

DHT ქინძისთავები … შეაერთეთ სენსორის პინი 1 (მარცხნივ) VCC (3.3V)

დაკავშირება pin 2 ESP GPIO5 (DHTPIN ესკიზში)

შეაერთეთ სენსორის პინი 4 (მარჯვნივ) GROUND- თან

შეაერთეთ 10K რეზისტორი პინიდან 2 (მონაცემები) სენსორის პინ 1 (სიმძლავრე).

NTP ტესტის მსგავსად, იპოვეთ DHTtester ესკიზი და შეცვალეთ იგი შემდეგი გზით:

#განსაზღვრეთ DHTPIN 5 // ჩვენ შევარჩიეთ GPIO5 სენსორთან დასაკავშირებლად#განსაზღვრეთ DHTTYPE DHT22 // რადგან ჩვენ ვიყენებთ DHT22 მაგრამ ეს კოდი/ბიბლიოთეკა ასევე შეეფერება DHT11

ისევ დახურეთ სერიული მონიტორი, ჩართეთ ESP ციკლი და შეადგინეთ და აანთეთ ESP.

თუ ყველაფერი კარგად არის, თქვენ უნდა ნახოთ გაზომვები სერიულ მონიტორზე.

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

თუ თქვენ გაქვთ (არა LED) სამაგიდო ნათურა, შეგიძლიათ აანთოთ სენსორი, რომ ოდნავ გაათბოთ.

დიდი! სენსორის ორი დიდი ნაწილი მუშაობს.

შემდეგ ეტაპზე მე გავაკეთებ კომენტარს საბოლოო კოდზე.

ნაბიჯი 6: გააერთიანეთ…

ერთად აყენებს…
ერთად აყენებს…

ისევ დამატებითი გაყვანილობა… ეს არის იმისთვის, რომ შესაძლებელი გახდეს ღრმა ძილი.

გახსოვდეთ, DeepSleep არის წარმოუდგენელი ფუნქცია IoT მოწყობილობებისთვის.

თუმცა, თუ თქვენი სენსორი მყარად არის დაკავშირებული DeepSleep– ისთვის, შეიძლება რთული იყოს ESP– ის გადაპროგრამება, ასე რომ ჩვენ ვაპირებთ სხვა ჯუმბერ კავშირს შორის

GPIO16-RST.

დიახ, ეს უნდა იყოს GPIO16, რადგან ეს არის GPIO, რომელიც აღჭურვილია მოწყობილობის გაღვიძებისთვის, როდესაც DeepSleep– ის შემდეგ რეალური დროის საათი გამორთულია!

ტესტირებისას შეგიძლიათ გადაწყვიტოთ 15 წამიანი ღრმა ძილი.

როდესაც შეცდომების გამოსწორებას ვახერხებდი, ჯუმბერს გადავაყენებ GPIO0– ზე, რათა შემეძლოს ჩემი პროგრამის გაშუქება.

გადმოტვირთვის დასრულების შემდეგ, ჯუმბერს გადავაყენებ GPIO16- ზე, რომ DeepSleep- მა იმუშაოს.

ESP– ის კოდს ეწოდება TnHclient.c

თქვენ უნდა შეცვალოთ თქვენი SSID, პაროლი და თქვენი სერვერის IP მისამართი.

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

ნაბიჯი 7: საგნების სერვერის მხარე

სერვერის საგნების მხარე
სერვერის საგნების მხარე
სერვერის საგნების მხარე
სერვერის საგნების მხარე

გავრცელებული გაუგებრობაა, რომ UDP არასანდოა და TCP არის…

ეს ისეთივე სულელურია, როგორც ჩაქუჩი უფრო მოსახერხებელია ვიდრე ხრახნიანი. ისინი უბრალოდ განსხვავებული ძალიან სასარგებლო ინსტრუმენტებია და ორივეს თავისი გამოყენება აქვს.

სხვათა შორის, UDP– ის გარეშე ინტერნეტი არ იმუშავებს … DNS დაფუძნებულია UDP– ზე.

ასე რომ, მე ავირჩიე UDP, რადგან ის არის ძალიან მსუბუქი, მარტივი და სწრაფი.

მე ვფიქრობ, რომ ჩემი WiFi არის ძალიან საიმედო, ამიტომ კლიენტი გამოგიგზავნით მაქსიმუმ 3 UDP პაკეტს, თუ აღიარებს "კარგი!" არ არის მიღებული.

TnHserver– ის C კოდი არის TnHServer.c ფაილში.

კოდში არის რამდენიმე კომენტარი, რომელიც ხსნის მას.

ჩვენ დაგვჭირდება სერვერზე დამატებითი ინსტრუმენტები: rrdtool, apache და შესაძლოა tcpdump.

Raspbian– ზე rrdtool– ის დასაყენებლად შეგიძლიათ უბრალოდ დააინსტალიროთ პაკეტი ასე: apt-get install rrdtool

თუ გჭირდებათ ქსელის ტრაფიკის გამართვა, tcpdump გამოგადგებათ apt-get install tcpdump

მე მჭირდება ვებ სერვერი, რომ შევძლო ბრაუზერის გამოყენება გრაფიკებთან კონსულტაციისთვის: apt-get install apache2

მე გამოვიყენე ეს ინსტრუმენტი: https://rrdwizard.appspot.com/index.php მრგვალი რობინის მონაცემთა ბაზის შექმნის ბრძანების მისაღებად. თქვენ უნდა გაუშვათ ეს მხოლოდ ერთხელ (თუ პირველად სწორად გააკეთეთ).

rrdtool შექმნა TnHdatabase.rrd-დაწყება ახლა -10s

-გადადგი ნაბიჯი '1200'

'DS: ტემპერატურა: GAUGE: 1200: -20.5: 45.5'

'DS: ტენიანობა: GAUGE: 1200: 0: 100.0'

'RRA: საშუალო: 0.5: 1: 720'

'RRA: საშუალო: 0.5: 3: 960'

'RRA: საშუალო: 0.5: 18: 1600'

დაბოლოს, მე ვიყენებ crontab ჩანაწერს, რათა გადატვირთო ჩემი TnHserver ყოველდღე შუაღამისას. მე ვაწარმოებ TnHserver– ს, როგორც ჩვეულებრივ მომხმარებელს (ანუ არა root), როგორც უსაფრთხოების ზომები.

0 0 * * */usr/bin/pkill TnHserver; /home/user/bin/TnHserver>/dev/null 2> & 1

თქვენ შეგიძლიათ შეამოწმოთ, რომ TnHserver მუშაობს

$ ps -elf | grep TnHserver

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

$ netstat -ანუ

აქტიური ინტერნეტ კავშირები (სერვერები და დამკვიდრებული)

Proto Recv-Q Send-Q ადგილობრივი მისამართი უცხოური მისამართი სახელმწიფო

udp 0 0 0.0.0.0:7777 0.0.0.0:*

საბოლოოდ CreateTnH_Graphs.sh.txt არის მაგალითი სკრიპტი გრაფიკების შესაქმნელად. (მე ვქმნი სკრიპტებს როგორც root, თქვენ შეიძლება არ გინდოდეს ამის გაკეთება.)

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

გირჩევთ: