Агуулгын хүснэгт:
- Хангамж
- Алхам 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 11:01
Найз охин маань шилэн байшин авахыг хүсч байсан тул би түүнийг хийсэн. Гэхдээ би шилэн байшин доторх температур, чийгшлийн мэдрэгчийг авахыг хүссэн. Тиймээс, би жишээ татаж, туршилт хийж эхлэв.
Миний олж мэдсэн бүх жишээнүүд яг миний барихыг хүссэн зүйл биш байсан гэж би дүгнэсэн. Би кодын олон жижиг хэсгүүдийг барьж аваад нэгтгэсэн. Ихэнх жишээнүүдийн баримт бичгийг ойлгоход надад хэтэрхий хэцүү байсан эсвэл миний мэдэх ёстой хэсгийг авсан гэж бодож байсан тул анхны ажлынхаа ажлыг дуусгахад надад маш их хугацаа шаардагдсан уу? Гэхдээ би юу ч мэдэхгүй байсан (хараахан)
Тийм учраас би үүнийг сургамжтай байдлаар бүтээсэн. Хүн бүрт ойлгуулах "эхнээс нь дуустал" заавар. (Наад зах нь би найдаж байна уу?)
Хэрхэн ажилладаг …
Эцсийн бүтээгдэхүүн бол ESP32-CAM бөгөөд DHT22 мэдрэгчийг хавсаргасан бөгөөд 18650 батерейгаар цэнэглэдэг. Гурван минут тутамд температур, чийгшлийг уншиж, WiFi -ээр дамжуулан гадны MQTT сервер рүү илгээдэг бөгөөд дараа нь унтаж (гурван минутын турш) зайгаа бага зарцуулдаг
Debian сервер дээр (энэ нь бас бөөрөлзгөнө pi байж магадгүй) надад python3, MQTT сервер, MySQL сервер, вэб сервер байдаг
Python3 скрипт нь үйлчилгээгээр ажилладаг бөгөөд MQTT мессеж хүлээн авах бүрт өмнөх оруулгуудын тоог (индексийн дугаар) тоолж, үүнийг нэгээр нэмэгдүүлдэг. Дараа нь MQTT мессежээс температур, чийгшлийн утгыг уншдаг. Энэ нь хуурамч утгыг шалгадаг бөгөөд утгууд зөв байх үед утгыг шинэ индексийн дугаар, одоогийн огноо, цагийн хамт MySQL сервер рүү илгээдэг
Вэб сервер нь PHP скрипттэй бөгөөд MySQL серверийн утгыг уншдаг бөгөөд үүнээс Google график ашиглан сайхан график гаргадаг. (жишээ)
Хангамж
Миний ашигласан хэсгүүд нь дараахь зүйлүүд юм.
- ESP32-CAM (Камерын хувилбарыг ашиглах болсон шалтгаан нь гаднах антенны холбогчтой. Учир нь өөр ESP32-ийг ашиглах боломжтой байх магадлалтай)
- Гадаад антен
-
AM2302 DHT22 мэдрэгч (Энэ нь суурилуулсан эсэргүүцэлтэй тул танд зөвхөн гурван утас хэрэгтэй болно)
https://www.amazon.de/gp/product/B07CM2VLBK/ref=p…
- 18650 зайны бамбай v3
- 18650 батерей (NCR18650B)
- Хуучин микро USB кабель (ESP32 -ийг зайны бамбай руу холбох зориулалттай)
- Зарим богино холбогч утас
Нэмэлт шаардлагатай:
-
USB -ээс TTL холбогч (зураг)
https://www.amazon.de/FT232RL-Seriell-Unterst%C3%…
- Гагнуурын төмөр
- 3D принтер (зөвхөн орон сууцны зориулалттай)
Алхам 1: Arduino кодыг ESP32-CAM дээр байршуулна уу
Тиймээс эхэлцгээе!
Arduino кодыг ESP32-CAM-д байршуулахын тулд дээрх схемийг ашиглан USBtoTTL холбогчийг ESP32-тэй холбох ёстой.
Arduino код нь:
/*DHT22 мэдрэгч ба температур, чийгшлийг унших жижиг програм
үүнийг MQTT руу дамжуулна уу. B. Duijnhouwer June, 8th 2020*/#include #include #include #define wifi_ssid "*** WIFI_SSID ***" // wifi ssid #wifi_password "*** WIFI_PASSWORD ***" -ийг тодорхойлох // wifi нууц үг #mqtt_server -ийг тодорхойлох "*** SERVER_NAME ***" // серверийн нэр эсвэл IP #mftt_user -ийг тодорхойлох "*** MQTT_USER ***" // хэрэглэгчийн нэр #define mqtt_password "*** MQTT_PASSWORD ***" // нууц үг #сэдвийг тодорхойлох "glasshouse /dhtreadings "#define debug_topic" glasshouse /debug "// Дебаг хийх сэдэв /* гүн нойрны тодорхойлолт* /#define uS_TO_S_FACTOR 1000000 /* Микро секундээр секундэд хөрвүүлэх хүчин зүйл* / #тодорхойлох TIME_TO_SLEEP 180 /* Цаг ESP32 унтах болно. 5 минутын турш (секундын дотор) */ bool debug = үнэн; // Үнэн бол 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 ()) {reconnect (); } // REAT DATA int chk = DHT.read22 (DHT22_PIN); float t = DHT. температур; хөвөх h = DHT. чийгшил; String dhtReadings = "{" температур / ": \" " + String (t) +" / ", \" чийгшил / ": \" " + String (h) +" / "}"; dhtReadings.toCharArray (өгөгдөл, (dhtReadings.length () + 1)); if (debug) {Serial.print ("Температур:"); Цуваа.хэвлэх (t); Serial.print ("| Чийгшил:"); Serial.println (h); } // MQTT сэдвүүдэд утгыг нийтлэх client.publish (сэдэв, өгөгдөл); // Сэдвийн талаархи уншлагыг нийтлэх (glasshouse/dhtreadings) if (debug) {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 void setup_wifi () {delay (20); Serial.println (); Serial.print ("Холбогдож байна"); Serial.println (wifi_ssid); WiFi.begin (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"); } өөр {Serial.print ("[Алдаа] Холбогдоогүй:"); Serial.print (client.state ()); Serial.println ("Дахин оролдохын өмнө 5 секунд хүлээнэ үү."); саатал (5000); }}} void loop () {}
Мөн дахин итгэмжлэлийг өөрийн итгэмжлэлээр солихоо бүү мартаарай
Алхам 2: Цахилгааны утас
Эрчим хүч авахын тулд би хуучин USB кабель ашиглаж, USB-A холбогчийг таслав. USB кабельд дөрвөн утас байдаг, бидэнд зөвхөн хар, улаан утас л хэрэгтэй.
Тиймээс дээрх хуваарийн дагуу бүх зүйлийг холбоно уу.
Алхам 3: Python3 скрипт
Python3 скрипт нь үндсэн хэрэглэгчид хандах боломжтой газар руу ордог.
Би энэ скриптэд /root/scripts/glasshouse/glasshouse.py ашигласан. Питон скриптийн агуулга нь:
# Python3 скрипт нь MQTT -д холбогдох, утгыг уншиж, MySQL -д бичих
# # B. Duijnhouwer # 2020 оны 6 -р сарын 8 # # хувилбар: 1.0 # # paho.mqtt.client -ийг mqtt импортлох json импортлох pymysql pymysql.install_as_MySQLdb () нь MySQLdb -ийг datetime импорт datetime db = MySQLdb.connect ("localhost", "glasshouse", "*** MYSQL_USERNAME ***", "*** MYSQL_PASSWORD ***") курсор = db.cursor () broker_address = "localhost" #Брокерын хаягийн порт = 1883 #Брокерын портын хэрэглэгч = "** *MQTT_USERNAME *** "#Connection хэрэглэгчийн нэр нууц үг =" *** MQTT_PASSWORD *** " #Холболтын нууц үг on_connect дээр (үйлчлүүлэгч, хэрэглэгчийн өгөгдөл, туг, rc): #Үйлчлүүлэгч брокертой холбогдох үед дуудлага хийх дуудлага хэвлэх (" Холбогдсон үр дүнгийн кодтой {0} ". формат (str (rc))) # Холболтын оролдлогын үр дүнг хэвлэх client.subscribe (" glasshouse/dhtreadings/ # ") def on_message (client, userdata, msg): # Хэзээ PUBLISH мессежийг серверээс хүлээн авсан болно. cursor.execute ("sensordata-аас * сонгох") numrows = int (cursor.rowcount) newrow = numrows + 1 now = datetime.now () formatted_date = now.strftime ('%Y-%m-%d%H:% M:%S ') ачаалал = json.loads (msg.payload.decode (' utf-8 ')) хэвлэх ("Шинэ мөр:"+str (newrow)) температур = хөвөх (ачаалал ["температур"]) чийгшил = хөвөх (ачаалал ["чийгшил"]) хэвлэх ("Температур:"+str (температур)) хэвлэх ("Чийглэг:"+str (чийгшил)) хэвлэх ("DateTime:"+str (formatatt_date)) if ((температур > -20) ба (температур = 0) ба (чийгшил <= 100)): cur = db.cursor () cur.execute ("INSERT INTO glasshouse.sensordata (idx, температур, чийгшил, цагийн тэмдэг) VALUES ("+str) (newrow)+","+str (температур)+","+str (чийгшил)+", %s)", (форматлагдсан_ огноо)) db.commit () хэвлэх ("өгөгдлийг MySQL -д хүлээн авч импортолсон") өөр: хэвлэх ("өгөгдөл хязгаараас хэтэрсэн бөгөөд MySQL-д импортлогдоогүй") client = mqtt. Client ("duijnhouwer-com-glasshouse-script") client.username_pw_set (хэрэглэгч, нууц үг = нууц үг) client.on_connect = on_connect # Дахин дуудлага хийх функцийг тодорхойлох -ийн хувьд амжилттай холбогдсон клиент.он_мессеж = on_message # Мессеж хүлээн авахын тулд буцааж залгах функцийг тодорхойл. клиентийг холбох (брокерын хаяг, порт = порт)
MySQL хэрэглэгчийн нэр, нууц үг, MQTT хэрэглэгчийн нэр, нууц үгээ өөрийн итгэмжлэлээр солихоо бүү мартаарай
Та хоёр файл үүсгэснээр скриптийг үйлчилгээ болгон ажиллуулж болно.
Эхнийх нь дараах агуулгатай "/etc/init/glasshouse.conf" юм.
гүйлтийн түвшинг эхлүүлэх [2345]
Run level дээр зогсох [! 2345] exec /root/scripts/glasshouse/glasshouse.py
Хоёр дахь нь "/etc/systemd/system/multi-user.target.wants/glasshouse.service" нь дараах агуулгатай:
[Нэгж]
Тодорхойлолт = Glasshouse Хяналтын үйлчилгээ дараа = multi-user.target [Үйлчилгээ] Төрөл = энгийн дахин эхлүүлэх = үргэлж RestartSec = 1 ExecStart =/usr/bin/python3 /root/scripts/glasshouse/glasshouse.py [Суулгах] WantedBy = олон хэрэглэгч.байр
Та үүнийг дараах командыг ашиглан үйлчилгээ болгон ажиллуулж болно.
systemctl нь шилэн байшинг идэвхжүүлнэ
мөн үүнийг ашиглан эхлүүлнэ үү:
systemctl glasshouse эхлүүлэх
Алхам 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 функц query ($ sql); # This while - давталтыг форматлаж, олж авсан бүх өгөгдлийг ['timestamp', 'temperature', 'чийгшил'] байдлаар оруулна. while ($ row = $ result-> fetch_assoc ()) {$ timestamp_rest = substr ($ row ["timestamp"], 10, 6); echo "['". $ timestamp_rest. "',". $ row ['temperature']. ",". $ row ['чийгшил']. "],"; // echo "['". $ timestamp_rest. "',". $ row ['temperature']. ",". $ row ['чийгшил']. ",". $ row ['heatindex ']. "],";}?>]); // Муруй шугам var options = {гарчиг: 'Температур ба чийгшил', curveType: 'функц', домог: {байрлал: 'доод'}, hAxis: {slantedText: үнэн, slantedTextAngle: 45}}; // Муруй диаграм var chart = new google.visualization. LineChart (document.getElementById ('curve_chart'))); chart.draw (өгөгдөл, сонголтууд); } // DrawChart -аас хаалт дуусгах //
Алхам 6: 3D хэвлэсэн орон сууц
Орон сууцны хувьд би ESP32-CAM ба DHT22-ийн хамт, 18650 батерейны хамгаалалтын зориулалттай хоёр тусдаа орон сууц ашигласан.
Алхам 7: Эцсийн үр дүн
Эцсийн үр дүнг мөн дээрх зургуудад харуулав.
Батерей дуусах үед та мини USB кабелиар цэнэглэж болно.
Зөвлөмж болгож буй:
M5STACK Visuino ашиглан M5StickC ESP32 дээр температур, чийгшил, даралтыг хэрхэн харуулах вэ - Хийхэд хялбар: 6 алхам
M5STACK Visuino ашиглан M5StickC ESP32 дээр температур, чийгшил, даралтыг хэрхэн харуулах вэ - Хийхэд хялбар: Энэхүү гарын авлагад бид ENV мэдрэгч (DHT12, BMP280, BMM150)
Arduino -ийн тусламжтайгаар Servo болон DHT11 температур ба чийгшил мэдрэгч ашиглан авто хөргөх сэнс: 8 алхам
Arduino -ийн тусламжтайгаар Servo болон DHT11 -ийн температур ба чийгшил мэдрэгчийг ашиглан автомат хөргөлтийн сэнс: Энэ хичээлд бид хэрхэн эхлүүлэх талаар сурах болно. температур тодорхой түвшингээс дээш гарах үед сэнсийг эргүүлнэ
DHT12 I2C чийгшил ба температур мэдрэгчийг Arduino ашиглан хэрхэн ашиглах вэ: 7 алхам
DHT12 I2C -ийн чийгшил ба температур мэдрэгчийг Arduino -той хэрхэн ашиглах вэ: Энэхүү гарын авлагад бид DHT12 I2C -ийн чийгшил ба температур мэдрэгчийг Arduino -той хэрхэн ашиглаж, OLED дэлгэц дээр утгыг харуулах болно
LoRa ашиглан хүлэмжийг автоматжуулах! (1 -р хэсэг) -- Мэдрэгч (температур, чийгшил, хөрсний чийгшил): 5 алхам
LoRa ашиглан хүлэмжийг автоматжуулах! (1 -р хэсэг) || Мэдрэгч (температур, чийгшил, хөрсний чийгшил): Энэ төсөлд би хүлэмжийг хэрхэн автоматжуулсан болохыг харуулах болно. Энэ нь би хүлэмжийг хэрхэн яаж барьснаа, цахилгаан болон автоматжуулалтын электроникийг хэрхэн холбосныг харуулах болно гэсэн үг юм. Түүнчлэн би L ашигладаг Arduino самбарыг хэрхэн програмчлахыг танд үзүүлэх болно
ESP8266 NodeMCU хандалтын цэг (AP) нь DT11 температур мэдрэгчтэй, хөтөч дэх температур ба чийгшил бүхий вэб серверийн хувьд: 5 алхам
Хөтөч дээр DT11 температур мэдрэгч, хэвлэх температур ба чийгшил бүхий вэб серверт зориулсан ESP8266 NodeMCU хандалтын цэг (AP): Сайн байна уу залуус бид ESP8266 -ийг ашигладаг ихэнх төслүүд болон ихэнх төслүүдэд ESP8266 -ийг вэб сервер болгон ашигладаг тул өгөгдөлд хандах боломжтой. ESP8266 -аас зохион байгуулагдсан вэбсервер рүү нэвтрэх замаар wifi сүлжээнд холбогдсон ямар ч төхөөрөмж, гэхдээ цорын ганц асуудал бол бидэнд ажиллах чиглүүлэгч хэрэгтэй болно