Мазмуну:
- Жабдуулар
- 1-кадам: Arduino кодун ESP32-CAMге жүктөңүз
- 2 -кадам: Wire Up
- 3 -кадам: Python3 Script
- 4 -кадам: MySQL Server
- 5 -кадам: Webserver
- 6 -кадам: 3D басылган турак жай
- 7 -кадам: Акыркы жыйынтык
Video: Температура жана нымдуулук ESP32-DHT22-MQTT-MySQL-PHP аркылуу: 7 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:39
Менин сүйлөшкөн кызым теплица алууну каалагандыктан, мен аны жасап бердим. Бирок мен теплицанын ичиндеги температура жана нымдуулук сенсорун кааладым. Ошентип, мен мисалдар үчүн googled жана эксперимент баштадым.
Менин тыянагым, мен тапкан бардык мисалдар так мен кургум келген жок. Мен коддун көптөгөн кичинекей бөлүктөрүн кармап, аларды бириктирдим. Биринчи жумушту бүтүрүү үчүн мага бир топ убакыт керек болду, анткени көпчүлүк мисалдардын документтерин түшүнүү мен үчүн өтө кыйын болгон же алар мен билишим керек деп ойлошконбу? Бирок мен эч нерсени билбедим (азырынча) ☹
Ошондуктан мен муну инструктивдүү кылып түздүм. Баарына түшүнүү үчүн "башынан аягына чейин" окуу куралы. (Жок дегенде үмүттөнөм?)
Бул кантип иштейт …
Акыркы продукт-бул ESP32-CAM, ага DHT22 сенсору тиркелет, ал 18650 батареясынан кубат алат. Ар бир үч мүнөттө ал температураны жана нымдуулукту окуп, WiFi аркылуу тышкы MQTT серверине жөнөтөт, андан кийин уктап калат (үч мүнөткө), керектүү батареяны азыраак колдонуу үчүн
Debian серверинде, (бул да малина пи болушу мүмкүн) менде 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*/ #кошуу #кошуу #кошуу #wifi_ssid "*** WIFI_SSID ***" // wifi ssid #wifi_password "*** WIFI_PASSWORD ***" // wifi сырсөзү #define mqtt_server "*** SERVER_NAME ***" // сервердин аты же IP #define 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 debug = true; // Дисплей журналынын билдирүүсү эгер 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 (); } // REAT DATA int chk = DHT.read22 (DHT22_PIN); float t = DHT.temperature; float h = DHT. humidity; String dhtReadings = "{" температурасы / ": \" " + Сап (t) +" / ", \" нымдуулук / ": \" " + Сап (h) +" / "}"; dhtReadings.toCharArray (маалыматтар, (dhtReadings.length () + 1)); if (debug) {Serial.print ("Температура:"); 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 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га кайра туташыңыз void reconnect () {while (! Client.connected ()) {Serial.print ("MQTT брокерине туташууда…"); if (client.connect ("ESP32Client", mqtt_user, mqtt_password)) {Serial.println ("OK"); } else {Serial.print ("[Error] Туташкан жок:"); Serial.print (client.state ()); Serial.println ("Кайталоо үчүн 5 секунд күтө туруңуз."); кечигүү (5000); }}} void loop () {}
Жана дагы, ишеним грамоталарын өздүк грамоталарыңыз менен алмаштырууну унутпаңыз
2 -кадам: Wire Up
Кубат үчүн, мен эски USB кабелин колдондум, анын USB-A туташтыргычын үзүп салдым. USB кабелинде төрт зым бар, бизге кара жана кызыл гана керек.
Ошентип, бардыгын жогорудагы график боюнча туташтырыңыз.
3 -кадам: Python3 Script
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 username password =" *** MQTT_PASSWORD *** " #Connection password on on_connect (client, userdata, flags, 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 азыр = datetime.now () formatted_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 ["температура]) нымдуулук = float (payload ["нымдуулук"]) print ("Температура:"+str (температура)) print ("Нымдуулук:"+str (нымдуулук)) print ("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 (user, password = password) client.on_connect = on_connect үчүн client.on_message = on_message ийгиликтүү байланыш
MySQL колдонуучунун атын жана сырсөзүн жана MQTT колдонуучунун атын жана сырсөзүн өздүк грамотаңызга алмаштырууну унутпаңыз
Сиз эки файлды түзүү менен сценарийди кызмат катары иштете аласыз.
Биринчиси, "/etc/init/glasshouse.conf" төмөнкүдөй мазмунду камтыйт:
чуркоо деңгээлинен баштоо [2345]
Run деңгээлинде токтотуу [! 2345] exec /root/scripts/glasshouse/glasshouse.py
Экинчиси-"/etc/systemd/system/multi-user.target.wants/glasshouse.service" төмөнкү мазмундагы:
[Бирдик]
Description = Glasshouse Мониторинг кызматы Кийин = multi-user.target [Кызмат] Түрү = жөнөкөй Кайра баштоо = дайыма RestartSec = 1 ExecStart =/usr/bin/python3 /root/scripts/glasshouse/glasshouse.py [Орнотуу] WantedBy = көп колдонуучу.target
Сиз бул буйрукту төмөнкү кызмат катары иштете аласыз:
systemctl glasshouse иштетет
жана аны колдонуп баштаңыз:
systemctl glasshouse баштоо
4 -кадам: MySQL Server
Сиз жаңы MySQL маалымат базасын түзүшүңүз керек, анын ичинде бир гана стол бар.
Таблицаны түзүү коду:
TABLE CREATE `sensordata` (`idx` int (11) DEFAULT NULL,` temperature` float DEFAULT NULL, `moist`` float DEFAULT NULL,` timestamp` datetime DEFAULT NULL) ENGINE = InnoDB DEFAULT CHARSET = utf8;
5 -кадам: Webserver
Веб -серверде эки файл бар, 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 ([// ['Убакыт белгиси', 'Температура', 'Нымдуулук', 'Жылуулук индекси'], ['Убакыт белгиси', 'Температура', 'Нымдуулук'], query ($ sql); # This while - цикл форматтары жана алынган бардык маалыматтарды ['убакыт белгиси', 'температура', 'нымдуулук'] жолуна коюу. 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 кабели менен кубаттай аласыз.
Сунушталууда:
Авто муздатуу күйөрманы Arduino менен Servo жана DHT11 температура жана нымдуулук сенсорун колдонуп: 8 кадам
Авто муздатуу күйөрманы Arduino менен Servo жана DHT11 температура жана нымдуулук сенсорун колдонуп: Бул окуу куралында биз кантип баштоону үйрөнөбүз & температура белгилүү бир деңгээлден жогору көтөрүлгөндө желдеткичти айлантуу
Lcd жана үн аныктоо менен температура жана нымдуулук сенсору: 4 кадам
Lcd жана үн аныктоо менен температура жана нымдуулук сенсору: Салам балдар !!! Макул, бул долбоор менин акыркы жылдагы долбоорум болчу. Бул долбоордун максаты менин университетимдин семинарында бөлмө температурасын жана нымдуулугун көзөмөлдөө болчу, анткени кээ бир электрондук компоненттер жагымсыз температуранын жана аба ырайынын бузулушунан улам иштебей калган
DHT11 температура сенсорун Arduino жана басып чыгаруу температурасы жылуулук жана нымдуулук менен кантип колдонсо болот: 5 кадам
DHT11 температура сенсорун Arduino жана Print Temperature Heat and Humidity менен кантип колдонуу керек: DHT11 сенсору температураны жана нымдуулукту өлчөө үчүн колдонулат. DHT11 нымдуулук жана температура сенсорлору абдан популярдуу электроника хоббистери. DIY электроника долбоорлоруна нымдуулукту жана температура маалыматын кошууну абдан оңой кылат. Бул боюнча
Температура жана нымдуулук сенсору Arduino жана Lcd дисплейи менен: 4 кадам
Температура жана нымдуулук сенсору Arduino жана Lcd дисплейи менен: Саламатсыздарбы балдар, Артуиного кайра кош келиңиздер. Сиз көргөндөй, мен InstructableToday программасын баштадым, биз температураны & DHT11 модулу менен нымдуулук өлчөгүч. Келгиле, баштайлы PS. Жазылууну жана видеону жактырууну карап көрүңүз
Bluetooth аркылуу Ардуинодон Android Телефонуна SD Карта Модулу менен Температура жана Нымдуулук маалыматын жазуучу: 5 кадам
Температура жана нымдуулук боюнча маалымат жазуучу Arduino тартып Android телефонуна SD карта модулу аркылуу Bluetooth аркылуу: Саламатсыздарбы, бул менин биринчи инструкциям, үмүт кылам, мен жаратуучулар коомчулугуна жардам бердим. Биз көбүнчө долбоорлорубузда сенсорлорду колдонобуз, бирок маалыматтарды чогултуунун, сактоонун жана аны дароо Телефондорду же башка түзмөктөрдү өткөрүүнүн жолун издейбиз