The words you are searching are inside this book. To get more targeted content, please make full-text search by clicking here.
Discover the best professional documents and content resources in AnyFlip Document Base.
Search
Published by phol2005, 2022-08-18 22:35:30

Advance_ESP32

Advance_ESP32

เซ็นเซอรส ัมผสั
EX5_TouchSensor_Read

51

โหมดประหยดั พลังงาน
Deep Sleep on ESP32

52

โหมดประหยดั พลงั งาน
Table: Functionalities Depending on the Power Modes

Sleep Pattern

• Associationsleeppattern:The power mode switches between the active mode and
Modem-sleep/Light- sleep mode during this sleep pattern. The CPU, Wi-Fi, Bluetooth, and
radio are woken up at predetermined intervals to keep Wi-Fi/BT connections alive.
• ULP sensor-monitored pattern: The main CPU is in the Deep-sleep mode. The ULP co-
processor does sensor measurements and wakes up the main system, based on the
measured data from sensors.

Power mode

• Active mode: The chip radio is powered on. The chip can receive, transmit, or listen.
• Modem-sleep mode: The CPU is operational and the clock is configurable. The Wi-Fi/
Bluetooth base- band and radio are disabled.
• Light-sleep mode: The CPU is paused. The RTC and ULP-coprocessor are running. Any
wake-up events (MAC, host, RTC timer, or external interrupts) will wake up the chip.
• Deep-sleep mode: Only RTC is powered on. Wi-Fi and Bluetooth connection data are
stored in RTC memory. The ULP-coprocessor can work.
• Hibernation mode: The internal 8MHz oscillator and ULP-coprocessor are disabled. The
RTC recovery memory are power-down. Only one RTC timer on the slow clock and some
RTC GPIOs are active. The RTC timer or the RTC GPIOs can wake up the chip from the
Hibernation mode.

53

โหมดประหยัดพลังงาน

Table: Power Consumption by Power Modes

Table: RF Power Consumption Specifications

The current consumption measurements are conducted with 3.0 V supply and 25°C
ambient, at antenna port. All the transmitters’ measurements are based on 90% duty
cycle and continuous transmit mode.

54

โหมดประหยัดพลังงาน

ความหมายของหนว ยทางไฟฟา

mV มลิ ลิโวลต  คือหนว ยท่ีใชเรยี กขนาดของแรงดนั ไฟฟา หน่งึ ในพนั ของโวลต เชน 1mV หมายถงึ ขนาดของ
แรงดนั ไฟฟา  1 มลิ ลโิ วลต เทากับ 0.001 โวลต ขนาดของแรงดันไฟฟา 1000mV มคี า เทา กับ 1 โวลต

V (Volt) โวลต  คือหนว ยท่ีใชเ รยี กขนาดของแรงดนั ไฟฟา เชน 220V หมายถึงขนาดของแรงดันไฟฟา 220
โวลต

mA มิลลแิ อมป  คือหนวยท่ใี ชเ รียกปรมิ าณของกระแสไฟฟา ที่ไหลผา นหน่งึ ในพนั ของแอมป เชน 1mA หมาย
ถงึ ปรมิ าณของกระแสไฟฟาทไี่ หลผานมีขนาด 1 มลิ ลิแอมป เทากับ 0.001 แอมป ปริมาณของกระแสไฟฟา
ทไ่ี หลผาน 1000mA มคี าเทากับ 1 แอมป

A (Ampere) แอมป หรือ แอมแปร คือหนวยท่ใี ชเรยี กปริมาณของกระแสไฟฟา ทีไ่ หลผาน เชน 10A หมายถงึ
ปรมิ าณกระแสไฟฟาทไี่ หลผา น 10 แอมป

W วตั ต  คอื หนวยทีใ่ ชเรยี กขนาดของกําลังไฟฟา เชน 1W หมายถึงใชก ําลงั ไฟฟา 1 วัตต

ตารางแปลง มิลลวิ นิ าที เปน วินาที

55

โหมดประหยดั พลงั งาน
การออกจากโหมด deep sleep ของ ESP8266 และ ESP32

