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

Гүн нойронд зайгаа хэмнэх нь: 20 алхам
Гүн нойронд зайгаа хэмнэх нь: 20 алхам

Видео: Гүн нойронд зайгаа хэмнэх нь: 20 алхам

Видео: Гүн нойронд зайгаа хэмнэх нь: 20 алхам
Видео: Шөнийн загасчлах, цуваа дотор буудаллах. Кий хойгийн аялал №1 (3-аас) 2024, Арванхоёрдугаар сар
Anonim
Image
Image
ESP32 -ийг сэрээх арга замууд
ESP32 -ийг сэрээх арга замууд

Та ESP32 төхөөрөмжөөрөө батерей ашиглах сонирхолтой байна уу? Хэрэв тийм бол би өнөөдөр энэ сэдвээр зарим чухал техникийн мэдээллийг хэлэлцэх болно. Энэхүү микроконтроллер нь мэдээлэл дамжуулахдаа маш их энерги зарцуулдаг гэдгийг бид мэднэ. Энэ нь ойролцоогоор 190 миллиамп зарцуулдаг. Энэ видеон дээр би "ГҮН УНТАХ" функцээр ESP32-ээс хэрхэн энерги хэмнэхийг харуулах болно. Бид чипийг энэ горимд оруулахаар тохируулж, энэ горимоос гарах арга замыг сурч, ESP32 -ийг сэрээх гурван өөр аргыг харуулсан жишээ бий болгоно.

Радио нь процессороос илүү их энерги зарцуулдаг гэдгийг санах нь чухал юм. Эрчим хүч хэмнэх нь маш чухал юм. Учир нь Endpoints (мэдээлэл илгээдэг хэлхээ) нь ихэвчлэн батерейгаар ажилладаг бөгөөд 5 хүртэл жил ажиллах ёстой. Зарим үйлдвэрлэгчид арав хүртэлх жилийн хугацаатай ажиллах амлалт өгдөг бөгөөд энэ нь эцсийн цэгийг төдийлөн ашигладаггүй өндөр чанартай батерейны хувьд хүчинтэй байдаг. Бусад бүх тохиолдолд би хэлхээнээсээ эрчим хүч хэмнэхийн тулд Deep Sleep -ийг ашиглахыг зөвлөж байна.

Алхам 1: Танилцуулга

ESP32 нь "Гүн нойр" нэртэй эрчим хүч хэмнэх горимтой. Энэ горимд CPU, ихэнх RAM, дижитал цагтай бүх дагалдах хэрэгслүүд унтардаг. Чипийн холбогдож болох цорын ганц хэсэг бол RTC хянагч, RTC дагалдах төхөөрөмжүүд (ULP копроцессорыг оруулаад), RTC санах ой юм.

Унтаж байхдаа ESP32 -ийг сэрээх хэд хэдэн арга бий. Гүн унтах горимд орохоосоо өмнө сэрэх эх сурвалжийг хүссэн үедээ тохируулж болно.

Алхам 2: ESP32 -ийг сэрээх арга замууд

ESP32 -ийг сэрээх таван арга бий.

• Таймер

• Гадаад сэрүүлэг (ext0)

• Гадаад сэрүүлэг (ext1)

• ULP копроцессорыг сэрээх

• Мэдрэгч самбар

Алхам 3: Таймер

RTC хянагч нь урьдчилан тодорхойлсон хугацааны дараа чипийг идэвхжүүлэхийн тулд суурилуулсан таймертай. Цагийг микросекундийн нарийвчлалтай зааж өгсөн болно.

esp_deep_sleep_enable_timer_wakeup (uint64_t time_in_us)

time_in_us> бол микросекундээр хэмжигдэх хугацаа юм

Алхам 4: Гадаад сэрэлт (ext0)

RTC IO модуль нь RTC GPIO -ийн аль нэг нь урьдчилан тодорхойлсон логик түвшинд орох үед дохиолол өгөх логикийг агуулдаг. RTC IO нь RTC -ийн дагалдах хэрэгслийн цахилгаан домэйны нэг хэсэг тул идэвхжүүлэх эх үүсвэр шаардлагатай бол RTC -ийн нэмэлт төхөөрөмжүүд гүн унтлагын үед амьд байх болно.

esp_deep_sleep_enable_ext0_wakeup (gpio_num_t gpio_num, int level)

