Talaan ng mga Nilalaman:

ESP32 Smart Home Hub: 11 Mga Hakbang
ESP32 Smart Home Hub: 11 Mga Hakbang

Video: ESP32 Smart Home Hub: 11 Mga Hakbang

Video: ESP32 Smart Home Hub: 11 Mga Hakbang
Video: NodeMCU Home automation ESP8266 smart house 2024, Nobyembre
Anonim
ESP32 Smart Home Hub
ESP32 Smart Home Hub
ESP32 Smart Home Hub
ESP32 Smart Home Hub
ESP32 Smart Home Hub
ESP32 Smart Home Hub
ESP32 Smart Home Hub
ESP32 Smart Home Hub

Ang paglikha ng isang system na maaaring hawakan ang malaking halaga ng data ng sensor, magkaroon ng maraming output, at kumonekta sa internet o isang lokal na network ay tumatagal ng mahabang oras at malaking pagsisikap. Kadalasan, ang mga taong nais na gumawa ng kanilang sariling mga smart home network ay nakikipagpunyagi sa kakayahang maghanap at magtipon ng mga pasadyang sangkap sa isang mas malaking system. Iyon ang dahilan kung bakit nais kong gumawa ng isang modular at mayaman sa tampok na platform na magpapadali sa pagbuo ng mga sensor at output na konektado sa IoT.

Salamat sa DFRobot at PCBGOGO.com sa pag-sponsor ng proyektong ito!

Para sa higit pang malalim na impormasyon, bisitahin ang Github repo:

Mga gamit

  • DFRobot ESP32 FireBeetle

    www.dfrobot.com/product-1590.html

  • DHT22 Sensor

    www.dfrobot.com/product-1102.html

  • APDS9960 Light and Gesture Sensor

    www.dfrobot.com/product-1361.html

  • I2C 20x4 LCD Module

    www.dfrobot.com/product-590.html

  • Analog RGB LED Strip

    www.dfrobot.com/product-1829.html

  • DRV8825 Stepper Motor Drivers
  • Reader ng SD Card
  • NEMA17 Stepper Motors

Hakbang 1: Mga Tampok

Mga Tampok
Mga Tampok
Mga Tampok
Mga Tampok
Mga Tampok
Mga Tampok

Ang pangunahing tampok ng board na ito ay isang ESP32 FireBeetle Development Board na humahawak sa lahat ng komunikasyon, pagbabasa ng sensor, at mga output. Mayroong dalawang mga driver ng stepper motor na kumokontrol sa dalawang bipolar stepper motor.

Ang I2C bus ay nasira din para magamit sa mga sangkap tulad ng APDS9960 o isang LCD. Para sa pagbabasa ng temperatura, may mga pin na sirang upang kumonekta sa isang sensor ng DHT22, pati na rin isang photoresistor para sa pagbabasa ng mga antas ng ambient light.

Mayroong suporta para sa isang analog light strip sa board, na mayroong tatlong MOSFET dito upang himukin ang mga LED light.

Hakbang 2: PCB

PCB
PCB
PCB
PCB
PCB
PCB
PCB
PCB

Sinimulan ko ang proseso ng disenyo ng PCB sa pamamagitan ng unang paglikha ng isang eskematiko sa Eagle. Dahil hindi ako makahanap ng isang library ng ESP32 FireBeetle, gumamit lang ako ng dalawang pin na 1x18 pin na mga header. Pagkatapos, lumikha ako ng isang circuit ng pamamahala ng kuryente na maaaring tanggapin ang 12v sa pamamagitan ng isang jack ng DC bariles at i-convert ito sa 5v para sa paggana ng mga sensor at ESP32.

Matapos makumpleto ang eskematiko, lumipat ako sa pagdidisenyo ng PCB mismo.

Alam ko na ang plug ng bariles ng DC ay dapat na malapit sa harap ng board, at ang supply ng kuryente na 100uF na inaayos ang mga capacitor na kinakailangan upang malapit sa mga stepper na pag-input ng kuryente ng driver ng motor. Matapos mailatag ang lahat, nagsimula akong mag-ruta ng mga bakas.

Habang ang Oshpark ay gumagawa ng mahusay na kalidad ng mga PCB, ang kanilang mga presyo ay medyo mataas. Sa kabutihang palad, gumagawa din ang PCBGOGO.com ng magagaling na PCB sa isang abot-kayang presyo. Nakabili ako ng sampung PCB para sa $ 5 lamang, kaysa sa pagbabayad ng $ 52 para sa tatlong board lamang mula sa Oshpark.com.

