Мазмұны:
- Жабдықтар
- 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:23
Менің дос қызым глазхана алғысы келді, сондықтан мен оны жасадым. Бірақ мен жылыжайдың ішіндегі температура мен ылғалдылық сенсорын алғым келді. Сонымен, мен мысалдар іздеп, тәжірибе жасай бастадым.
Менің ойымша, мен тапқан барлық мысалдар дәл мен салғым келген нәрсе емес. Мен кодтың көптеген кішкене бөліктерін алып, оларды біріктірдім. Менің алғашқы жұмысымды аяқтау үшін маған біраз уақыт қажет болды, себебі көптеген мысалдардың құжаттамасын түсіну маған тым қиын болды немесе олар менің білуім керек деп ойлады ма? Бірақ мен әлі ештеңе білмедім
Сондықтан мен бұл нұсқаулықты құрдым. Барлығына түсінуге болатын «басынан аяғына дейін» оқулық. (Кем дегенде үміттенемін?)
Бұл қалай жұмыс істейді …
Соңғы өнім-бұл 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, 8 маусым 2020 ж.*/ #Include #include #include #define wifi_ssid «*** WIFI_SSID ***» // wifi ssid #wifi_password «*** WIFI_PASSWORD ***» анықтаңыз // wifi құпия сөзі #mqtt_server анықтаңыз «*** SERVER_NAME ***» // сервер атауы немесе IP #deqine mqtt_user «*** MQTT_USER ***» // пайдаланушы аты #define mqtt_password «*** MQTT_PASSWORD ***» // пароль #тақырыпты анықтау «glasshouse /dhtreadings «#define debug_topic» glasshouse /debug «// Отладкаға арналған тақырып /* терең ұйқының анықтамалары* /#define uS_TO_S_FACTOR 1000000 /* Микро секундқа түрлендіру коэффициенті* /#define TIME_TO_SLEEP 180 /* Уақыт ESP32 ұйықтайды. 5 минут ішінде (секундтарда) */ bool отладка = ақиқат; // Журнал хабарын көрсету, егер True #define DHT22_PIN 14 dht DHT; WiFiClient espClient; PubSubClient клиенті (espClient); char деректері [80]; void setup () {Serial.begin (115200); setup_wifi (); // Wifi желісіне қосылу client.setServer (mqtt_server, 1883); // MQTT қосылымын конфигурациялаңыз, қажет болса портты өзгертіңіз. if (! client.connected ()) {reconnect (); } // ДЕРЕКТЕРДІ ОҚУ int chk = DHT.read22 (DHT22_PIN); float t = DHT.температурасы; float h = DHT. ылғалдылық; DhtReadings жолы = «{» температура / «: \» « + Жол (t) +» / «, \» ылғалдылық / «: \» « + Жол (h) +» / «}»; dhtReadings.toCharArray (деректер, (dhtReadings.length () + 1)); if (отладка) {Serial.print («Температура:»); Serial.print (t); Serial.print («| Ылғалдылық:»); Serial.println (h); } // MQTT тақырыптарына мәндерді жариялау client.publish (тақырып, деректер); // Тақырып бойынша оқуларды жариялау (glasshouse/dhtreadings) if (отладка) {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 () {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 («»); } // Егер байланыс үзілсе, Wi -Fi желісіне қайта қосылыңыз. Қайта қосылыңыз () {while (! Client.connected ()) {Serial.print («MQTT брокеріне қосылуда…»); if (client.connect («ESP32Client», mqtt_user, mqtt_password)) {Serial.println («Жарайды»); } else {Serial.print («[Қате] Қосылмаған:»); Serial.print (client.state ()); Serial.println («Қайталауға 5 секунд күтіңіз.»); кешіктіру (5000); }}} жарамсыз цикл () {}
Тағы да, тіркелгі деректерін жеке куәліктермен ауыстыруды ұмытпаңыз
2 -қадам: Қосылу
Қуат алу үшін мен ескі USB кабелін қолдандым, оның USB-A коннекторын үздім. USB кабелінде төрт сым бар, бізге тек қара және қызыл сымдар қажет.
Сонымен, бәрін жоғарыдағы кестеге сәйкес қосыңыз.
3 -қадам: Python3 сценарийі
Python3 сценарийі түбірлік пайдаланушы қол жеткізетін жерге өтеді.
Мен бұл сценарий үшін /root/scripts/glasshouse/glasshouse.py қолдандым. Python сценарийінің мазмұны:
# Python3 сценарийі MQTT -ге қосылуға, мәндерді оқуға және оларды MySQL -ге жазуға арналған
# # B. Duijnhouwer # 8 маусым, 2020 жыл # # нұсқа: 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 *** « #Байланыс құпия сөзі_коннектінде (клиент, пайдаланушы деректері, жалаушалар, rc): #Клиент брокерге қосылған кезде кері байланыс (» Қосылған нәтиже кодымен {0} «. формат (str (rc))) # Қосылу әрекетінің нәтижесін басып шығару client.subscribe (» glasshouse/dhtreadings/ # «) def on_message (клиент, пайдаланушы деректері, хабар): # 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 (форматталған_күн)) 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 # Қайта қоңырау шалу функциясын анықтау үшін client.on_message = on_message сәтті байланыс
MySQL пайдаланушы аты мен құпия сөзді және MQTT пайдаланушы аты мен құпия сөзді өзіңіздің жеке мәліметтеріңізге ауыстыруды ұмытпаңыз
Екі файлды құру арқылы сценарийді қызмет ретінде іске қосуға болады.
Біріншісі - келесі мазмұндағы “/etc/init/glasshouse.conf”:
жүгіру деңгейінен бастау [2345]
жүгіру деңгейінде тоқтату [! 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 Glasshouse қосады
және оны пайдаланып бастаңыз:
systemctl glasshouse іске қосыңыз
4 -қадам: MySQL сервері
Сізде тек бір кесте бар жаңа MySQL мәліметтер базасын құру қажет.
Кестені құрудың коды:
КЕСТЕ ЖАСАУ `sensordata` (`idx` int (11) DEFAULT NULL,` temperatur` 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); # Бұл уақыт - цикл пішімдейді және барлық алынған деректерді ['уақыт белгісі', 'температура', 'ылғалдылық'] әдісіне қояды. while ($ row = $ result-> fetch_assoc ()) {$ timestamp_rest = substr ($ row [«timestamp»], 10, 6); echo «['». $ timestamp_rest. «',». $ row ['температура']. «,». $ қатар ['ылғалдылық']. «],»; // echo «['». $ timestamp_rest. «',». $ row ['temperature']. «,». $ row ['ылғалдылық']. «,». $ row ['heatindex ']. «],»;}?>]); // қисық сызық var options = {тақырып: 'Температура мен ылғалдылық', curveType: 'функция', белгі: {позиция: 'төменгі'}, 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 кабелімен зарядтауға болады.
Ұсынылған:
Arduino көмегімен Servo және DHT11 температура мен ылғалдылық сенсоры арқылы автоматты салқындату желдеткіші: 8 қадам
Arduino көмегімен Servo және DHT11 температура мен ылғалдылық сенсоры арқылы автоматты салқындату желдеткіші: Бұл оқулықта біз қалай бастауды үйренеміз & температура белгілі бір деңгейден жоғары көтерілгенде желдеткішті айналдырыңыз
DHT21 сандық температура мен ылғалдылық сенсоры Arduino көмегімен: 6 қадам
DHT21 Arduino көмегімен сандық температура мен ылғалдылық сенсоры: Бұл оқулықта біз DHT21 ылғалдылық пен температура сенсорын Arduino көмегімен қалай қолдану керектігін және OLED дисплейінде мәндерді көрсетуді үйренеміз
AWS және ESP32 көмегімен температура мен ылғалдылық туралы ескерту: 11 қадам
AWS және ESP32 көмегімен температура мен ылғалдылық туралы ескерту: Бұл оқулықта біз температура мен ылғалдылық сенсорының көмегімен температура мен ылғалдылықтың әр түрлі деректерін өлшейміз. Сіз бұл деректерді AWS -ке жіберуді үйренесіз
DHT11 Arduino көмегімен температура мен ылғалдылық сенсоры: 5 қадам
DHT11 Arduino көмегімен температура мен ылғалдылық сенсоры: Бүгін мен сізге DHT11 температура мен ылғалдылық сенсоры бар KY-015 температура мен ылғалдылық сенсорының модулін қалай қолдануды үйретемін. !:
PYTHON & Zerynth IDE көмегімен Esp32 температура мен ылғалдылық веб -сервері: 3 қадам
PYTHON & Zerynth IDE көмегімен Esp32 температура мен ылғалдылық веб-сервері: Esp32-бұл керемет микроконтроллер, ол Arduino сияқты қуатты, бірақ одан да жақсы! Wi-Fi байланысы бар, бұл IOT жобаларын арзан әрі оңай дамытуға мүмкіндік береді. құрылғылар ренжітуде, алдымен тұрақсыз, Secon