gpio_num> Идэвхжүүлэх эх үүсвэр болгон ашигладаг GPIO дугаар. Зөвхөн RTC функцтэй GPIO-г ашиглах боломжтой: 0, 2, 4, 12-15, 25-27, 32-39.

түвшин> дохиоллыг асаах оролтын түвшин (0 = LOW, 1 = HIGH)

Алхам 5: Гадаад сэрэлт (ext1)

RTC хянагч нь олон RTC GPIO ашиглан сэрүүлгийг ажиллуулах логикийг агуулдаг.

esp_deep_sleep_enable_ext1_wakeup (uint64_t маск, esp_ext1_wakeup_mode_t горим)

маск> идэвхжүүлэх шалтгаан болох GPIO дугааруудын бит маск. Энэ битийн зураг дээр зөвхөн RTC идэвхжүүлсэн GPIO-г ашиглах боломжтой: 0, 2, 4, 12-15, 25-27, 32-39.

горим> идэвхжүүлэх нөхцлийг тодорхойлоход ашигладаг логик функцийг сонгоно уу.

• ESP_EXT1_WAKEUP_ALL_LOW: сонгосон бүх GPIO LOW түвшинд байх үед сэрдэг.

• ESP_EXT1_WAKEUP_ANY_HIGH: сонгосон GPIO -уудын аль нэг нь өндөр байх үед сэрдэг.

Алхам 6: ULP копроцессорыг сэрээх

ULP coprocessor нь чипийг гүн нойронд байх үед ажиллах боломжтой бөгөөд мэдрэгч хайх, ADC эсвэл багтаамж мэдрэгч мэдрэгчийг хянах, тодорхой үйл явдал илрэх үед чипийг идэвхжүүлэхэд ашиглаж болно.

ULP сопроцессор нь RTC -ийн дагалдах хэрэгслийн цахилгаан домэйны нэг хэсэг бөгөөд удаан санах ойд хадгалагдсан програмыг ажиллуулдаг. Тиймээс, хэрэв энэ идэвхжүүлэх горимыг хүсвэл гүн нойрсох үед RTC нэмэлт төхөөрөмжүүд болон RTC удаан санах ой идэвхжих болно.

Алхам 7: Мэдрэгч самбар

RTC хянагч нь багтаамжийн мэдрэгч ашиглан дохиоллыг идэвхжүүлэх логикийг агуулдаг. Гэсэн хэдий ч мэдрэгчтэй зүүгийн тодорхойлолт өөр байна. Бид хүссэн тээглүүр бүрийн хувьд мэдрэгчтэй тасалдлыг ашиглах ёстой.

Тасалдлыг тохируулсны дараа бид мэдрэгчийг ашиглах сэрэх горимыг идэвхжүүлсэн.

// Touchpad -ийг сэрээх эх сурвалж болгон тохируулах esp_sleep_enable_touchpad_wakeup ();

Алхам 8: Гүн унтах горимд орох

Сэрэх горимыг тохируулсны дараа ESP32-ийг гүн унтлагын горимд оруулах ганц тушаал хангалттай (2.5 мкА ба түүнээс бага зарцуулдаг). Энэ зардал нь ESP чипээс биш харин илүү их мөнгө зарцуулдаг тул би энд онцолж байна.

esp_deep_sleep_start ();

Энэ тушаалаас ESP32 унтаж, жишээ нь дараагийн кодын мөрүүдийг ажиллуулдаггүй.

Чухал: Дээрх тушаалыг гүйцэтгэхийн өмнө сэрээх бүх тохиргоог хийх ёстой.

Алхам 9: Энд илүү чухал мэдээлэл байна

Энд илүү чухал мэдээлэл байна
Энд илүү чухал мэдээлэл байна

Доорх дуудлага нь ESP32 -ийг сэрээх шалтгааныг буцаана.

1: EXT0 2: EXT1 3: TIMER 4: TOUCHPAD 5: ULP

esp_sleep_get_wakeup_cause ();

Хэрэв бид мэдрэгч самбараар сэрээх тохиргоог хийвэл командын тусламжтайгаар ямар GPIO гарсныг сэргээж чадна

esp_sleep_get_touchpad_wakeup_status ();

ESP32 -ийг сэрэх бүрт тохиргоог дахин хийх болно. Тиймээс RTC санах ойд тодорхойлогдоогүй бүх хувьсагчид анхны төлөв рүүгээ буцах болно.

Унтсан ч гэсэн хувьсагчдыг санах ойд хадгалахын тулд доорх жишээн дээрх хувьсагчийн мэдүүлгийг ашиглана уу.

// RTC_DATA_ATTR нь өөр өөр байдаг RTCRTC_DATA_ATTR int bootCount = 0;

Алхам 10: Жагсаал

Жагсаал
Жагсаал

Видео нь програмын дүрсний дагуу ажиллаж байгааг харуулж байна.

Алхам 11: WiFi NodeMCU-32S ESP-WROOM-32

WiFi NodeMCU-32S ESP-WROOM-32
WiFi NodeMCU-32S ESP-WROOM-32

Алхам 12: Чуулган

Чуулган
Чуулган

Алхам 13: Хөтөлбөр

Одоо бид ESP32 -ийг гүн унтах горимд оруулахаар тохируулах програм хийх болно. Үүнийг гурван аргаар сэрээх болно: нэг нь Гадаад сэрүүлэг (ext0), нэг нь Таймер, нөгөө нь Touchpad. Тэд хамтарч ажиллах боломжгүй тул сэрэх замыг тохируулахын тулд ESP32 -ийн Boot -д өгсөн тоолуур болох хувьсагчийг ашиглах болно.

Алхам 14: Номын сан шаардлагатай

Номын сан шаардлагатай
Номын сан шаардлагатай

OLED дэлгэцийг хянахын тулд бидэнд гадаад номын сан хэрэгтэй. Үүний тулд бид U8g2 номын санг татаж авах болно.

Arduino IDE дээр Sketch цэс >> Номын санг оруулах >> Номын санг удирдах… руу очно уу.

Алхам 15: Номын сан ба хувьсагчид

Бид OLED дэлгэцийг хянах номын сан, түүнчлэн дэлгэц хянагчийн жишээ бүтээгчийг оруулсан болно. Түүнчлэн, бид хувьсагчийг RTC санах ойд хуваарилдаг. Бид мэдрэгчийг хүлээн авах мэдрэмж, микросекунд хөрвүүлэх коэффициент, ESP32 унтах горимд шилжих хугацааг (секундээр) тохируулдаг.

#include // biblioteca para controle do харуулах

// construtor da instancia do controlador do display // SDA = 21 e SCL = 22 U8X8_SSD1306_128X64_NONAME_SW_I2C дэлгэц (SCL, SDA, U8X8_PIN_NONE); // RTC_DATA_ATTR нь RTC_DATA_ATTR int bootCount = 0; // sensibilidade para aceitação do toque #deefine Threshold 40 // fator de talkão de microsegundos for segundos #define uS_TO_S_FACTOR 1000000 // хурдыг ESP32 горимоор тохируулах (цаг хугацааны хувьд) #цагийг_тогтоо

Алхам 16: Тохиргоо

Тохиргоонд бид ачаалах тохиолдлын тоог нэмэгдүүлдэг. Бид ачаалах motif -ийг хэвлэх функцийг нэрлэдэг. Хэрэв ачаалах дугаар нь PAR бол бид ESP32 -ийг (EXT0) товчлуураар сэрээхээр тохируулдаг. Хэрэв энэ нь 3 -ийн үржвэр бол ESP32 -ийг тогтоосон хугацааны дараа сэрээхээр тохируулсан болно. Үгүй бол бид ESP32 -ийг сэрээхийн тулд багтаамжийн мэдрэгчтэй тээглүүрүүдийг тохируулсан болно. Эцэст нь хэлэхэд, бид мэдрэгч самбарыг сэрээх эх үүсвэр болгож ESP32 -ийг унтах горимд оруулахыг албадав.