ESP8266 Wake­Up Source:
- Reset the chip from an external source.
- Connect GPIO16 to the reset pin for a timed wake-up.
- With the timer, we were only able to sleep for about one hour.
The ESP32 has four different wake­up sources:
- The touch pads.
- The timer.
- Two possibilities of external Wake-up.
- ULP coprocessor wake-up.

56

โหมดประหยดั พลงั งาน

EX6_DeepSleep_Touchpad_Wakeup_DHT22_OLED

กาํ หนดให ESP32 อยใู นโหมด deep sleep เพื่อประหยัดพลังงานและออกจากโหมด deep sleep ดวย
เซ็นเซอรสมั ผัส

ถา มกี ารสัมผสั เซน็ เซอร T4 หรือ T5 บอรด ESP32 จะออกจากโหมด deep sleep แลวกลับมาทาํ งานใหม
จะไปอานคาขอมูลอุณหภูมคิ วามชื้น DHT22 มาแสดงผลในจอ OLED และ Console เปน เวลา 15 วนิ าที
จากน้นั กจ็ ะเขา สโู หมด deep sleep เพ่ือประหยดั พลงั งานตอไป มีการเกบ็ ขอมลู จํานวนทบี่ ตู ไวใ นหนวย
ความจาํ ของ RTC ดว ย

ฟง กช ันใชง านที่เกี่ยวขอ ง

touchAttachInterrupt(T4, gotTouch1, 40);
// ถา T4 มคี า เกนิ 40 ใหไปทฟ่ี ง กช นั gotTouch1() ทส่ี รา งไว

esp_deep_sleep_enable_touchpad_wakeup(); // กาํ หนดการตื่นดว ยเซน็ เซอร

esp_deep_sleep_start(); // เขา สโู หมด Deep Sleep

Serial.println(touchRead(T4)); //อา นคา sensor T4 แลวแสดงผลใน console

RTC_DATA_ATTR int bootCount = 0; //เกบ็ จํานวนการบูตแตละครัง้

57

โหมดประหยัดพลงั งาน
EX6_DeepSleep_Touchpad_Wakeup_DHT22_OLED

58

โหมดประหยดั พลงั งาน
EX6_DeepSleep_Touchpad_Wakeup_DHT22_OLED

59

โหมดประหยัดพลังงาน

EX7_DeepSleep_Touchpad_Wakeup_DHT22_OLED

กําหนดให ESP32 อยูในโหมด deep sleep เพ่อื ประหยดั พลังงาน แลว กําหนดขา GPIO2 เปนตัวกระตนุ ให
ออกจากโหมด deep sleep ถามกี ารเปลย่ี นสถานะเปน HIGH

การทดสอบน้ีจะใชไฟ 3.3v จา ยเขาไปโดยใช switch ขั้นไว ถามีการกด switch จะมีการจายไฟเขา ไปทขี่ า
GPIO2 ซึ่งจะทาํ ใหสถานะเปลย่ี นเปน HIGH และออกจากโหมด deep sleep

ESP32 จะไปอานคาขอมลู อุณหภมู ิความช้ืน DHT22 มาแสดงผลในจอ OLED และ Console เปนเวลา 5
วินาที จากนัน้ กจ็ ะเขา สโู หมด deep sleep เพือ่ ประหยดั พลังงานตอ ไป มีการเก็บขอมูลจาํ นวนทบ่ี ตู ไวใ น
หนวยความจาํ ของ RTC ดว ย

ฟง กช นั ใชง านทเี่ กยี่ วของ

esp_deep_sleep_enable_ext0_wakeup((gpio_num_t)2, HIGH);
// กาํ หนดขา GPIO2 เปนตวั กระตุน ใหออกจากโหมด deep sleep ถามีการเปลย่ี นสถานะเปน HIGH การ
ทดสอบน้ีจะใชไฟ 3.3v จายเขา ไปโดยใช switch ขั้นไว

esp_deep_sleep_enable_touchpad_wakeup(); // กําหนดการต่นื ดว ยเซ็นเซอร

esp_deep_sleep_start(); // เขาสูโหมด Deep Sleep

Serial.println(touchRead(T4)); // อา นคา sensor T4 แลว แสดงผลใน console

RTC_DATA_ATTR int bootCount = 0; // เก็บจาํ นวนการบตู แตละครั้ง

60

โหมดประหยัดพลงั งาน
EX7_DeepSleep_Touchpad_Wakeup_DHT22_OLED

61

โหมดประหยดั พลังงาน
EX7_DeepSleep_Touchpad_Wakeup_DHT22_OLED

62

โหมดประหยดั พลงั งาน
EX8_DeepSleep_Timer_Wakeup_DHT22_OLED_Line

กาํ หนดให ESP32 อยูในโหมด deep sleep เพ่ือประหยดั พลังงานเปน เวลา 1 นาที ออกจากโหมด
deep sleep
พอถึงเวลาที่กาํ หนด หรือมกี ารกดสวิตชท ่ตี อ ไว ESP32 จะออกจากโหมด deep sleep จากนัน้ จะทาํ การ
เชอื่ มตอ WiFi และอานคาขอมูลอณุ หภมู แิ ละความชื้น (DHT22) ไปแสดงผลในจอ OLED, Console
และสงแจงเตอื นใน Line Notify หลังจากเวลา 30 วินาทที ีต่ ้งั ไว ก็จะเขาสโู หมด deep sleep เพ่ือ
ประหยดั พลงั งานตอไป มีการเก็บขอ มลู จาํ นวนท่ีบูตไวในหนว ยความจําของ RTC ดว ย

63

โหมดประหยัดพลังงาน
EX8_DeepSleep_Timer_Wakeup_DHT22_OLED_Line

ฟง กช ันใชงานทเ่ี กย่ี วขอ ง

// กาํ หนดขา GPIO2 เปน ตวั กระตุนใหออกจากโหมด deep sleep ถา มีการเปลี่ยนสถานะเปน HIGH การ
ทดสอบนีจ้ ะใชไ ฟ 3.3v จา ยเขา ไปโดยใช switch ขนั้ ไว
esp_deep_sleep_enable_ext0_wakeup((gpio_num_t)2, HIGH);

//กาํ หนดใหต ื่นเมอ่ื ครบ 1 นาทขี างหนา
esp_deep_sleep_enable_timer_wakeup(1 * 60 * 1000 * 1000);

esp_deep_sleep_enable_touchpad_wakeup(); // กําหนดการตืน่ ดวยเซน็ เซอร

esp_deep_sleep_start(); // เขา สูโหมด Deep Sleep

Serial.println(touchRead(T4)); //อานคา sensor T4 แลว แสดงผลใน console

RTC_DATA_ATTR int bootCount = 0; // เกบ็ จํานวนการบูตแตละครง้ั

64

โหมดประหยัดพลงั งาน
EX8_DeepSleep_Timer_Wakeup_DHT22_OLED_Lin

65

หนวยความจําและพ้ืนที่เกบ็ ขอ มลู
ESP32's Flash memory

66

หนวยความจาํ และพนื้ ทเ่ี กบ็ ขอมลู

ชปิ ESP32 จะใช Flash memory ภายนนอกในการเกบ็ โปรแกรม ขอมูล คอนฟก และคาใชง านตา งๆ การ
ทํางานจะผา น SPI bus มีขนาดสงู สดุ 16Mb สาํ หรับโมดูล ESP-WROOM-32 ให flash memory มา
4Mb

67

หนว ยความจําและพ้ืนทีเ่ ก็บขอมลู

Table: Flash memory Partition Table

พาทชิ นั ท่ีสามารถเขยี นโปรแกรมเกบ็ แบบถาวร ไดแ ก NVS มขี นาด 20KB EEPROM มีขนาด 4KB
และ SPIFFS มขี นาด 1.3 MB สวนนอกนัน้ เปนพ้ืนท่ีของระบบท่ตี อ งใช

NVS (Nonvolatile Storage)

เปน SPI flash memory ของโมดูล ESP32 มขี นาด 20 Kbytes เอาไวเกบ็ ขอมูลระบบเชน ชอ่ื
SSID MC Address และอ่นื ๆ ขอมูลท่เี กบ็ จะเปนแบบถาวรไมสูญหายแมเ ขยี น sketch ทบั ลงไป
การใชงานใหน ึกเสมอวาไฟลจ ะอยูรวมกบั ไฟลร ะบบอน่ื ๆ ระมัดระวงั การใชง าน แนะนาํ ใหเก็บ
ขอมลู ทไ่ี มซ บั ซอ นเชน รหสั ผาน ตวั เลขนบั จํานวนการบตู หรอื ขอ ความสนั้ ๆ

68

หนว ยความจาํ และพ้นื ทเี่ ก็บขอ มลู

EX9_FlashMemory_NVS_BootCount

นบั จาํ นวน ESP รบี ตู แลว เขยี นเกบ็ ไวใน SPI flash memory - NVS (Nonvolatile Storage) ของโมดูล
ESP32 ขอมูลที่เก็บจะเปนแบบถาวร ไมสูญหายแมมกี ารเขียน Sketch ทับลงไป

69

หนว ยความจําและพนื้ ทีเ่ ก็บขอ มูล
EX9_FlashMemory_NVS_BootCount

70

หนวยความจาํ และพน้ื ที่เก็บขอมูล
EX9_FlashMemory_NVS_BootCount

71

หนว ยความจาํ และพืน้ ทเ่ี ก็บขอมลู

EX10_FlashMemory_EEPROM

EEPROM เปนหนวยความจําแบบถาวร ขอ มูลไมสญู หายแมวาไมมไี ฟเลี้ยง การอา นเขยี นขอ มูลทําไดค รัง้
ละ byte เทา นัน้ เขยี นขอ มลู ไดสูงสุดประมาณ 100,000 คร้งั

ทดสอบเขียนขอมูลลงบน SPI flash memory ของโมดลู ESP32 ใน EEPROM ท่ีมีขนาด 4KB เปนการเกบ็
ขอ มูลแบบถาวร อานคา จาก EEPROM แปลง char array เปน String มาแสดงผลใน Console

72

หนวยความจําและพ้ืนทีเ่ ก็บขอมลู
EX10_FlashMemory_EEPROM

73

หนวยความจาํ และพ้นื ทเ่ี ก็บขอมลู

EX11_FlashMemory_SPIFFS

SPIFFS (SPI Flash File System) จะอยใู น flash memory of ESP-WROOM-32 (ESP32) เปน พื้นท่ีเ กบ็
ขอมลู ทีเ่ ราจะสามารถอัพโหลดไฟลไ ปเกบ็ ไวได เชน เกบ็ บันทกึ ขอมูลอุณหภูมแิ ละความช้ืนของเซ็นเซอร
DHT22 คาคอนฟก เปนตน มพี นื้ ทเ่ี ก็บขอ มลู ขนาด 1.5M

การอพั โหลดไฟลไ ปเก็บไวใ น SPIFFS

กอนอืน่ ตองทาํ การติดตั้ง tool ชื่อ “ESP32FS” ไวในโฟลเ ดอร

MAC:
/Users/visit01/Documents/Arduino/tools

Windows:
C:/Documents/Arduino/tools

74

หนวยความจําและพน้ื ทีเ่ ก็บขอ มูล
EX11_FlashMemory_SPIFFS

การอพั โหลดไฟลไ ปเกบ็ ไวใ น SPIFFS

ใหเกบ็ ไฟลท ีต่ องการอัพโหลดเกบ็ ไวในโฟลเดอร (ไมเกิน 1.1MB)
MAC
/Users/visit01/Documents/Arduino/TRAIN-IOT-ADVANCE/EX11_FlashMemory_SPIFFS/data
Windows
C:/Documents/Arduino/TRAIN-IOT-ADVANCE/EX11_FlashMemory_SPIFFS/data

75

หนว ยความจําและพื้นท่ีเกบ็ ขอมลู
EX11_FlashMemory_SPIFFS

76

หนว ยความจาํ และพน้ื ที่เกบ็ ขอมลู

การขยายพารทชิ ัน SPIFFS