Hakbang 3: Assembly

Assembly
Assembly
Assembly
Assembly
Assembly
Assembly

Sa pangkalahatan, ang pag-iipon ng board ay medyo madali. Nagsimula ako sa pamamagitan ng paghihinang sa mga naka-mount na bahagi, at pagkatapos ay ikinakabit ang konektor ng jack jack at regulator. Susunod, naghinang ako sa mga header ng pin para sa mga sangkap tulad ng mga driver ng motor at FireBeetle.

Matapos makumpleto ang paghihinang, sinubukan ko ang board para sa maikling circuit sa pamamagitan ng paglalagay ng isang multimeter sa mode ng pagsukat ng pagtutol at nakikita kung ang paglaban ay higit sa isang tiyak na halaga. Dumaan ang board, kaya't nakaya kong mai-plug ang bawat bahagi.

Hakbang 4: Pangkalahatang-ideya ng Programming

Gusto ko ang code para sa board na ito na maging modular at madaling gamitin. Nangangahulugan ito ng pagkakaroon ng maraming mga klase na humahawak sa mga tiyak na pag-andar, kasama ang isang mas malaking klase ng pambalot na pinagsasama ang mas maliit.

Hakbang 5: Mga Input

Mga input
Mga input
Mga input
Mga input
Mga input
Mga input

Para sa paghawak ng mga input, lumikha ako ng isang klase na tinatawag na "Hub_Inputs", na hinahayaan ang home hub na makipag-usap sa APDS9960, kasama ang paglikha at pamamahala ng mga pindutan at capacitive touch interface. Naglalaman ito ng mga sumusunod na pagpapaandar:

Button na lumikha

Kunin kung pinindot ang pindutan

Kumuha ng bilang ng mga pagpindot sa pindutan

Kumuha ng pinakabagong kilos

Kumuha ng capacitive touch halaga

Ang mga pindutan ay naka-imbak bilang isang struct, na may tatlong mga katangian: ay_pressed, numberPresses, at pin. Ang bawat pindutan, kapag nilikha, ay nakakabit sa isang nakakagambala. Kapag na-trigger ang pagkagambala na iyon, ang Interrupt Service Routine (ISR) ay ipinapasa ang pointer ng pindutan na iyon (ibinigay bilang memory address nito sa array ng pindutan) at nagdaragdag ng bilang ng mga pagpindot sa pindutan, kasama ang pag-update ng halaga ng Boolean na na-ispress.

Ang mga halaga ng capacitive touch ay mas simple. Nakuha ang mga ito sa pamamagitan ng pagpasa ng touch pin sa pagpapaandar ng touchRead ().

Ang pinakabagong kilos ay na-update sa pamamagitan ng botohan ng APDS9960 at suriin kung may nakita ng anumang bagong kilos, at kung may napansin, itakda ang variable ng pribadong kilos sa kilos na iyon.

Hakbang 6: Mga Output

Mga output
Mga output
Mga output
Mga output
Mga output
Mga output

Nagtatampok ang matalinong home hub ng maraming paraan upang mag-output ng impormasyon at baguhin ang mga ilaw. May mga pin na sumisira sa I2C bus, hinahayaan ang mga gumagamit na kumonekta sa isang LCD. SA ngayon, isang sukat lamang ng LCD ang suportado: 20 x 4. Sa pamamagitan ng paggamit ng pagpapaandar na "hub.display_message ()", ang mga gumagamit ay maaaring magpakita ng mga mensahe sa LCD sa pamamagitan ng pagpasa sa isang string object.

Mayroon ding isang header ng pin upang ikonekta ang isang string ng mga analog LED. Ang pagtawag sa pagpapaandar na "hub.set_led_strip (r, g, b)", ay nagtatakda ng kulay ng strip.

Ang dalawang stepper motor ay hinihimok gamit ang isang pares ng DRV8825 driver boards. Napagpasyahan kong gamitin ang library ng BasicStepper upang hawakan ang kontrol sa motor. Kapag ang board ay na-boot up, ang dalawang mga stepper na bagay ay nilikha, at ang parehong mga motor ay pinagana. Upang hakbangin ang bawat motor, ang function na "hub.step_motor (motor_id, mga hakbang)" ay ginagamit, kung saan ang motor id ay alinman sa 0 o 1.

Hakbang 7: Pag-log

Pagtotroso
Pagtotroso
Pagtotroso
Pagtotroso
Pagtotroso
Pagtotroso