void setup () {Serial.begin (115200); саатал (1000); // нэмэгдсэн эсвэл нэмэгдсэн BOOT ocorreu ++ bootCount; configureDisplay (); // chama a função para impimir эсвэл mototo to BOOT print_wakeup_reason (); // PAR -ийн тохиргоонд зориулсан ачаалах эсвэл ESP32 -ийг ачаалах (EXT0) if (bootCount % 2 == 0) {esp_sleep_enable_ext0_wakeup (GPIO_NUM_39, 1); // 1 = Өндөр, 0 = Бага} // 3 хувилбарыг тохируулахын тулд ESP32 -ийг сонгоно уу, хэрэв (bootCount % 3 == 0) {esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); } // caso contrario configuramos os pinos de touch capacitivo para despertar o ESP32 else {// Touch Pad 5 (GPIO12) touchAttachInterrupt (T5, callback, Threshold) дээр тасалдлыг тохируулах; // Touchpad -ийг сэрээх эх сурвалж болгон тохируулах esp_sleep_enable_touchpad_wakeup (); } Serial.println ("унтах горим"); esp_deep_sleep_start ();

Алхам 17: Loop, Callback & ConfigureDisplay

Loop дээр бидэнд хийх зүйл байхгүй. Хэрэв бид тасалдал гарах үед хийх зүйл байвал бид буцааж таслах ажлыг үргэлжлүүлнэ. ConfigureDisplay -ийн хувьд бид дэлгэцийг эхлүүлж, зарим параметрүүдийг тохируулдаг. Бид ачаалах тохиолдлыг хэдэн удаа дэлгэцэн дээр хэвлэв.

// nada a se fazer no loopvoid loop () {} // callback das interrupções void callback () {// caso queira fazer algo ao ocorrer a interrupção} void configureDisplay () {// дэлгэц эсвэл тохиргооны параметрүүдийг харуулах. Эхлэх(); display.setPowerSave (0); // modo powerSave (0-Off? 1-On) display.setFont (u8x8_font_torussansbold8_u); // fonte utilizada // imprime no display os numero de vezes que BOOK display.drawString (0, 0, "BOOT NUM:"); display.drawString (0, 2, String (bootCount).c_str ()); display.drawString (0, 4, "MOTIVO:"); }

Алхам 18: Хэвлэх_сэрэх шалтгаан (Сэрэх шалтгааныг мэдэх)

Энд бид ESP32 сэрэх шалтгааныг хэвлэх функцтэй. Зүүг шалгаад дэлгэц дээр хэвлэ.

// função para empimir a causea do ESP32 despertarvoid print_wakeup_reason () {esp_sleep_wakeup_cause_t wakeup_reason; Тэмдэгтийн шалтгаан = ""; сэрэх шалтгаан = esp_sleep_get_wakeup_cause (); // recupera a causa do despertar switch (wakeup_reason) {тохиолдол 1: шалтгаан = "EXT0 RTC_IO BTN"; завсарлага; тохиолдол 2: шалтгаан = "EXT1 RTC_CNTL"; завсарлага; тохиолдол 3: шалтгаан = "TIMER"; завсарлага; тохиолдол 4: шалтгаан = "TOUCHPAD"; завсарлага; тохиолдол 5: шалтгаан = "ULP ХӨТӨЛБӨР"; завсарлага; default: reason = "NO DS CAUSE"; завсарлага; } Serial.println (шалтгаан); display.clearLine (6); // дэлгэцийн дэлгэцийг харуулах.drawString (0, 6, reason.c_str ()); // unpime a causa do despertar no display // to despertou por TOUCHPAD, хэрэв та сэрүүлгийн шалтгаан бол= (4) {print_wakeup_touchpad (); // verifica o pino e impime дэлгэц байхгүй}}

Алхам 19: Print_wakeup_touchpad (GPIO Touch -ийг мэдэх)

Одоо энэ алхам дээр бид хүрсэн зүүг хэвлэх функцтэй боллоо. Бид ESP32 -ийг сэрээсэн GPIO -г сэргээж дэлгэц дээр хэвлэв.

// funchão para impimir o pino que foi tocadovoid print_wakeup_touchpad () {touch_pad_t touchPin; touchPin = esp_sleep_get_touchpad_wakeup_status (); // GPIO дараалал эсвэл ESP32 String GPIO = ""; шилжүүлэгч (touchPin) {тохиолдолд 0: GPIO = "4"; завсарлага; тохиолдол 1: GPIO = "0"; завсарлага; тохиолдол 2: GPIO = "2"; завсарлага; тохиолдол 3: GPIO = "15"; завсарлага; тохиолдол 4: GPIO = "13"; завсарлага; тохиолдол 5: GPIO = "12"; завсарлага; тохиолдол 6: GPIO = "14"; завсарлага; тохиолдол 7: GPIO = "27"; завсарлага; тохиолдол 8: GPIO = "33"; завсарлага; тохиолдол 9: GPIO = "32"; завсарлага; анхдагч: Serial.println ("Мэдрэгч самбараар биш сэрэх"); завсарлага; } Serial.println ("GPIO:"+GPIO); display.clearLine (7); // дэлгэцийн дэлгэц 7. display.drawString (0, 7, "GPIO:"); display.drawString (6, 7, GPIO.c_str ()); // GPIO -г шалга

Алхам 20: Файлуудыг татаж авах

PDF

INO

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