วันศุกร์ที่ 4 ตุลาคม พ.ศ. 2562

ESP32:Info

ESP32

    หน้านี้เป็นรายละเอียดของชิป ESP32 เหมาะสำหรับผู้ที่เคยได้ใช้แล้วมาบ้างนิดหน่อย หรือใช้บอร์ดอื่นๆ อย่าง Arduino, Raspberry PI ฯลฯ แล้วอยากรู้จัก ESP32  จะมีศัพย์เทคนิกหลายตัวอาจจะต้องทำการศึกษาเป็นเรื่องๆไปในเรื่องที่จะเอาไปใช้ บางคนอาจจะทราบแล้วว่าเป็นไมโครคอนโทรลเลอร์ของบริษัท Espressif  ชุดคำสั่ง 32บิต มี Wifi และ Bluetooth ในตัว พัฒนาต่อมาจาก ESP8266 เขียนโปรแกรมใส่เข้าไปเลยไม่ต้องมีระบบปฎิบัติการ


ซีพียูใช้สถาปัตยกรรม Tensilica LX6 แบบ 2 แกน ความถี่ 240MHz
มีแรมในตัว 512KB เชื่อมต่อรอมภายนอกสูงสุด 16MB
มาพร้อมกับ WiFi มาตรฐาน 802.11 b/g/n โหมด Station softAP และ Wi-Fi direct
รองรับบลูทูธในตัว 4.0 BLE
ใช้แรงดันไฟฟ้าในการทำงาน 2.6V ถึง 3V
ทำงานได้ที่อุณหภูมิ -40◦C ถึง 125◦C


ที่เห็นทั่วไปจะเป็น ESP32-WROOM-32 ซึ่งเป็นชิปที่ประกอบเป็นโมดูลแล้ว
มีหลายบริษัทผลิตบอร์ดมาแล้วใช้โมดูลตัวนี้  มีบริษัทไทยด้วย

การเชื่อมต่อ ESP32 กับอุปกรณ์แบบต่างต่าง

  • 18 Analog-to-Digital Converter (ADC) channels
  • 3 SPI interfaces
  • 3 UART interfaces
  • 2 I2C interfaces
  • 16 PWM output channels
  • 2 Digital-to-Analog Converters (DAC)
  • 2 I2S interfaces
  • 10 Capacitive sensing GPIOs
      เวลาใช้งานต้องดูแปลนของแต่ละขาว่าทำการเชื่อมต่อแบบไหนได้บ้าง ในขาเดียวกับสามารถเชื่อมต่อได้หลายแบบและใช้โปรแกรมกำหนดอีกทีว่าจะใช้ทำอะไร เนื่องจากตัวชิปเองทำอะไรด้วยตัวเองไม่ได้ ต้องมีบอร์ดรองรับ มีบริษัทพัฒนาบอร์ดที่ใช้ชิตตัวนี้ออกมาหลายเจ้า ขาแต่ละเจ้าตำแหน่งก็วางไม่เหมือนกัน ดังนั้นให้ยึดเลขของ GPIO เป็นหลัก ในการพัฒนาโปรแกรม



ขาสำหรับรับอินพุตได้เท่านั้น

  จะมีขา GPIO 34 ถึง GPIO 39 ไม่มีวงจรรีจิสเตอร์ pull-ups หรือ pull-down อยู่ภายใน. ใช้เป็นเอาต์พุตไม่ได้ด้วย

SPI flash integrated บน ESP-WROOM-32

    ใช้ GPIO 6 - GPIO 11 บอร์ดบางรุ่นอาจจะมีขาออกมาให้เห็นแต่ก็ใช้ไม่ได้ เพราะมันต่อกับ SPI flash บนชิป ESP-WROOM-32 โดยปรกติไม่ควรจะไปยุ่งกับมัน ดังนั้นควรหลีกเลี่ยงการใช้ขาพวกนี้
GPIO 6 (SCK/CLK)
GPIO 7 (SDO/SD0)
GPIO 8 (SDI/SD1)
GPIO 9 (SHD/SD2)
GPIO 10 (SWP/SD3)
GPIO 11 (CSC/CMD)

Strapping Pins

มีขาที่ใช้สำหรับการบูตหรือแฟรชโปรแกรม ตัวบอร์ดจะจัดการกำหนดค่าที่เหมาะสมให้เองตอนมันใช้งาน แต่ถ้าเราต่ออุปกรณ์บางตัวกับขานั้นอาจจะทำให้มันไม่สามารถอัปโหลดโปรแกรมหรือมีปัญหาตอนบูตได้
GPIO 0 - คือปุ่ม BOOT มีปุ่มนี้ในบางบอร์ด
GPIO 2
GPIO 4
GPIO 5 (ต้องเป็น HIGH ขณะบูต)
GPIO 12 (ต้องเป็น LOW ขณะบูต)
GPIO 15 (ต้องเป็น HIGH ขณะบูต)
หลังจากอัปโหลดโปรแกรมหรือบูตเสร็จแล้วขาเหล่านี้สามารถใช้งานได้ปรกติ

