Სარჩევი:
- მარაგები
- ნაბიჯი 1: ატვირთეთ Arduino კოდი ESP32-CAM– ში
- ნაბიჯი 2: გათიშეთ
- ნაბიჯი 3: Python3 სკრიპტი
- ნაბიჯი 4: MySQL სერვერი
- ნაბიჯი 5: ვებ სერვერი
- ნაბიჯი 6: 3D დაბეჭდილი საცხოვრებელი
- ნაბიჯი 7: საბოლოო შედეგი
ვიდეო: ტემპერატურა და ტენიანობა ESP32-DHT22-MQTT-MySQL-PHP გამოყენებით: 7 ნაბიჯი
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:16
ჩემს შეყვარებულს მინდოდა სათბურის სახლი, ამიტომ მე ის გავაკეთე. მე მინდოდა ტემპერატურისა და ტენიანობის სენსორი სათბურის შიგნით. ასე რომ, მე გუგლში მოვიძიე მაგალითები და დავიწყე ექსპერიმენტები.
ჩემი დასკვნა იყო, რომ ყველა მაგალითი, რაც მე ვიპოვე, არ იყო ზუსტად ის, რისი აშენებაც მინდოდა. მე ავიღე კოდის ბევრი პატარა ნაწილი და გავაერთიანე ისინი. საკმაოდ დიდი დრო დამჭირდა, რომ დამემთავრებინა ჩემი პირველი სამუშაო სტრუქტურა, რადგან ბევრი მაგალითის დოკუმენტაცია ჩემთვის ძნელი გასაგები იყო, ან მათ ჩათვალეს ნაწილი, რომელიც უნდა ვიცოდე ?? მაგრამ მე ჯერ არაფერი ვიცოდი (ჯერ)
ამიტომაც ვაშენებ ამას სასწავლო. "დასაწყისიდან ბოლომდე" სამეურვეო სიტყვასიტყვით ყველას გასაგები. (მაინც იმედი მაქვს?)
Როგორ მუშაობს …
საბოლოო პროდუქტი არის ESP32-CAM, რომელსაც აქვს DHT22 სენსორი, რომელსაც აქვს ძალა 18650 ბატარეიდან. ყოველ სამ წუთში ის კითხულობს ტემპერატურასა და ტენიანობას და აგზავნის მას WiFi- ით გარე MQTT სერვერზე და შემდეგ იძინებს (სამი წუთის განმავლობაში) რათა საჭიროებისამებრ ნაკლები ბატარეა გამოიყენოს
დებიანის სერვერზე, (რომელიც ასევე შეიძლება ჟოლოს პი იყოს) მე მაქვს python3, MQTT სერვერი, MySQL სერვერი და ვებ სერვერი
Python3 სკრიპტი მუშაობს როგორც სერვისი და როდესაც ის იღებს MQTT შეტყობინებას, ითვლის ჩანაწერების წინა რაოდენობას (ინდექსის ნომერი) და ზრდის მას ერთით. შემდეგ ის კითხულობს ტემპერატურისა და ტენიანობის მნიშვნელობებს MQTT შეტყობინებიდან. ის ამოწმებს ცრუ მნიშვნელობებს და როდესაც მნიშვნელობები სწორია, ის აგზავნის მნიშვნელობებს ახალი ინდექსის ნომერთან და მიმდინარე თარიღთან და დროს MySQL სერვერთან
ვებ სერვერს აქვს PHP სკრიპტი, რომელიც კითხულობს MySQL სერვერის მნიშვნელობებს და ქმნის კარგ გრაფიკს Google Charts– ის გამოყენებით. (მაგალითი)
მარაგები
ნაწილები, რომლებიც მე გამოვიყენე, არის შემდეგი:
- ESP32-CAM (კამერის ვერსია გამოვიყენე, რადგან მას აქვს გარე ანტენის კონექტორი. ალბათ სხვა ESP32- ებიც შეგიძლიათ გამოიყენოთ)
- გარე ანტენა
-
AM2302 DHT22 სენსორი (მას აქვს ჩაშენებული რეზისტორი, ასე რომ თქვენ გჭირდებათ მხოლოდ სამი მავთული)
https://www.amazon.de/gp/product/B07CM2VLBK/ref=p…
- 18650 ბატარეის ფარი v3
- 18650 ბატარეა (NCR18650B)
- ძველი მიკრო USB კაბელი (ESP32 ბატარეის ფარის დასაკავშირებლად)
- რამდენიმე მოკლე მხტუნავი მავთული
დამატებით საჭიროა:
-
USB to TTL კონექტორი (სურათი)
https://www.amazon.de/FT232RL-Seriell-Unterst%C3%…
- გასაყიდი რკინა
- 3D პრინტერი (საჭიროა მხოლოდ საცხოვრებელი კორპუსისთვის)
ნაბიჯი 1: ატვირთეთ Arduino კოდი ESP32-CAM– ში
ასე რომ დავიწყოთ!
Arduino კოდის ასატვირთად ESP32-CAM– ზე, თქვენ უნდა დაუკავშიროთ USBtoTTL კონექტორი ESP32– ს ზემოთ სქემატების გამოყენებით.
Arduino კოდი არის:
/*სულ მცირე პროგრამა DHT22 სენსორის ტემპერატურისა და ტენიანობის წასაკითხად და
გადაეცი მას MQTT– ში. B. Duijnhouwer, 8 ივნისი, 2020 წ "*** SERVER_NAME ***" // სერვერის სახელი ან IP #განსაზღვრეთ mqtt_user "*** MQTT_USER ***" // მომხმარებლის სახელი #განსაზღვრეთ mqtt_password "*** MQTT_PASSWORD ***" // პაროლი #განსაზღვრეთ თემა "glasshouse /dhtreadings "#define debug_topic" glasshouse /debug "// თემა გამართვის /* განმარტებები ღრმა ძილში* / #განსაზღვრეთ uS_TO_S_FACTOR 1000000 /* კონვერტაციის ფაქტორი მიკრო წამებში წამებში* / #განსაზღვრეთ TIME_TO_SLEEP 180 /* დრო ESP32 დაიძინებს 5 წუთის განმავლობაში (წამში) */ bool debug = true; // აჩვენეთ ჟურნალის შეტყობინება თუ True #define DHT22_PIN 14 dht DHT; WiFiClient espClient; PubSubClient კლიენტი (espClient); char მონაცემები [80]; void setup () {Serial.begin (115200); setup_wifi (); // დაკავშირება Wifi ქსელის კლიენტთან. SetServer (mqtt_server, 1883); // MQTT კავშირის კონფიგურაცია, საჭიროების შემთხვევაში პორტის შეცვლა. if (! client.connected ()) {ხელახლა დაკავშირება (); } // წაიკითხეთ მონაცემები int chk = DHT.read22 (DHT22_PIN); float t = DHT.temperature; float h = DHT. ტენიანობა; სიმებიანი dhtReadings = "{" ტემპერატურა / ": \" " + სიმებიანი (t) +" / ", \" ტენიანობა / ": \" " + სიმებიანი (თ) +" / "}"; dhtReadings.toCharArray (მონაცემები, (dhtReadings.length () + 1)); if (გამართვა) {Serial.print ("ტემპერატურა:"); სერიული. ბეჭდვა (t); Serial.print ("| ტენიანობა:"); სერიული. ბეჭდვა (თ); } // ღირებულებების გამოქვეყნება MQTT თემებზე client.publish (თემა, მონაცემები); // საკითხების გამოქვეყნება თემაზე (glasshouse/dhtreadings) თუ (გამართვა) {Serial.println ("საკითხავი გაგზავნილია MQTT."); } esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); // დაიძინე Serial.println ("დააყენეთ ESP32, რომ დაიძინოს ყველა" + სიმებიანი (TIME_TO_SLEEP) + "წამი"); Serial.println ("ახლა ჩვეულებრივად დავიძინებ."); esp_deep_sleep_start (); } // კონფიგურაციის კავშირი wifi void setup_wifi () {დაგვიანებით (20); Serial.println (); Serial.print ("დაკავშირება"); Serial.println (wifi_ssid); WiFi. დასაწყისი (wifi_ssid, wifi_password); while (WiFi.status ()! = WL_CONNECTED) {დაგვიანებით (100); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi ნორმალურია"); Serial.print ("=> ESP32 ახალი IP მისამართი არის:"); Serial.print (WiFi.localIP ()); Serial.println (""); } // ხელახლა დაკავშირება wifi– სთან კავშირის დაკარგვის შემთხვევაში ბათილია ხელახლა დაკავშირება () {while (! Client.connected ()) {Serial.print ("დაკავშირება MQTT ბროკერთან …"); if (client.connect ("ESP32Client", mqtt_user, mqtt_password)) {Serial.println ("OK"); } else {Serial.print ("[შეცდომა] არ არის დაკავშირებული:"); Serial.print (client.state ()); Serial.println ("დაელოდე 5 წამი ხელახლა ცდამდე."); დაგვიანება (5000); }}} void loop () {}
და კიდევ, არ დაგავიწყდეთ შეცვალოთ რწმუნებათა სიგელები საკუთარი რწმუნებათა სიგელებით
ნაბიჯი 2: გათიშეთ
სიმძლავრისთვის გამოვიყენე ძველი USB კაბელი, რომლისგანაც შეწყვიტა USB-A კონექტორი. USB კაბელში არის ოთხი მავთული, ჩვენ გვჭირდება მხოლოდ შავი და წითელი.
ასე რომ, შეაერთეთ ყველაფერი ზემოთ მოცემული გრაფიკის მიხედვით.
ნაბიჯი 3: Python3 სკრიპტი
Python3 სკრიპტი გადადის იმ ადგილას, სადაც ის ხელმისაწვდომია root მომხმარებლისთვის.
მე გამოვიყენე /root/scripts/glasshouse/glasshouse.py ამ სკრიპტისთვის. პითონის სკრიპტის შინაარსია:
# Python3 სკრიპტი MQTT– თან დასაკავშირებლად, მნიშვნელობების წასაკითხად და ჩაწერისთვის MySQL– ში
# # B. Duijnhouwer # ივნისი, 8 2020 "glasshouse", "*** MYSQL_USERNAME ***", "*** MYSQL_PASSWORD ***") კურსორი = db.cursor () broker_address = "localhost" #საბროკერო მისამართის პორტი = 1883 #საბროკერო პორტის მომხმარებელი = "** *MQTT_USERNAME *** " #კავშირის მომხმარებლის სახელის პაროლი =" *** MQTT_PASSWORD *** " #დაკავშირების პაროლი def_connect (კლიენტი, მომხმარებლის მონაცემები, დროშები, rc): #გამოძახება, როდესაც კლიენტი დაუკავშირდება საბროკერო ბეჭდვას (" დაკავშირებულია შედეგის კოდით {0} ". ფორმატი (str (rc))) # ამობეჭდეთ შედეგი მცდელობა client.subscribe (" glasshouse/dhtreadings/ # ") def on_message (client, userdata, msg): # გამოძახება როდესაც PUBLISH შეტყობინება მიიღება სერვერისგან. cursor.execute ("select * from sensordata") numrows = int (cursor.rowcount) newrow = numrows + 1 now = datetime.now () formatatted_date = now.strftime ('%Y-%m-%d%H:% M:%S ') payload = json.loads (msg.payload.decode (' utf-8 ')) print ("new row:"+str (newrow)) temperature = float (payload ["temperature"]) ტენიანობა = float (payload ["ტენიანობა"]) print ("ტემპერატურა:"+str (ტემპერატურა)) print ("Humidity:"+str (ტენიანობა)) print ("DateTime:"+str (ფორმატირებული_თარიღი)) თუ ((ტემპერატურა > -20) და (ტემპერატურა = 0) და (ტენიანობა <= 100)): cur = db.cursor () cur.ececute ("INSERT INTO glasshouse.sensordata (idx, ტემპერატურა, ტენიანობა, დროის ნიშნული) ღირებულებები ("+str. (newrow)+","+str (ტემპერატურა)+","+str (ტენიანობა)+", %s)", (ფორმატირებული თარიღი)) db.commit () print ("მონაცემები მიღებული და იმპორტირებული MySQL") სხვა: print ("მონაცემები გადააჭარბა ლიმიტებს და არ არის იმპორტირებული MySQL- ში") კლიენტი = mqtt. Client ("duijnhouwer-com-glasshouse-script") client.username_pw_set (მომხმარებელი, პაროლი = პაროლი) client.on_connect = on_connect # განსაზღვრეთ გამოძახების ფუნქცია ამისთვის წარმატებული კავშირი client.on_message = on_message # განსაზღვრეთ გამოძახების ფუნქცია შეტყობინების კლიენტის მისაღებად. დაკავშირება (ბროკერის მისამართი, პორტი = პორტი) # დაკავშირება საბროკერო კლიენტთან. loop_forever () # დემონის ქსელის დაწყება
ნუ დაგავიწყდებათ, რომ შეცვალოთ MySQL მომხმარებლის სახელი და პაროლი და MQTT მომხმარებლის სახელი და პაროლი თქვენი საკუთარი სერთიფიკატებით
თქვენ შეგიძლიათ სკრიპტი გაუშვათ როგორც სერვისი ორი ფაილის შექმნით.
პირველი არის "/etc/init/glasshouse.conf" შემდეგი შინაარსით:
დაწყება გაშვების დონეზე [2345]
გაჩერება runlevel [! 2345] exec /root/scripts/glasshouse/glasshouse.py
მეორე არის “/etc/systemd/system/multi-user.target.wants/glasshouse.service” შემდეგი შინაარსით:
[ერთეული]
აღწერა = სათბურის მონიტორინგის სერვისი შემდეგ = multi-user.target [სერვისი] ტიპი = მარტივი გადატვირთვა = ყოველთვის გადატვირთვაSec = 1 ExecStart =/usr/bin/python3 /root/scripts/glasshouse/glasshouse.py [ინსტალაცია] WantedBy = მრავალ მომხმარებლისთვის.მიზანი
თქვენ შეგიძლიათ გაუშვათ ეს როგორც სერვისი შემდეგი ბრძანების გამოყენებით:
systemctl ჩართეთ სათბური
და დაიწყე მისი გამოყენება:
systemctl დაწყება სათბური
ნაბიჯი 4: MySQL სერვერი
თქვენ უნდა შექმნათ ახალი MySQL მონაცემთა ბაზა მხოლოდ ერთი ცხრილით.
ცხრილის შექმნის კოდია:
შექმენით ცხრილი `sensordata` (`idx` int (11) DEFAULT NULL,` temperature` float DEFAULT NULL, `ტენიანობა` float DEFAULT NULL,` timestamp` datetime DEFAULT NULL) ENGINE = InnoDB DEFAULT CHARSET = utf8;
ნაბიჯი 5: ვებ სერვერი
ვებ სერვერს აქვს ორი ფაილი, index.php ფაილი და ერთი config.ini ფაილი
Config.ini ფაილის შინაარსია:
[მონაცემთა ბაზა]
db_host = "localhost" db_name = "glasshouse" db_table = "sensordata" db_user = "*** DATABASE_USER ***" db_password = "*** DATABASE_PASSWORD ***"
რასაკვირველია, თქვენ შეცვლით *** DATABASE_USER *** და *** DATABASE_PASSWORD *** თქვენი საკუთარი სერთიფიკატებით.
google.charts.load ('მიმდინარე', {'პაკეტები': ['corechart']}); google.charts.setOnLoadCallback (drawChart); ფუნქცია drawChart () {var data = google.visualization.arrayToDataTable ([// ["დროის ნიშნული", "ტემპერატურა", "ტენიანობა", "სითბოს ინდექსი"], ["დროის ნიშნული", "ტემპერატურა", "ტენიანობა"], შეკითხვა ($ sql); # ამ დროს - მარყუჟის ფორმატში და ჩადეთ ყველა მოძიებული მონაცემი ['დროის ნიშნული', 'ტემპერატურა', 'ტენიანობა'] გზაში. ხოლო ($ row = $ result-> fetch_assoc ()) {$ timestamp_rest = substr ($ row ["timestamp"], 10, 6); echo "['". $ timestamp_rest. "',". $ row ['temperature']. ",". $ row ['ტენიანობა']. "],"; // echo "['". $ timestamp_rest. "',". $ row ['ტემპერატურა']. ",". $ row ["ტენიანობა"]. ",". $ row ['heatindex ']. "],";}?>]); // Curved line var options = {title: 'Temperature and ტენიანობა', curveType: 'function', legend: {position: 'bottom'}, hAxis: {slantedText: true, slantedTextAngle: 45}}; // მრუდი დიაგრამა var chart = new google.visualization. LineChart (document.getElementById ('curve_chart')); chart.draw (მონაცემები, პარამეტრები); } // ფრჩხილის დასრულება drawChart– დან //
ნაბიჯი 6: 3D დაბეჭდილი საცხოვრებელი
საცხოვრებლისთვის მე გამოვიყენე ორი ცალკეული კორპუსი, ერთი ESP32-CAM და DHT22 ერთად და ერთი 18650 ბატარეის ფარისთვის.
ნაბიჯი 7: საბოლოო შედეგი
საბოლოო შედეგი ასევე ნაჩვენებია ზემოთ მოცემულ სურათებში.
და როდესაც ბატარეა ცარიელია, შეგიძლიათ დატენოთ მინი USB კაბელით.
გირჩევთ:
M5STACK როგორ გამოვხატოთ ტემპერატურა, ტენიანობა და წნევა M5StickC ESP32 Visuino– ს გამოყენებით - ადვილია: 6 ნაბიჯი
M5STACK როგორ გამოვხატოთ ტემპერატურა, ტენიანობა და წნევა M5StickC ESP32– ზე Visuino– ს გამოყენებით - ადვილი გასაკეთებელი: ამ გაკვეთილში ჩვენ ვისწავლით თუ როგორ უნდა დავპროგრამოთ ESP32 M5Stack StickC Arduino IDE– ით და Visuino– ით ტემპერატურის, ტენიანობის და წნევის ჩვენების მიზნით ENV სენსორის გამოყენებით (DHT12, BMP280, BMM150)
სათბურის ავტომატიზაცია LoRa– ით! (ნაწილი 1) -- სენსორები (ტემპერატურა, ტენიანობა, ნიადაგის ტენიანობა): 5 ნაბიჯი
სათბურის ავტომატიზაცია LoRa– ით! (ნაწილი 1) || სენსორები (ტემპერატურა, ტენიანობა, ნიადაგის ტენიანობა): ამ პროექტში მე გაჩვენებთ როგორ ავტომატიზირებულია სათბური. ეს იმას ნიშნავს, რომ მე გაჩვენებთ თუ როგორ ავაშენე სათბური და როგორ შევაერთე ელექტროენერგიის სიმძლავრე და ავტომატიზაცია. ასევე მე გაჩვენებთ თუ როგორ უნდა დაპროგრამდეს Arduino დაფა, რომელიც იყენებს L
Arduino ამინდის სადგური BMP280 -DHT11 გამოყენებით - ტემპერატურა, ტენიანობა და წნევა: 8 ნაბიჯი
Arduino ამინდის სადგური BMP280 -DHT11 გამოყენებით - ტემპერატურა, ტენიანობა და წნევა: ამ სახელმძღვანელოში ჩვენ ვისწავლით თუ როგორ უნდა გავაკეთოთ ამინდის სადგური, რომელიც აჩვენებს ტემპერატურას, ტენიანობას და წნევას LCD ეკრანზე TFT 7735 უყურეთ საჩვენებელ ვიდეოს
მონიტორინგი-ტემპერატურა და ტენიანობა-გამოყენებით-AWS-ESP32: 8 ნაბიჯი
მონიტორინგი-ტემპერატურა-და-ტენიანობა-გამოყენებით-AWS-ESP32: ამ სახელმძღვანელოში ჩვენ გავზომავთ ტემპერატურისა და ტენიანობის სხვადასხვა მონაცემებს ტემპერატურისა და ტენიანობის სენსორის გამოყენებით. თქვენ ასევე ისწავლით თუ როგორ უნდა გაგზავნოთ ეს მონაცემები AWS– ში
Esp32 ტემპერატურა და ტენიანობა ვებ სერვერი PYTHON & Zerynth IDE გამოყენებით: 3 ნაბიჯი
Esp32 ტემპერატურისა და ტენიანობის ვებ სერვერი PYTHON & Zerynth IDE გამოყენებით: Esp32 არის ბრწყინვალე მიკროკონტროლი, ის არის ძლიერი როგორც Arduino, მაგრამ კიდევ უკეთესი! მას აქვს Wifi კავშირი, რაც საშუალებას გაძლევთ განავითაროთ IOT პროექტები იაფად და მარტივად. მაგრამ მუშაობა Esp მოწყობილობები იმედგაცრუებულია, ჯერ ის არ არის სტაბილური, მეორე