nodeMCU v2 +Keypad 4×4 + PCF8574AT( io expender), use 2 wires only.

คลิปนี้เป็นการรับ input ด้วย keypad เชื่อมต่อผ่าน i2c interface ของ pcf8574 ซึ่งเป็น io expender ทำให้เรามี io เพิ่มขึ้น จะสาธิตการใช้ keypad รีเซต 1 รอบก่อน ตอนนี้ กำลังเริ่มระบบใหม่ ถ้าขึ้น press key แสดงว่า พร้อมกด key กดเลข 1 2 3 6 7 8 A B C clear ค่าบนหน้าจอ กด * จะเป็นการลบหน้าจอและพร้อมคีย์อีกครั้ง 9 6 C D clear หน้าจอ กดปุ่ม * เป็นการใช้งาน keypad ร่วมกับ pcf8574 keypad ปรกติ จะใช้ แบบ 16keys จะใช้สายสัญญานทั้งหมด 8 เส้น จะทำให้ nodemcu มีขา io เหลือน้อย ดังนั้นจึงใช้ pcf8574 ทำงานร่วมกับ keypad 4×4 pcf8574 เป็น io expender ขยายขาเพิ่มมาเป็น 8 ช่องสัญญาน หรือ 8 io เชื่อมต่อกับ nodemcu ใช้เพียง 2 เส้น เป็นการเชื่อมต่อแบบ i2c ก็จะทำให้ เรามี io เพิ่มมาเป็น 8 ports ก็สามารถนำมาทำงานร่วมกับ matrix keypad 4×4 ได้ pcf8574 ใน 1 module จะขยายขาได้ 8 ขา แต่ สามารถพ่วง ได้ถึง 8 modules ดังนั้นจึงทำให้มี io ได้ถึง 64 ขา จะทดสอบ โดยทำการ กด keypad ตัวเลข จะไปปรากฏบน จอ OLED จะเห็นว่า OLED เชื่อมต่อผ่าน i2c interface บน บอร์ด ของ pcf8574 ซึ่งได้ทำขา แบบ female socket ทำให้สะดวก ในการเชื่อมต่อแบบ i2c จุดที่เชื่อมต่อ i2c สาธิตให้ดูก่อน พูดถึงการ wire สาย กด 1 2 3 ถ้ากด * ตามที่โปรแกรมไว้ จะเป็ฯการ clear หน้าจอ เพื่อให้ clear หน้าจอ พร้อมกับ ป้อนข้อมูลเข้าไปใหม่ A B C D 3..6..9 clear 1 4 5 7 8 กด * clear นี่ก็เป็นการทำงาน การใช้ keypad ร่วมกับ pcd8574 เพื่อทำการลดการใช้ ขา io ของ nodemcu โดยใช้เพียงแค่ 2 สาย นั่นคือ scl และ sda

ซึ่งเป็น i2c interface มาดูในส่วนการ wire สาย นี่คือ pinout ของ pcf8574 ตัว module ที่ผมใช้เป็นลักษณะนี้ ผมใช้ pcf8574AT pcf8574 กับ pcf8574A จะแตกต่างกันที่ i2c address pcf8574at ที่ผมใช้อยู่จะมี i2c address เป็น 0x38 จะเห็นว่าในคลิป จะมีตัวอุปกรณ์ที่ใช้ i2c อยู่2ตัว จอ OLED และ pcf8574 ดังนั้นต้องทำการ scan หา i2c ก่อน เราสามารถใช้ i2c scanner sketch ของ arduino ide ทำการ scan หา i2c เมื่อทราบ i2c ก็สามารถไปทำการโปรแกรมต่อไป นี่คือ manual matrix keypad max current 35vdc 100 mA นี่คือ วงจร การ wire สาย ระหว่าง keypad และ pcd8574 จะเห็นว่า ใช้ทั้ง keypad 16keyes และ 12keyes จะเห็นตัวที่เป็น 12keyes จะไม่มี column 3 ก็คือ column A B C D ดูในรูป แถบสีแดงใน keypad จะไม่มี แต่ก็สามารถเชื่อมต่อ โดยใช้ library เดียวกันได้เลย ในการสื่อสารระหว่าง keypad และ pcf8574 ในวงจรจะเห็นว่า ในภาพจะเห็นว่า จะเป็น keypad แบบ 16keyes หรือ 4×4 ซ้ายสุดของ keypad จะเป็น pin1 ขวาสุดจะเป็น pin8 pin1 จะเริ่ม จาก R1-R4 ก็คือ แถวที่ 1 – แถวที่ 4 ด้านขวาถัดมา ตั้งแต่ pin ที่ 5 จะเป็น C1-C4 จะสังเกต ผมได้ทำตัวหนังสือสีแดง R1(key) เชื่อมอยู่ที่ P0 (pcf8574) ขาที่ column C1-C4(key) ก็คือ P4-P7(pcf8574) ให้ต่อตามลำดับ โดยปรกติ มันควรจัดสายอย่างนี้ แต่ถ้าหากว่า แถวหรือ column ไม่ได้เป็นอย่างตามคลิป เราสามารถทดสอบ ได้ว่า keypad มี R1-R4…. C1-C4 เป็นอย่างไร สายสัญญาน 1-8 สายไหน เป็น สายไหนเป็น แถว หรือ สายไหนเป็น column ต้องหาก่อน โดยใช้ multimeter ทำการหา หลังจากทราบว่า สายสัญญานใน keypad สายไหนเป็น แถว หรือ column เราก็สามารถจับคู่กับ p0 – p7 ได้

Vcc จะเข้าที่ ขา 16 ของ pcf8574 ตรงนี้จะเห็นทำ c-decoupling ไว้ 0.1uf จะเป็นการแนะนำจาก ใน manual ผมจะให้ดู จะเห็นว่ามี c ที่เป็น multilayer อยู่ตรงนี้ หรืออาจใช้ c แบบ tantalum ก็จะเป็น capa แบบ low leak หรือ low esr อีกภาพ จะเห็นว่ามี c ซึ่งจะคร่อมระหว่าง Vdd และ Ground ดังภาพ ผมจะทำ link ไว้ให้ download คู่มือนี้ จาก interface ตามภาพนี้ จะเป็นการเชื่อมระหว่าง keypad และ pcd8574 จะเห็นว่า ตรงที่เป็น column p4- p7 (pcf8574) ต้องมี r-pullup 10k สำหรับ สายที่เป็น column ตามภาพนี้ หรือถ้าดูในวงจร จะเห็นว่า ผมจะมี มี r 10k 4 ตัว ตามจำนวนของ column ทำ pull-up ระหว่าง Vcc กับ C1-C4 ของ keypad ผมใช้ร่วมกับ nodemuc ดังนั้น Vcc จ่ายมาคือ 3.3v pcf8574 ช่วง volt การทำงานของมันคือ 2.5-6V จะเห็นว่ามี R 220โอหม์ อีกชุด จะต่ออนุกรม กับขา column ของ keypad เหมือนกัน ไปยัง p1-p7 นั่นเอง สาเหตุที่ทำเพื่อ ใช้ r 220โอห์ม เพื่อ ในการป้องกัน short ระหว่าง LOW และ HIGH state เมื่อมีการกด หลายปุ่มพร้อมกัน ซึ่งอาจจะ short ได้ ในวงจรผมใช้ nodemcu v2 ซึ่งจะเห็นว่า จะเห็นว่าสายสัญญานทั้งหมดที่มาจาก keypad 8 เส้น จะอยู่บนบอร์ด pcf8574 และจาก pcf8574 จะ interface แบบ i2c กับ nodemcu v2 ที่ ขา sda(D2) ,scl(D1) ซึ่งทำให้สามารถใช้ keypad 16keyes เพียง 2 สายกับ nodemcu บน pcf8574 จะมี female socket แบบ i2c ทำให้ ทำให้ นำ OLED มาเชื่อมตรงนี้ ได้เลย แรงดัน Volt คือ 3.3 ในวงจรจะมี active buzzer และ red led จะตอบสนองเมื่อมีการกดปุ่ม บน keypad

