สารบัญ:

NODEMCU LUA ESP8266 พร้อม MCP23008 8 บิตพอร์ต Expander IC: 6 ขั้นตอน
NODEMCU LUA ESP8266 พร้อม MCP23008 8 บิตพอร์ต Expander IC: 6 ขั้นตอน

วีดีโอ: NODEMCU LUA ESP8266 พร้อม MCP23008 8 บิตพอร์ต Expander IC: 6 ขั้นตอน

วีดีโอ: NODEMCU LUA ESP8266 พร้อม MCP23008 8 บิตพอร์ต Expander IC: 6 ขั้นตอน
วีดีโอ: ESP8266 NodeMCU Interface - MCP23017 i/o expender with LED Example! 2024, พฤศจิกายน
Anonim
NODEMCU LUA ESP8266 พร้อม MCP23008 8 บิตพอร์ต Expander IC
NODEMCU LUA ESP8266 พร้อม MCP23008 8 บิตพอร์ต Expander IC

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
การเดินสายไฟ 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

Kitt Car Program
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

LED 7 ส่วน
LED 7 ส่วน

เช่นเดียวกับโปรแกรม KittCar.lua ด้านบน ฉันได้รวมโปรแกรมแบบสแตนด์อโลนและโปรแกรมที่ใช้ไลบรารีเพื่อขับเคลื่อนจอแสดงผล LED 7 ส่วน

อีกครั้ง ทั้งสองโปรแกรมทำสิ่งเดียวกัน แต่สาธิตวิธีใช้โมดูลไลบรารีที่เขียนขึ้นเองหรือของผู้อื่น

ขั้นตอนที่ 6: บทสรุป

บทสรุป
บทสรุป

ฉันได้พยายามสาธิตวิธีใช้โมดูลโค้ดภายในสภาพแวดล้อม Lua และนำไปใช้กับ IC เฉพาะในเวลาเดียวกัน

แม้ว่าฉันจะมีปัญหาในการทำเช่นนี้ แต่ฉันคิดว่ามีเพียงพอที่จะแสดงให้เห็นว่าโมดูลเหล่านี้ทำงานอย่างไร รวมทั้งสาธิตการใช้งานจริง

แนะนำ: