สารบัญ:
- ขั้นตอนที่ 1: การเดินสายไฟ MCP23008
- ขั้นตอนที่ 2: การสร้างบอร์ด
- ขั้นตอนที่ 3: การใช้โมดูลไลบรารี
- ขั้นตอนที่ 4: Kitt Car Program
- ขั้นตอนที่ 5: 7 เซ็กเมนต์ LED
- ขั้นตอนที่ 6: บทสรุป
วีดีโอ: NODEMCU LUA ESP8266 พร้อม MCP23008 8 บิตพอร์ต Expander IC: 6 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:07
MCP23008 เป็น 8-Bit I/O Expander พร้อม Serial Interface และทำงานระหว่าง 1.8 ถึง 5.5 โวลต์ ดังนั้นจึงเหมาะอย่างยิ่งสำหรับ ESP8266, Arduino, Raspberry Pi, PIC Chips และอื่นๆ
หากคุณเคยเห็น Instructable อื่นของฉันใน MCP23017 คุณอาจสงสัยว่าทำไมฉันถึงทำอย่างนั้นกับ MCP23008 เนื่องจากเป็นรุ่นเดียวกันที่เล็กกว่า
เหตุผลคือการลงทะเบียนต่างกันทั้งในชื่อและหมายเลข และฉันต้องการแสดงวิธีใช้โมดูลห้องสมุดสำเร็จรูป ไม่ใช่ทุกคนที่เก่งเมื่อใช้ NodeMCU lua ดังนั้นฉันจึงอยากจะแสดงแง่มุมของการเขียนโปรแกรมนี้รวมถึงวิธีใช้ MCP23008
ห้องสมุดและโปรแกรมต่างๆ มีอยู่ที่ github.com
เอกสารข้อมูลสำหรับ MCP23008 มีให้ที่ Microchip
ขั้นตอนที่ 1: การเดินสายไฟ MCP23008
MCP23008 IC มีเลย์เอาต์ที่เรียบง่ายและการสร้างบอร์ดนั้นง่ายมากสำหรับมัน คุณยังสามารถตั้งค่าวงจรบนเขียงหั่นขนมได้
ปักหมุดการเชื่อมต่อบนกระดานของฉัน
- ตรึง 18 (VDD) ถึง 3v3
- ตรึง 9 (VSS) กับ GND
- พิน 7 (NC) ถึง GND (ไม่จำเป็น)
- ตรึง 1 (SCL) กับ ESP GPIO2
- ตรึง 2 (SDA) กับ ESP GPIO0
- ตรึง 5 (A0) ถึง GND
- ตรึง 4 (A1) ถึง GND
- ตรึง 3 (A2) ถึง GND
- ปักหมุด 6 (รีเซ็ต) เป็น 3v3
เชื่อมต่อพินที่จะอ่านไปยัง Gnd บนพอร์ต A (พิน 10 - 17)
หมายเหตุ: ที่นี่หมุดที่อยู่ทั้งหมดเชื่อมต่อกับ Gnd เพื่อใช้ MCP23008 ที่ที่อยู่ 0x20 บนบัสที่อยู่ I2C
หากคุณใช้ที่อยู่ 0x21 ดังนั้น A0 จะเชื่อมต่อกับ 3.3V โดยที่ A1 & A2 เชื่อมต่อกับ Gnd
ในทำนองเดียวกัน หากใช้ที่อยู่ 0x22 ดังนั้น A1 จะต้องเชื่อมต่อกับ 3.3V โดยที่ A0 และ A2 เชื่อมต่อกับ Gnd
ฯลฯ…
ขั้นตอนที่ 2: การสร้างบอร์ด
ฉันใช้กระดานแถบ Vero ขนาด 25 มม. x 64 มม. (9 แถว x 25 รู) เพื่อสร้างบอร์ดของฉัน มันค่อนข้างแน่น แต่เนื่องจากพินส่วนใหญ่ที่คุณต้องการจะอยู่ที่ด้านใดด้านหนึ่งของ IC จึงเพียงพอสำหรับสิ่งที่ต้องทำ
ฉันใช้ 8 พินและซ็อกเก็ตส่วนหัว 8 อันสำหรับพอร์ต A เพื่อให้ฉันสามารถเสียบโมดูลต่างๆ ของฉันรวมถึงการเดินสายอื่นๆ สำหรับโปรเจ็กต์ต่างๆ ฉันได้เพิ่มพิน Gnd และ 3.3V เพิ่มเติม เนื่องจากฉันพบว่ามีปัญหาเหล่านี้เสมอเมื่อเชื่อมต่อโมดูลเข้าด้วยกัน
ขั้นตอนที่ 3: การใช้โมดูลไลบรารี
โดยปกติแล้ว โมดูลไลบรารีจะประกอบด้วยการเลือกรูทีนย่อย ฟังก์ชัน และตัวแปรที่สามารถเข้าถึงได้โดยโปรแกรมอื่น ตัวโปรแกรมไม่ทำงาน แต่สามารถเข้าถึงฟังก์ชันของโปรแกรมที่เรียกได้ หมายความว่าคุณสามารถมีรูทีนย่อยของคุณภายในไลบรารีและเรียกพวกเขาได้ทุกเมื่อที่คุณต้องการ สร้างโปรแกรมการโทรขนาดเล็ก มันจะมีค่ามากขึ้นถ้าคุณมีโปรแกรมต่างๆ มากมายโดยใช้รูทีนย่อยเดียวกัน คุณไม่จำเป็นต้องรวมรูทีนย่อยในทุกโปรแกรม
หมายเหตุ: ต้องโหลดโปรแกรม mcp23008.lua ลงในหน่วยความจำ ESP8266 เช่นเดียวกับโปรแกรมอื่นๆ
ฉันได้รวมโปรแกรม github.com ไว้ที่นี่ เช่นเดียวกับโปรแกรมง่ายๆ (test.lua) เพื่อแสดงว่าไลบรารีนั้นใช้งานได้
มีอย่างน้อย 2 วิธีในการรวมห้องสมุดไว้ในโปรแกรมของคุณ
ต้องการ ("mcp23008")
mcp23008.begin(0x0, gpio2, gpio0, i2c. SLOW)
หรือ
mcp = ต้องการ ("mcp23008")
mcp.begin(0x0, gpio2, gpio0, i2c. SLOW)
ทั้งสองอย่างข้างต้นทำสิ่งเดียวกัน แต่วิธีที่สองช่วยให้คุณใช้ตัวแปรของคุณเองแทนชื่อโปรแกรมได้
ขั้นตอนที่ 4: Kitt Car Program
ฉันได้รวมโปรแกรม KittCar23008.lua และ KittLib.lua ซึ่งใช้ไลบรารีเพื่อแสดงความแตกต่างในการเขียนโปรแกรมด้วยวิธีนี้ ทั้งสองโปรแกรมทำสิ่งเดียวกัน
ปลั๊กไฟ LED 8 ดวงมีจำหน่ายจากอีเบย์เป็นชุดและเป็นที่รู้จักกันในชื่อชุด DIY ไฟ LED น้ำไหล 8 ช่อง 99p จากประเทศจีน คุณต้องบัดกรีด้วยตัวเอง
หมายเหตุ: หากคุณมีปัญหาในการพยายามเรียกใช้โปรแกรม KittLib.lua ให้ลองเชื่อมต่อพิน MCP23008 RESET กับ Gnd ชั่วขณะ ฉันรู้ว่าสิ่งนี้จะทำให้ไฟฟ้าลัดวงจรโดยตรง (เนื่องจากเชื่อมต่อกับ 3.3V) และคุณต้องรีเซ็ตทุกอย่างอื่น นอกจากนี้ยังทำงานโดยเชื่อมต่อกับ Gnd ผ่านตัวต้านทาน 10 โอห์ม ซึ่งน่าจะเป็นวิธีที่ดีกว่า
ฉันยังพบว่า KittLib.lua จะทำงานโดยไม่มีปัญหาหลังจากรัน test.lua (อย่าถามว่าทำไม?)
ฉันได้ลองวิธีต่างๆ ในการแก้ไขปัญหาโปรแกรม KittLib.lua แล้ว แต่ยังไม่พบเหตุผลเชิงตรรกะใดๆ ว่าทำไมจึงเกิดปัญหา ใครมีความคิดใด ๆ ?
ฉันไม่ได้เขียนโปรแกรมเหล่านี้ทั้งหมดด้วยตัวเอง ดังนั้นฉันจึงไม่สามารถพูดได้ว่าทำไมถึงมีปัญหา แม้ว่าหลังจากดูการเขียนโปรแกรมแล้ว ดูเหมือนว่าจะไม่มีอะไรผิดพลาดอย่างเห็นได้ชัด
ขั้นตอนที่ 5: 7 เซ็กเมนต์ LED
เช่นเดียวกับโปรแกรม KittCar.lua ด้านบน ฉันได้รวมโปรแกรมแบบสแตนด์อโลนและโปรแกรมที่ใช้ไลบรารีเพื่อขับเคลื่อนจอแสดงผล LED 7 ส่วน
อีกครั้ง ทั้งสองโปรแกรมทำสิ่งเดียวกัน แต่สาธิตวิธีใช้โมดูลไลบรารีที่เขียนขึ้นเองหรือของผู้อื่น
ขั้นตอนที่ 6: บทสรุป
ฉันได้พยายามสาธิตวิธีใช้โมดูลโค้ดภายในสภาพแวดล้อม Lua และนำไปใช้กับ IC เฉพาะในเวลาเดียวกัน
แม้ว่าฉันจะมีปัญหาในการทำเช่นนี้ แต่ฉันคิดว่ามีเพียงพอที่จะแสดงให้เห็นว่าโมดูลเหล่านี้ทำงานอย่างไร รวมทั้งสาธิตการใช้งานจริง
แนะนำ:
All Band Receiver พร้อม SI4732 / SI4735 (FM / RDS, AM และ SSB) พร้อม Arduino: 3 ขั้นตอน
All Band Receiver พร้อม SI4732 / SI4735 (FM / RDS, AM และ SSB) พร้อม Arduino: เป็นโปรเจ็กต์เครื่องรับย่านความถี่ทั้งหมด ใช้ห้องสมุด Arduino Si4734 ห้องสมุดนี้มีตัวอย่างมากกว่า 20 ตัวอย่าง คุณสามารถฟัง FM ด้วย RDS สถานี AM (MW) ในพื้นที่ SW และสถานีวิทยุสมัครเล่น (SSB) เอกสารทั้งหมดที่นี่
อินเทอร์เฟซ ESP32 พร้อม SSD1306 Oled พร้อม MicroPython: 5 ขั้นตอน
อินเทอร์เฟซ ESP32 พร้อม SSD1306 Oled พร้อม MicroPython: Micropython เป็นการเพิ่มประสิทธิภาพของ python และมีขนาดเล็กของ python ซึ่งหมายถึงการสร้างสำหรับอุปกรณ์ฝังตัวซึ่งมีข้อจำกัดด้านหน่วยความจำและใช้พลังงานต่ำ Micropython สามารถใช้ได้กับคอนโทรลเลอร์หลายตระกูล ซึ่งรวมถึง ESP8266, ESP32, Ardui
PWM พร้อม ESP32 - Dimming LED พร้อม PWM บน ESP 32 พร้อม Arduino IDE: 6 ขั้นตอน
PWM พร้อม ESP32 | Dimming LED พร้อม PWM บน ESP 32 พร้อม Arduino IDE: ในคำแนะนำนี้เราจะดูวิธีสร้างสัญญาณ PWM ด้วย ESP32 โดยใช้ Arduino IDE & โดยทั่วไปแล้ว PWM จะใช้เพื่อสร้างเอาต์พุตแอนะล็อกจาก MCU ใดๆ และเอาต์พุตแอนะล็อกนั้นอาจเป็นอะไรก็ได้ระหว่าง 0V ถึง 3.3V (ในกรณีของ esp32) & จาก
NODEMCU LUA ESP8266 พร้อม CD4017 Decade Counter: 4 ขั้นตอน (พร้อมรูปภาพ)
NODEMCU LUA ESP8266 พร้อม CD4017 Decade Counter: CD4017 เป็นตัวนับทศวรรษ / ตัวแบ่ง ซึ่งหมายความว่าเมื่อได้รับพัลส์จะนับและส่งเอาต์พุตไปยังพินที่เหมาะสม เป็น IC ที่ใช้งานง่ายและคุณสามารถสร้างวงจรบนบอร์ดขนมปังหรือซื้อจาก Ebay สำหรับ
NODEMCU LUA ESP8266 พร้อม MCP23017 16 บิตพอร์ต Expander IC: 6 ขั้นตอน (พร้อมรูปภาพ)
NODEMCU LUA ESP8266 พร้อม MCP23017 16 Bit Port Expander IC: MCP23017 เป็น IC ที่ค่อนข้างง่ายในการสร้างบอร์ดเนื่องจากมีพอร์ต A และ B ที่ด้านใดด้านหนึ่งของชิปและพินอยู่ในลำดับ ในทำนองเดียวกัน I2C address bus คือ รวมทั้งหมดเช่นกัน มี 2 พินบน IC นี้ซึ่งไม่ได้ใช้เนื่องจาก