Dahil ang board ay maraming mga sensor, nais ko ang kakayahang mangolekta nang lokal at mag-log ng data.

Upang simulan ang pag-log, isang bagong file ay nilikha gamit ang "hub.create_log (filename, header)", kung saan ginagamit ang header upang makagawa ng isang hilera ng CSV file na nagsasaad ng mga haligi. Ang unang haligi ay palaging isang timestamp sa Year Month Day Hour: Min: Sec format. Upang makuha ang oras, ang pagpapaandar ng hub.log_to_file () ay nakakakuha ng oras sa pagpapaandar ng basic_function.get_time (). Ang oras ng oras ng istruktura ay pagkatapos ay ipinasa sa pamamagitan ng pagtukoy sa pag-log function, kasama ang data at filename.

Hakbang 8: Buzzer

Buzzer
Buzzer

Ano ang buti ng isang board ng IoT kung hindi ka makakapagpatugtog ng musika? Iyon ang dahilan kung bakit nagsama ako ng isang buzzer na may pagpapaandar upang magpatugtog ng mga tunog. Ang pagtawag sa "hub.play_sounds (himig, tagal, haba)" ay nagsisimulang maglaro ng isang kanta, na ang himig ay isang hanay ng mga frequency ng tala, tagal bilang isang hanay ng mga tagal ng tala, at haba ng bilang ng mga tala.

Hakbang 9: Panlabas na Mga Pagsasama ng IoT

Panlabas na Mga Pagsasama ng IoT
Panlabas na Mga Pagsasama ng IoT
Panlabas na Mga Pagsasama ng IoT
Panlabas na Mga Pagsasama ng IoT
Panlabas na Mga Pagsasama ng IoT
Panlabas na Mga Pagsasama ng IoT

Kasalukuyang sinusuportahan ng hub ang mga webhook ng IFTTT. Maaari silang ma-trigger sa pamamagitan ng pagtawag sa Hub_IoT.publish_webhook (url, data, kaganapan, key) o Hub_IoT.publish_webhook (url, data) na pagpapaandar. Nagpapadala ito ng isang kahilingan sa POST sa ibinigay na URL na may kalakip na data, kasama ang isang pangalan ng kaganapan kung kinakailangan. Upang mag-set up ng isang halimbawa ng pagsasama ng IFTTT, lumikha muna ng isang bagong applet. Pagkatapos piliin ang serbisyo ng webhook na nagti-trigger kapag natanggap ang isang kahilingan.

Susunod, tawagan ang kaganapan na "high_temp" at i-save ito. Pagkatapos, piliin ang serbisyo ng Gmail para sa bahaging "Iyon", at piliin ang opsyong "Magpadala ng email sa sarili ko". Sa loob ng pag-set up para sa serbisyo, ilagay ang "Ang temperatura ay mataas!" para sa paksa, at pagkatapos ay inilagay ko ang "Sinukat na temperatura ng {{Value1}} sa {{Naganap angAt}}", na ipinapakita ang sinusukat na temperatura at ang oras kung kailan natiyak ang kaganapan.

Pagkatapos i-set up ito, i-paste lamang ang webhook URL na nabuo ng IFTTT, at ilagay ang "high_temp" sa seksyon ng kaganapan.

Hakbang 10: Paggamit

Paggamit
Paggamit
Paggamit
Paggamit
Paggamit
Paggamit
Paggamit
Paggamit

Upang magamit ang Smart Home Hub, tawagan lamang ang anumang kinakailangang pag-andar sa alinman sa pag-setup () o loop (). Naglagay na ako ng mga halimbawang tawag sa pag-andar, tulad ng pag-print ng kasalukuyang oras at pagtawag sa isang kaganapan sa IFTTT.

Hakbang 11: Mga Plano sa Hinaharap

Mahusay na gumagana ang system ng Smart Home Hub para sa simpleng gawain sa pag-automate ng bahay at pangongolekta ng data. Maaari itong magamit para sa halos anumang, tulad ng pagtatakda ng kulay ng isang LED strip, pagsubaybay sa temperatura ng isang silid, pag-check kung may ilaw, at isang buong host ng iba pang mga potensyal na proyekto. Sa hinaharap, nais kong palawakin ang pagpapaandar nang higit pa. Maaaring isama dito ang pagdaragdag ng isang mas matatag na webserver, lokal na pag-host ng file, at maging sa Bluetooth o mqtt.

Inirerekumendang: