Агуулгын хүснэгт:

ESP32-DHT22-MQTT-MySQL-PHP ашиглан температур ба чийгшил: 7 алхам
ESP32-DHT22-MQTT-MySQL-PHP ашиглан температур ба чийгшил: 7 алхам

Видео: ESP32-DHT22-MQTT-MySQL-PHP ашиглан температур ба чийгшил: 7 алхам

Видео: ESP32-DHT22-MQTT-MySQL-PHP ашиглан температур ба чийгшил: 7 алхам
Видео: ESP32 Send Temperature and Humidity Data to localhost XAMPP for Absolute Beginners Step by Step 2024, Долдугаар сарын
Anonim
ESP32-DHT22-MQTT-MySQL-PHP ашиглан температур ба чийгшил
ESP32-DHT22-MQTT-MySQL-PHP ашиглан температур ба чийгшил

Найз охин маань шилэн байшин авахыг хүсч байсан тул би түүнийг хийсэн. Гэхдээ би шилэн байшин доторх температур, чийгшлийн мэдрэгчийг авахыг хүссэн. Тиймээс, би жишээ татаж, туршилт хийж эхлэв.

Миний олж мэдсэн бүх жишээнүүд яг миний барихыг хүссэн зүйл биш байсан гэж би дүгнэсэн. Би кодын олон жижиг хэсгүүдийг барьж аваад нэгтгэсэн. Ихэнх жишээнүүдийн баримт бичгийг ойлгоход надад хэтэрхий хэцүү байсан эсвэл миний мэдэх ёстой хэсгийг авсан гэж бодож байсан тул анхны ажлынхаа ажлыг дуусгахад надад маш их хугацаа шаардагдсан уу? Гэхдээ би юу ч мэдэхгүй байсан (хараахан)

Тийм учраас би үүнийг сургамжтай байдлаар бүтээсэн. Хүн бүрт ойлгуулах "эхнээс нь дуустал" заавар. (Наад зах нь би найдаж байна уу?)

Хэрхэн ажилладаг …

Эцсийн бүтээгдэхүүн бол 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 дээр байршуулна уу
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 кабелиар цэнэглэж болно.

Зөвлөмж болгож буй: