เซ็นเซอรส ัมผสั
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 WakeUp 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 wakeup 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