Mundarija:
2025 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2025-01-23 15:14
Mening qiz do'stim glasshausni xohlardi, shuning uchun men uni shunday qildim. Lekin men issiqxona ichidagi harorat va namlik sensori kerak edi. Shunday qilib, men misollar uchun googledan o'tdim va tajriba qila boshladim.
Mening xulosam shuki, men topgan barcha misollar men qurmoqchi bo'lgan narsa emas edi. Men kodning ko'plab kichik qismlarini oldim va ularni birlashtirdim. Birinchi ishimni tugatishimga ancha vaqt kerak bo'ldi, chunki ko'pgina misollarni hujjatlashtirish men uchun juda qiyin edi yoki ular men bilishim kerak deb o'ylashdi. Lekin men hech narsani bilmasdim (hali)
Shuning uchun men bu ko'rsatmalarni yarataman. Hamma tushunishi mumkin bo'lgan "boshidan oxirigacha" darslik. (Hech bo'lmaganda umid qilamanmi?)
U qanday ishlaydi …
Yakuniy mahsulot-bu ESP32-CAM, unga DHT22 sensori o'rnatilgan, u 18650 batareyadan quvvat oladi. Har uch daqiqada u harorat va namlikni o'qiydi va Wi -Fi orqali tashqi MQTT serveriga yuboradi va kerak bo'lganda batareyani kamroq sarflash uchun uxlab qoladi (uch daqiqa)
Debian serverida (menimcha, bu malina pi ham bo'lishi mumkin) menda python3, MQTT serveri, MySQL -server va veb -server bor
Python3 skript xizmati sifatida ishlaydi va har safar MQTT xabarini olganida, u oldingi yozuvlar sonini (indeks raqami) hisoblab chiqadi va uni birma -bir oshiradi. Keyin u MQTT xabaridan harorat va namlik qiymatlarini o'qiydi. U noto'g'ri qiymatlarni tekshiradi va qiymatlar to'g'ri bo'lganda, u yangi indeks raqami va joriy sana va vaqtni MySQL serveriga yuboradi
Veb -server PHP skriptiga ega, u MySQL -server qiymatlarini o'qiydi va undan Google grafiklari yordamida yaxshi grafik hosil qiladi. (misol)
Ta'minotlar
Men ishlatgan qismlar quyidagilar:
- ESP32-CAM (Kamera versiyasini ishlatganimning sababi shundaki, u erda tashqi antenna ulagichi bor. Siz ishlatadigan boshqa ESP32 ham bo'lishi mumkin)
- Tashqi antenna
-
AM2302 DHT22 sensori (bu o'rnatilgan rezistorga ega, shuning uchun sizga faqat uchta sim kerak bo'ladi)
https://www.amazon.de/gp/product/B07CM2VLBK/ref=p…
- 18650 batareya qalqoni v3
- 18650 batareya (NCR18650B)
- Eski mikro USB kabeli (ESP32 -ni batareya ekraniga ulash uchun)
- Ba'zi qisqa o'tish simlari
Qo'shimcha kerak:
-
USB -TTL ulagichi (rasm)
https://www.amazon.de/FT232RL-Seriell-Unterst%C3%…
- Lehimlash temir
- 3D printer (faqat korpus uchun kerak)
1-qadam: Arduino kodini ESP32-CAM-ga yuklang
Shunday qilib, boshlaylik!
Arduino kodini ESP32-CAM-ga yuklash uchun yuqoridagi sxemalar yordamida USBtoTTL ulagichini ESP32-ga ulashingiz kerak.
Arduino kodi:
/*DHT22 sensoridan harorat va namlikni o'qish uchun kichik dastur
uni MQTT ga o'tkazing. B. Duijnhouwer, 8 -iyun, 2020*/#include #include #include #deifine wifi_ssid "*** WIFI_SSID ***" // wifi ssid #wifi_password "*** WIFI_PASSWORD ***" // wifi paroli #mqtt_serverni belgilang "*** SERVER_NAME ***" // server nomi yoki IP #define mqtt_user "*** MQTT_USER ***" // foydalanuvchi nomi #define mqtt_password "*** MQTT_PASSWORD ***" // parol #mavzuni belgilash "glasshouse /dhtreadings "#define debug_topic" glasshouse /debug "// Tuzatish uchun mavzu /* chuqur uyqu uchun ta'riflar* /#define uS_TO_S_FACTOR 1000000 /* Mikro soniyalar soniyasiga konversiya faktori* /#define TIME_TO_SLEEP 180 /* Vaqt ESP32 uxlab qoladi. 5 daqiqa davomida (soniyalarda) */ bool disk raskadrovka = rost; // Jurnal xabarini ko'rsatish True #define DHT22_PIN 14 dht DHT; WiFiClient espClient; PubSubClient mijozi (espClient); char ma'lumotlari [80]; void setup () {Serial.begin (115200); o'rnatish_wifi (); // Wifi tarmog'iga ulanish client.setServer (mqtt_server, 1883); // MQTT ulanishini sozlang, agar kerak bo'lsa portni o'zgartiring. if (! client.connected ()) {reconnect (); } // O'QING DATA int chk = DHT.read22 (DHT22_PIN); float t = DHT.harorat; float h = DHT. namlik; Qator dhtReadings = "{" harorat / ": \" " + String (t) +" / ", \" namlik / ": \" " + String (h) +" / "}"; dhtReadings.toCharArray (ma'lumotlar, (dhtReadings.length () + 1)); if (disk raskadrovka) {Serial.print ("Harorat:"); Ketma -ket chop etish (t); Serial.print ("| Namlik:"); Serial.println (h); } // MQTT mavzulariga qiymatlarni chop etish client.publish (mavzu, ma'lumotlar); // Mavzu bo'yicha o'qishlarni nashr etish (glasshouse/dhtreadings) if (debug) {Serial.println ("O'qishlar MQTTga yuborilgan."); } esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); // uyquga ket Serial.println ("ESP32 ni har bir kishi uchun uxlash uchun sozlash" + String (TIME_TO_SLEEP) + "Sekund"); Serial.println ("Hozir odatdagidek uxlayman."); esp_deep_sleep_start (); } // Wi -Fi ulanishini sozlash void setup_wifi () {delay (20); Serial.println (); Serial.print ("Ulanish"); Serial.println (wifi_ssid); WiFi.begin (wifi_ssid, wifi_password); while (WiFi.status ()! = WL_CONNECTED) {kechiktirish (100); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi yaxshi"); Serial.print ("=> ESP32 yangi IP -manzili:"); Serial.print (WiFi.localIP ()); Serial.println (""); } // Agar ulanish uzilib qolsa, Wi -Fi tarmog'iga qayta ulanish bekor qilinadi () {while (! Client.connected ()) {Serial.print ("MQTT brokeriga ulanmoqda …"); agar (client.connect ("ESP32Client", mqtt_user, mqtt_password)) {Serial.println ("OK"); } else {Serial.print ("[Xato] Ulanmagan:"); Serial.print (client.state ()); Serial.println ("Qayta urinishdan oldin 5 soniya kuting."); kechikish (5000); }}} void loop () {}
Va yana, ishonchnoma ma'lumotlarini o'zingizning shaxsiy ma'lumotlaringiz bilan almashtirishni unutmang
2 -qadam: Quvvatlaning
Quvvat uchun men USB-A ulagichini uzib tashlagan eski USB kabelidan foydalandim. USB kabelida to'rtta sim bor, bizga faqat qora va qizil simlar kerak.
Shunday qilib, hamma narsani yuqoridagi jadvalga muvofiq ulang.
3 -qadam: Python3 skript
Python3 skripti ildiz foydalanuvchisi kira oladigan joyga kiradi.
Men bu skript uchun /root/scripts/glasshouse/glasshouse.py dan foydalandim.
MQTT -ga ulanish, qiymatlarni o'qish va ularni MySQL -ga yozish uchun # Python3 skript
# # B. Duijnhouwer # 8 iyun, 2020 yil # # versiya: 1.0 # # import paho.mqtt.client mqtt import json import pymysql pymysql.install_as_MySQLdb () import MySQLdb datetime import datetime db = MySQLdb.connect ("localhost", "Glasshouse", "*** MYSQL_USERNAME ***", "*** MYSQL_PASSWORD ***") kursor = db.cursor () broker_address = "localhost" #Broker manzili porti = 1883 #Broker porti foydalanuvchisi = "** *MQTT_USERNAME *** "#Connection username password =" *** MQTT_PASSWORD *** " #Connection parol on_connect (mijoz, foydalanuvchi ma'lumotlari, bayroqlar, rc): #Mijoz brokerga ulanganda qayta qo'ng'iroq qilish (" Ulangan natija kodi bilan {0} ". format (str (rc))) # Ulanish urinishining natijasi client.subscribe (" glasshouse/dhtreadings/ # ") def on_message (client, userdata, msg): # Qachonki PUBLISH xabari serverdan qabul qilindi. cursor.execute ("sensordata-dan * tanlang") numrows = int (cursor.rowcount) newrow = numrows + 1 hozir = datetime.now () formatted_date = now.strftime ('%Y-%m-%d%H:% M:%S ') yuk = json.loads (msg.payload.decode (' utf-8 '))) chop etish ("Yangi qator:"+str (yangidan)) harorat = suzuvchi (yuk ["harorat"]) namlik = float (yuk ["namlik"]) chop etish ("Harorat:"+str (harorat)) chop etish ("Namlik:"+str (namlik)) chop etish ("DateTime:"+str (formatlangan_date)) agar ((harorat > -20) va (harorat = 0) va (namlik <= 100)): cur = db.cursor () cur.execute ("INSERT INTO glasshouse.sensordata (idx, harorat, namlik, vaqt tamg'asi) VALUES ("+str) (newrow)+","+str (harorat)+","+str (namlik)+", %s)", (formatlangan_data)) db.commit () chop etish ("MySQL -da olingan va import qilingan ma'lumotlar") boshqa: chop etish ("ma'lumotlar chegaralar oshdi va MySQL-ga import qilinmaydi") client = mqtt. Client ("duijnhouwer-com-glasshouse-script") client.username_pw_set (foydalanuvchi, parol = parol) client.on_connect = on_connect # Qayta qo'ng'iroq qilish funktsiyasini belgilang uchun Muvaffaqiyatli aloqa client.on_message = on_message # Xabarni qabul qilish uchun qayta qo'ng'iroq qilish funktsiyasini aniqlang. mijoz (ulanish_ manzili, port = port).
MySQL foydalanuvchi nomi va parolini hamda MQTT foydalanuvchi nomi va parolini o'z shaxsiy ma'lumotlaringizga almashtirishni unutmang
Siz ikkita fayl yaratish orqali skriptni xizmat sifatida ishga tushirishingiz mumkin.
Birinchisi, "/etc/init/glasshouse.conf" bo'lib, quyidagi tarkibga ega:
yugurish darajasidan boshlang [2345]
yugurish darajasida to'xtating [! 2345] exec /root/scripts/glasshouse/glasshouse.py
Ikkinchisi, "/etc/systemd/system/multi-user.target.wants/glasshouse.service" quyidagi tarkibga ega:
[Birlik]
Tavsif = Glasshouse monitoring xizmati keyin = multi-user.target [Service] Type = oddiy qayta ishga tushirish = har doim RestartSec = 1 ExecStart =/usr/bin/python3 /root/scripts/glasshouse/glasshouse.py [O'rnatish] WantedBy = ko'p foydalanuvchilar. maqsad
Siz buni quyidagi buyruq yordamida xizmat sifatida bajarishingiz mumkin:
systemctl glasshouse -ni yoqadi
va uni ishlatib boshlang:
systemctl glasshouse -ni ishga tushiring
4 -qadam: MySQL -server
Siz faqat bitta jadval bilan yangi MySQL ma'lumotlar bazasini yaratishingiz kerak.
Jadvalni yaratish kodi:
Jadval yaratish 'sensordata' (`idx` int (11) DEFAULT NULL,` temperatur` float DEFAULT NULL, `namlik` float DEFAULT NULL,` timestamp` datetime DEFAULT NULL) ENGINE = InnoDB DEFAULT CHARSET = utf8;
5 -qadam: veb -server
Veb -serverda ikkita fayl bor: index.php va bitta config.ini fayli
Config.ini faylining tarkibi:
[ma'lumotlar bazasi]
db_host = "localhost" db_name = "glasshouse" db_table = "sensordata" db_user = "*** DATABASE_USER ***" db_password = "*** DATABASE_PASSWORD ***"
Qaerda bo'lmasin, *** DATABASE_USER *** va *** DATABASE_PASSWORD *** ni o'z shaxsiy ma'lumotlaringiz bilan almashtiring.
google.charts.load ('joriy', {'paketlar': ['korechart']}); google.charts.setOnLoadCallback (drawChart); drawChart () {var data = google.visualization.arrayToDataTable ([// ['Vaqt tamg'asi' ',' Harorat ',' Namlik ',' Issiqlik indeksi '], [' Vaqt tamg'asi ',' Harorat ',' Namlik '], so'rov ($ sql); # Bu vaqt - pastadir formatlari va olingan barcha ma'lumotlarni ['vaqt tamg'asi', 'harorat', 'namlik'] usuliga qo'ying. while ($ row = $ result-> fetch_assoc ()) {$ timestamp_rest = substr ($ qator ["vaqt tamg'asi"], 10, 6); echo "['". $ timestamp_rest. "',". $ row ['harorat']. ",". $ qator ['namlik']. "],"; // echo "['". $ timestamp_rest. "',". $ row ['harorat']. ",". $ row ['namlik']. ",". $ row ['issiqlik indeksi ']. "],";}?>]); // Egri chiziq var variantlari = {sarlavha: 'Harorat va namlik', curveType: 'funksiya', afsona: {pozitsiya: 'pastki'}, hAxis: {slantedText: to'g'ri, slantedTextAngle: 45}}; // egri grafik var chart = new google.visualization. LineChart (document.getElementById ('curve_chart'))); chart.draw (ma'lumotlar, variantlar); } // DrawChart -dan qavsni tugatish //
6 -qadam: 3D bosma uy
Uy-joy uchun men ikkita alohida korpusdan foydalandim, biri ESP32-CAM va DHT22 uchun, ikkinchisi 18650 batareya qalqoni uchun.
7 -qadam: Yakuniy natija
Yakuniy natija yuqoridagi rasmlarda ham ko'rsatilgan.
Qachonki batareya bo'sh bo'lsa, uni mini USB kabeli bilan zaryadlashingiz mumkin.
Tavsiya:
Arduino bilan Servo va DHT11 harorat va namlik sensori yordamida avtomatik sovutish foniy: 8 qadam
Arduino bilan Servo va DHT11 harorat va namlik sensori yordamida avtomatik sovutish foniy: Bu qo'llanmada biz qanday boshlashni o'rganamiz & harorat ma'lum darajadan oshganda fanatni aylantiring
NODE MCU VA BLYNK yordamida harorat va namlik monitoringi: 5 qadam
NODE MCU VA BLYNK yordamida harorat va namlik monitoringi: Salom bolalar, bu ko'rsatmada biz MCT va BLYNK tugunlari yordamida DHT11-harorat va namlik sensori yordamida atmosfera harorati va namligini qanday olishni bilib olamiz
AWS va ESP32 yordamida harorat va namlik haqida ogohlantirish: 11 qadam
AWS va ESP32 yordamida harorat va namlik haqida ogohlantirish: Ushbu darsda biz harorat va namlik sensori yordamida harorat va namlikning har xil ma'lumotlarini o'lchaymiz. Shuningdek, siz ushbu ma'lumotlarni AWS -ga qanday yuborishni bilib olasiz
AWS-ESP32 yordamida harorat va namlik monitoringi: 8 qadam
AWS-ESP32 yordamida harorat va namlikni kuzatish: Ushbu qo'llanmada biz harorat va namlik sensori yordamida har xil harorat va namlik ma'lumotlarini o'lchaymiz. Shuningdek, siz ushbu ma'lumotlarni AWS -ga qanday yuborishni bilib olasiz
PYTHON va Zerynth IDE yordamida Esp32 harorat va namlik veb -serveri: 3 qadam
PYTHON va Zerynth IDE dan foydalanadigan Esp32 harorat va namlik veb-serveri: Esp32-bu ajoyib mikro-nazoratchi, u xuddi Arduino kabi kuchli, lekin undan ham yaxshiroq! U Wi-Fi ulanishiga ega, bu sizga IOT loyihalarini arzon va oson ishlab chiqish imkonini beradi. Lekin Esp bilan ishlash. qurilmalar asabiylashadi, birinchi navbatda barqaror emas, Secon