ขาที่เป็นเป็น HIGH ตอนบูต

มีบางขาที่จะมีสถานะค่าเป็น  HIGH หรือมีสัญญาน PWM ออกมาตอนบูตหรือรีเซ็ต ถ้ามีอุปกรณ์ที่รอรับเอาต์พุตจากขาเหล่านี้ อาจจะได้ค่าที่มันไม่ได้คาดหวังเอาไว้ 
GPIO 1
GPIO 3
GPIO 5
GPIO 6 to GPIO 11 (ต่อ SPI flash memory ภายในไม่ควรใช้).
GPIO 14
GPIO 15

Enable (EN)

    เป็นขาเพื่อเปิดใช้ regulator 3.3V ขานี้เป็นแบบ pulled up ถ้าไป ต่อ Ground เพื่อปิด (disable) regulator. ดังนั้นเราใช้ขานี้ต่อกับปุ่มเพื่อเป็นปุ่ม restart ได้  บางบอร์ดมีปุ่มนี้มาให้อยู่แล้ว

กระแสที่แต่่ละขาส่งออกได้ GPIO

    กระแสงสูดสุดต่อขาคือ 40mA

เซนเซอร์ที่มากับ ESP32

Hall Effect Sensor เซนเซอร์แม่เหล็กมากับตัวสามารถใช้อ่านการเปลี่ยนแปลงของสนามแม่เหล็กรอบๆชิปได้ อาจจะใช้เพื่อดูสัญญาณรบกวนที่รบกวนวงจรเราได้ ตัวอย่างการใช้ดู HallSensor.ino
Temprature Sensor เซนเซอร์วัดอุณหภูมิ เอาไปวัดอุณหภูมิของอากาศไม่ได้แต่ไว้ดูว่าตัวชิปมันร้อนเกินไปหรือเปล่า ดูโค้ด ESP32_int_temp_sensor.ino

Interrupts

ใช้ได้ทุกขา ที่ไม่ใช่ขาที่ห้ามใช้ 
เพิ่มเติมสำหรับคนที่ไม่รู้จัก  ปกติถ้าเราต้องการรอดูว่ามีการเปลี่ยนแปลงค่าอินพุตที่ GPIO ต้องวนอ่านค่าแล้วเทียบค่าเดิมเอา แต่อินเทอรัปจะให้เราเขียนฟังก์ชั่นไว้เมื่อเกิดการเปลี่ยนแปลงที่ขานั้นระบบจะเรียกฟังก์ชั่นเราให้ไม่ต้องคอยวนอ่านค่า

Analog to Digital Converter (ADC)

มี 18 ขาที่ใช้ได้มีระดับความละเอียดถึง 12 บิต ขาที่เป็น ADC2 จะใช้งานพร้อมกับ Wi-Fi ไม่ได้ แนะนำให้ใช้ ADC1 เป็นหลัก ในโปรแกรมต้องกำหนด Channel ให้กับขานั้นๆ ก่อนใช้งาน

ADC1_CH0 (GPIO 36)
ADC1_CH1 (GPIO 37)
ADC1_CH2 (GPIO 38)
ADC1_CH3 (GPIO 39)
ADC1_CH4 (GPIO 32)
ADC1_CH5 (GPIO 33)
ADC1_CH6 (GPIO 34)
ADC1_CH7 (GPIO 35)
ADC2_CH0 (GPIO 4)
ADC2_CH1 (GPIO 0)
ADC2_CH2 (GPIO 2)
ADC2_CH3 (GPIO 15)
ADC2_CH4 (GPIO 13)
ADC2_CH5 (GPIO 12)
ADC2_CH6 (GPIO 14)
ADC2_CH7 (GPIO 27)
ADC2_CH8 (GPIO 25)
ADC2_CH9 (GPIO 26)
    สำหรับคนไม่ทราบ ADC คือตัวแปลงสัญญานอานาล็อกเป็นดิจิตอล เช่นเซนเซอร์ส่งค่ากลับมาเป็นระดับไฟฟ้า 0-3.3 โวลต์ที่ GPIO จะแปลงเป็นระดับตัวเลขให้  ความละเอียด 12 บิตคือ 2 ยกกำลัง 12 ได้ 4096 ระดับ การอ่านค่าอานาล็อกระดับไฟฟัาจาก 0-3.3โวลต์จะอ่านได้ค่าตัวเลขได้ 0-4095 

Capacitive touch GPIOs

    มีเซนเซอร์สัมผัสแบบ Capacitive ให้ใช้ 10 ขา อะไรที่สามารถถ่ายเทประจุได้เช่นผิวหนังมนุษย์ ก็ส่งสัญญานให้ขาเหล่านี้ได้ สามารถใช้ทำปุ่มสัมผัสแทนปุ่มกดได้ หรือใช้เพื่อปลุกให้ ESP32 ตื่นจากหลับลึกได้(deep sleep) ในโปรแกรมสามารถอ้างถึงเลขขาด้วย T0 ถึง T9 โค้ดตัวอย่างดูที่นี้