เราสามารถขยายพืน้ ท่ขี อง SPIFFS เพอ่ื เก็บขอมลู ไดมากข้ึน Arduino IDE จะเกบ็ ขอมลู การแบง
พารท ิชนั ไวท ่ีไฟลช ่ือ “default.csv” ใหทําดว ยความระมัดระวัง !

MAC
/Users/visit01/Documents/Arduino/hardware/espressif/esp32/tools/partitions

Windows
C:/Documents/Arduino/hardware/espressif/esp32/tools/partitions

------ พารทิชัน default ESP32 -------- 77
# Name,   Type, SubType, Offset,  Size, Flags

nvs,      data, nvs,     0x9000,  0x5000,
otadata,  data, ota,     0xe000,  0x2000,
app0,     app,  ota_0,   0x10000, 0x140000,
app1,     app,  ota_1,   0x150000,0x140000,
eeprom,   data, 0x99,    0x290000,0x1000,
spiffs,   data, spiffs,  0x291000,0x16F000,

------ พารท ิชันหลงั จากปรับแตง แกไ ข --------
# Name,   Type, SubType, Offset,  Size, Flags

nvs,      data, nvs,     0x9000,  0x5000,
otadata,  data, ota,     0xe000,  0x2000,
app0,     app,  ota_0,   0x10000, 0xF0000,
app1,     app,  ota_1,   0x100000,0xF0000,
eeprom,   data, 0x99,    0x1F0000,0x1000,
spiffs,   data, spiffs,  0x1F1000,0x20F000,

หนว ยความจาํ และพ้นื ท่เี ก็บขอ มลู

78

หนวยความจาํ และพน้ื ทเี่ ก็บขอ มลู

EX12_FlashMemory_SPIFFS_Line

ออกจากโหมด deep sleep แบบอตั โมมตั ติ าม
เวลาท่กี ําหนดหรอื กดปมุ สวติ ซ แลว เชอ่ื มตอ
WiFi และดงึ คาเวลาจาก NTP server ผา น
อนิ เตอรเน็ต อา นคาอณุ หภมู ิและความช้นื จาก
เซนเซอร DHT22 มาแสดงผลในคอนโซล และเก็บ
บันทึกขอ มลู ไวใน SPIFFS พรอ มกบั เวลาปจจุบนั
จากนัน้ รายงานคาอณุ หภูมิและความชื้นเขา Line
Notify แสดงขัน้ ตอนทาํ งานบนจอ OLED เปน
ระยะ รวมถงึ เกบ็ จาํ นวนการบูตไวใน RTC กอ นเขา
สู deep sleep ทีต่ ั้งเวลาได

ตัวอยา งฟงกชันทสี่ รางข้นึ ใชงาน 79

listDir(SPIFFS, "/", 0); //แสดงโฟลเ ดอรท ง้ั หมด
writeFile(SPIFFS, "/hello.txt", "Hello "); //เขียนทับไฟล
appendFile(SPIFFS, "/hello.txt", "World!\n"); //เขยี นตอ ไฟล
readFile(SPIFFS, "/hello.txt");  //อา นไฟล
deleteFile(SPIFFS, "/foo.txt"); //ลบไฟล
renameFile(SPIFFS, "/hello.txt", "/foo.txt");  //เปลี่ยนช่อื ไฟล
testFileIO(SPIFFS, "/test.txt"); //ทดสอบไฟล
Showdisplay(“Wake UP:); //แสดงขอ ความบนจอ OLED
Gettemp(); อา นคา อุณหภมู ิและความชืน้
linenotify(); สง Line notify

หนว ยความจําและพนื้ ที่เกบ็ ขอ มูล
EX12_FlashMemory_SPIFFS_Line

80

หนว ยความจําและพืน้ ที่เก็บขอ มูล
EX12_FlashMemory_SPIFFS_Line

81

บทท่ี 3 ESP32 Framework
• การรับพกิ ดั ตาํ แหนง GPS
• RESTful Framework

82

การรบั พกิ ัดตําแหนง GPS

GPS on ESP32

u-center Windows
GNSS evaluation software for Windows
https://www.u-blox.com/en/product/u-center-windows

83

การรบั พกิ ัดตําแหนง GPS

EX13_BlynkGPS