จะได้ยินเสียงและไฟกระพริบ ลองกดปุ่ม 8 จะได้ยินเสียงและเห็นไฟกระพริบ 5 library จะมีให้ดาวน์โหลด เอกสารที่เป็น pdf อยู่ในนี้ เอกสารชุดนี้ ในส่วน arudino code ใช้งานกับ OLED นี่เป็นในส่วนของ OLED นี่เป็นส่วนของ Logo ที่ผมนำมาใช้ใน project นี้ มาดูในส่วน logo ผมจะรีเซต นี่ก็คือ ภาพ ที่เกิดจากชุดนี้ ซึ่งเป็น unsigned char เป็น array ของ bit เราสามารถทำได้โดย นี่คือรูปภาพแบบ monochrome เราต้องเตรียมไว้ก่อน หาก่อน ว่าอยู่ไฟล์ไหน คือ ตัวนี้ นี่คือ ภาพ แบบ monochrome เราสามารถทำได้ โดยเข้าไป ที่ paint program เซฟภาพ เลือกแบบ monochrome เราจะได้ไฟล์ bitmap มา เราก็จะมาเปิดโปรแกรม TheDotFactory เมื่อได้ ไฟล์ภาพ มาแล้ว มาแปลงเป็น array แล้วเราก็นำโค็ด ไปใช้เมื่อแปลงเสร็จ เลือกไฟล์ภาพ ตรงนี้ setup จุดนี้เลือก อักขระนำหน้า ผมใส่ B คือ binary apply และ กดปุ่ม generate นี่เป็นรูปแบบ hex code ถ้าต้องการ แบบ binary เปลี่ยนตรงนี้ เลือก binary generate อีกรอบ นี้ก็คือ char array ทำการ copy ไปวางในส่วน ประกาศ static const unsigned char PROGMEM ก็จะได้ ภาพที่เราต้องการ ลองรันดู นี่คือส่วน library ที่ใช้กับ keypad wire.h เนืองจากเราใช้ i2c , wire.h จึงต้องใช้ #define I2CADDR 0x38 สำหรับ pcf8574 ผมใช้ pcf8574AT

ถ้า pcf8574 จะเป็น 0x20 หรือให้ลองทำการ scan หา i2c โดยใช้ i2c scanner จะมีให้ download นี้คือ layout ของ keypad ป้อนตัวเลข ตาม อักษรใน keypad ที่เราใช้ แต่ละตำแหน่งเราสามารถเปลี่ยนเป็น อักขระตัวอื่นได้ ซึ่งเมื่อกดจะแสดงผลตามที่เราได้กดไป [ใส่ตามลำดับ ตามในคลิป] ตัวนี้ สร้าง object ของ keypad ตรงนี้ก็เป็นส่วนของ buzzer และ red led เวลาเรากดปุ่มจะมีเสียงและไฟกระพริบ ส่วนของฟังกชั่นการแสดงผลบนหน้าจอ oled นี่คือ ตัวแปรของ ไฟล์ภาพ monochrome ทำการแสดงผลที่ขนาดภาพ 120 px * 60px ClearS() ฟังกชั่นนี้จะถูกเรียกเมื่อกดปุ่ม * กดปุ่ม * จะ clear หน้าจอแล้วกลับมาให้เราป้อนตัวอักษรต่อ ในส่วน setup() [ตามคลิป] เริ่มการทำงาน keypad initDisplayMsg(); เรียกการแสดงผลเริ่มต้น ลองรีเซตให้ดุ จะเรียกไฟล์ภาพ ‘JOEGTEC’ ขึ้นมา ใช้งาน event ของ keypad อ่านค่าที่กดเข้ามาไว้ที่ตัวแปร key เมื่อเกิด event ขึ้นมา เมื่อเรากด จะมีการดัก state ของมัน ว่าสถานะของมันเป็นแบบไหน ซึ่งถ้ามีการกด หรือ การปล่อย หรือมีการ hold คือกดค้างไว้ ที่ผมใช้คือส่วน press state และ hold state ไว้สำหรับ clear หน้าจอ เมื่อไรมีการกด จะเรียก ฟังกชั่น buzzer และ แสดงไฟกระพริบ คำสั่งจะส่ง key ไปปรากฏบนจอ oled ผมกด 5 7 9 display คำสั่ง เราสร้าง คำสั่ง oled แล้ว คำสั่งสุดท้าย เพื่อให้ทำการแสดงผล display.display(); นี่คือส่วนของการใช้งาน keypad กับ pcf8574 ตัว ขยายขา io 8ขา สำหรับไฟล์ต่างๆที่ใช้ใน project

arudino sketch , manual , library จะมี link ไว้ให้ download ถ้าหากผมพูดอะไร ผิดพลาดไป ต้องขออภัย ใน ณ ที่นี้ ขอบคุณครับ