T0 (GPIO 4)
T1 (GPIO 0)
T2 (GPIO 2)
T3 (GPIO 15)
T4 (GPIO 13)
T5 (GPIO 12)
T6 (GPIO 14)
T7 (GPIO 27)
T8 (GPIO 33)
T9 (GPIO 32)


Digital to Analog Converter (DAC)

มี DAC อยู่ 2 ช่อง แปลงจากสัญญานดิจิตอลเป็นอานาล็อกเอาต์พุต ออกเป็นระดับแรงดันไฟฟ้า ทำตรงกันข้ามกับ ADC
DAC1 (GPIO25)
DAC2 (GPIO26)

Real Time Clock (RTC)
    ESP32 ถ้าเปิดขึ้นมาใหม่จะไม่ทราบเวลาต้องตั้งใหม่ทุกครั้ง อาจจะต้องอ่านเวลาจากเน็ตเวิร์กเมื่อทำการเชื่อมต่อ แต่มีหลายกรณีที่ไม่มีระบบเน็ตเวิร์ก  ดังนั้นเราต้องต่อกับนาฬิกาภายนอก เราต้องตั้งเวลาภายนอกให้เสร็จก่อน พอ ESP32 เริ่มทำงานจะไปอ่านค่าเวลาจาก RTC ได้ ดังนั้น ระบบที่มีการตั้งเวลาทำงานจำเป็นต้องใช้  หรือใช้เพื่อตั้งเวลาให้เขาสู่โหมดหลับลึกแล้วตั้งเวลาเพื่อปลุกให้มาทำงานต่อได้

RTC_GPIO0 (GPIO36)
RTC_GPIO3 (GPIO39)
RTC_GPIO4 (GPIO34)
RTC_GPIO5 (GPIO35)
RTC_GPIO6 (GPIO25)
RTC_GPIO7 (GPIO26)
RTC_GPIO8 (GPIO33)
RTC_GPIO9 (GPIO32)
RTC_GPIO10 (GPIO4)
RTC_GPIO11 (GPIO0)
RTC_GPIO12 (GPIO2)
RTC_GPIO13 (GPIO15)
RTC_GPIO14 (GPIO13)
RTC_GPIO15 (GPIO12)
RTC_GPIO16 (GPIO14)
RTC_GPIO17 (GPIO27)

PWM

    มี 16 ช่อง สามารถสร้างสัญญาณ PWM แบบต่างๆได้สามารถใช้กับขาเอาต์พุตทุกตัวยกเว้น GPIO34-39 โปรแกรมต้องกำหนด 
  • ความถี่ 
  • Duty cycle
  • Channel ของ PWM (0-16)
  • GPIO ที่ใช้ 
สำหรับมือใหม่ ทั่วไปเราสามารถหรี่ไฟได้โดยลดแรงดันหรือลดกระแสไฟ ในความเป็นจริงเราทำให้ควบคุมด้วยไมโครคอนโทรลเลอร์ไม่ง่ายนัก  ให้เราคิดว่าเราปิดเปิดสวิตท์รัวๆด้วยความเร็วสูงมากถ้าอยากให้สว่างก็ให้จังหวะการเปิดนานกว่าจังหวะปิดไฟ  เราสามารถหรี่หลอด LED หรือปรับองศาการหมุนของเซอร์โวมอเตอร์ด้วยสัญญาณ PWM ถ้าจะนำไปใช้งานต้องหาความรู้เพิ่มเติมในหัวข้อนี้

I2C

มีสองช่องซึ่งกำหนดให้ขาใดๆเป็น SDA or SCL ก็ได้ เมื่อใช้ ESP32 บน IDE ค่าตั้งต้นจะเป็น
GPIO 21 (SDA)
GPIO 22 (SCL)
เซนเซอร์หลายตัวใช้การสือสารแบบนี้

SPI

ค่าตั้งต้นของ GPIO สำหรับ SPI คือ
  SPI     MOSI     MISO     CLK        CS
VSPI  GPIO23  GPIO19  GPIO18  GPIO5
HSPI  GPIO13  GPIO12  GPIO14  GPIO15
เซนเซอร์หรืออุปกรณ์บางตัวใช้การสือสารแบบนี้

คงพอแค่นี้ก่อนหวังว่าจะเป็นประโยชน์กับผู้เริ่มต้นใช้งาน การเชื่อมต่อแบบต่างๆจะมีบทความในหัวข้อนั้นๆในโอกาสต่อไป

เพิ่มเติม



ไม่มีความคิดเห็น:

แสดงความคิดเห็น

Module:Control:IFR 520

MOSFET Module  สวิตซ์ปิดเปิดไฟเหมือน Relay แต่เป็น Solid state (ไม่มีส่วนที่เคลื่อนไหว) มันทำงานที่ความถี่สูงได้เหมาะกับเอาไปใช้งาน PWM ...