รบั คา GPS และวดั อุณหภูมิและความชื้นจาก DHT22 จากนั้นนาํ ไปแสดงตาํ แหนง บนแผนที่และคาพกิ ัดใน
LCD บน Blynk Application

กําหนดการเชอ่ื มตอ
1. Sensor DHT22 วัดอณุ หภูมิและความชืน้ ตอ ขา 21
2. Sensor Analog ตอขา A6, A7 //ขา GPIO34, 35
3. GPS ตอขา RXPin = 38, TXPin = 39 , VCC เขา 5V และ GND เขา GND
4. Analog ขา A6(GPIO 34), A7 (GPIO35) ถา มี

84

การรบั พิกัดตาํ แหนง GPS
EX13_BlynkGPS

85

การรบั พกิ ดั ตาํ แหนง GPS
EX13_BlynkGPS

86

AREST

Framework on ESP32

แนะนาํ aREST Framework

aREST เปน framework ทส่ี ามารถควบคมุ การทาํ งานของ ESP32, ESP8266, Arduino, Raspberry
หรืออ่นื ๆ ไดโดยตรงผา นทาง Serial console ใน Arduino IDE หรือผา นเครือขาย IP
การทาํ งานจะใช API - JSON ในการแลกเปลี่ยนขอ มูล รองรับการทํางานแบบ Server และ Client ถาอยู
ในวงแลนเดียวกนั ผูใ ชส ามารถใช web browser เขาถงึ บอรด และส่งั การผา น API ไดโ ดยตรง

RESTful (Representational State Transfer)

คอื Web Service ทใี่ ช HTTP Method (GET, POST, PUT, DELETE) แลกเปลย่ี นขอ มลู ในรปู แบบของ
JSON หรอื XML

87

AREST Framework
RESTful (Representational State Transfer)

https://maps.googleapis.com/maps/api/geocode/json?address=rangsit

88

AREST Framework

JSON (JavaScript Object Notation)

เจสันจดั เกบ็ ในรปู แบบทส่ี ามารถอา นและเขาใจไดงาย เปรยี บเสมือนรูปแบบของ อาเรย (Array) ชนดิ หน่งึ ท่ี
ใชรบั สง แลกเปลยี่ นขอมลู ขา มแพตฟอรม

{
               "firstName": "รชั ชานนท",
               "lastName": "เวียงนาค",
               "address":
                         {
                          ”City": "กรุงเทพฯ",
                          ”Country": "ประเทศไทย",
                         },
               "phoneNumbers":
                              [
                                "099-9999999",
                                "02-6690001"
                              ]
 }

89

AREST Framework

JSON Text to a JavaScript Object

ผลลัพธท ไ่ี ด >>

90

AREST Framework

JSON Text to a JavaScript Object

ผลลพั ธท ี่ได >>

91

AREST Framework

ติดต้งั aREST Library

92

AREST Framework

ตดิ ต้งั aREST Library

93

AREST Framework
EX14_aREST_Serial

ควบคุมบอรด ผา นทาง Serial โดยใช aREST Framework API เปน ตวั จดั การ
คําส่งั ทเี่ กย่ี วของ
/* กําหนดใหขา 25 เปน OUTPUT */
/mode/25/o
/* กําหนดสถานะใหขา 25 เปน HIGH */
/digital/25/1
/* กาํ หนดสถานะใหขา 25 เปน LOW */
/digital/25/0
/* เชค็ สถานะใหขา 25 */
/digital/25

94

AREST Framework
EX14_aREST_Serial

95

AREST Framework
EX14_aREST_Serial

96

AREST Framework
EX14_aREST_Serial

97

AREST Framework
EX14_aREST_Serial

98

AREST Framework
EX14_aREST_Serial

99

API documentation

The API currently supports five type of commands: digital, analog, and mode, variables, and
user-defined functions.

Digital

Digital is to write or read on digital pins on the Arduino. For example:
/* sets pin number 25 to a low state */
/digital/25/0
/* sets pin number 25 to a high state */
/digital/25/1
/* reads value from pin number 25 in JSON format (note that for compatibility reasons, /
digital/25/r produces the same result) */
/digital/25

100


Click to View FlipBook Version