以åããMCP23017(i2céä¿¡)ãšäžç·ã«è³Œå
¥ããã
MCP23S17(SPIéä¿¡)ã䜿ã£ãŠãã¹ãããäºå®ãã
ãããããš…
ä»åã¯ã³ã¡ã³ãã§ãã£ãŠã»ãããšããäŸé ŒããããŸããŠã
ããããMCP23S17ãšRaspberryPiãã€ãªããŠã
LEDãç¹ç¯ãããŸãã
MCP23S17ã¯IOãšã¯ã¹ãã³ããšãããã®ã§ã
åçŽã«èšããšããã®ãããã«åœä»€ãåºããšã
ããããã®è¶³ãHighã«ãªã£ãããLowã«ãªã£ããã§ããã
ãšãã䟿å©ãªãã®ã§ãã
ãã¡ãããã³ã®æ°ã«ãéãããããŸããã
Aã®ã»ãã§0~7
Bã®ã»ãã§0~7
ãªã®ã§åèš16æ¬GPIOãã³ãå¢ãããããªã€ã¡ãŒãžã§ãã
I2Cã®ã»ãã¯ãã§èšäºã«ããŠããŸãããã
MCP23017ã®ã»ãã䜿ã£ãŠã¿ããæ¹ã¯
ãã¡ãã®èšäºã確èªããŠã¿ãŠãã ããã
Youtubeãã£ã³ãã«ã«ããŸããŸãªåç»ãäžããŠããŸãã
âââãã¡ãããYoutubeãã£ã³ãã«ã«ã¢ã¯ã»ã¹!! âââ
æ¬ããã°ã¯ã¢ãã£ãªãšã€ããçšããåºåãæ²èŒããŠããŸãã
ä»åãã£ãããšãå®è¡ãããšãããªæãã§LEDãç¹ç¯ããŸãã
- ä»å䜿çšããéå ·ãã¡
- RaspberryPiãšPythonã®éçºç°å¢ã«ã€ããŠ
- RaspberryPiãšMCP23S17ãš7ã»ã°LEDãæ¥ç¶ãã
- MCP23S17ãRaspberryPiãšPythonã§å¶åŸ¡ããã«ã¯
- ããããã¯ã次åã«ã€ãªããMCP23017ãšç°ãªããšãã…
- ä»åã®ãŸãšã
ä»å䜿çšããéå ·ãã¡
ä»å䜿çšããã®ã¯åçã®ããã«ã
䞻圹ã®MCP23S17ãšã7ã»ã°ãæµæãRaspberryPi400ã§ãã
![](https://www.hobbyhappyblog.jp/wp-content/uploads/2022/12/image-21.png)
![](https://www.hobbyhappyblog.jp/wp-content/uploads/2022/12/image-22.png)
![](https://www.hobbyhappyblog.jp/wp-content/uploads/2022/12/image-23.png)
ä»å玹ä»ããŠããã®ã¯7ã»ã°ã§ããã7ã»ã°ã§ããå¿
èŠã¯ãããŸããã
ãã¡ãããã ã®LED1æ¬ãæµæ1æ¬ã§ãŸã£ããåé¡ãªãã§ãã
ãããã®å Žåã¯ããã§ã«ãã¬ããããŒãã«7ã»ã°ããã£ã€ããŠããã®ã§ã
å€ãã®ãé¢åã ã£ãã®ã§ãã®ãŸãŸã«ããŸããã
ããããæå³ã§ã¯ããã¬ããããŒããš
ãžã£ã³ããŒã¯ã€ã€ãŒãçšæããŠãããŠãã ããã
ä»å䜿çšããŠããã®ã¯ã以åã·ããã¬ãžã¹ã¿ããMCP23017ã®æã«äœ¿çšãããŸãŸã®ç¶æ ã ã£ãããª???
ãšãããããã¢ããŒãã³ã¢ã³ã®ã¿ã€ãã§ãã
åçã®çŽ«ã®ç·ã«+3.3Vãå
¥ããç¶æ
ã§ã
åãã³ãGNDã«èœãšããŠããããšLEDãå
ããšããä»çµã¿ã§ããã
ããå°ã詳ãã解説ããèšäºã以åã®ãã®ã§ããã®ã§ã
æ°ã«ãªã£ããèªãã§ã¿ãŠãã ããã
ãããã®éšåã¯åºæ¬Amazonãé信販売ã§ãåãæ±ããããŠããŸãã
è¿ãã«å®ç©ã販売ããŠããåºèããªãå Žåã¯ã
é販ã䜿ãã®ããªã¹ã¹ã¡ã§ãã
âRaspberryPi400
âMCP23S17
âã¢ããŒãã³ã¢ã³ã®7ã»ã°LED
âãã¬ããããŒããšãå°ç©é¡ã®ã»ãã
RaspberryPiãšPythonã®éçºç°å¢ã«ã€ããŠ
éçºç°å¢ã¯ããããŠãããã»ããããã®ã§ã
ä»å䜿çšããéçºç°å¢ã«ã€ããŠã玹ä»ããŠãããŸãã
äžå¿å·çæç¹ã§ã»ãŒã»ãŒææ°ã«ããç¶æ ã§æ€èšŒããŠããŸãã
äžéšã§python3ã§ã¯å®è¡ã§ããªããªããŠè©±ãåºãŠããŸãããã
ãã®ç¶æ
ã§ã§ããã®ã§ãããããVer.ããŠã³ã¯ããªããŠããããã§ãã
RaspberryPiãšMCP23S17ãš7ã»ã°LEDãæ¥ç¶ãã
次ã«é
ç·ã§ããã
MCP23S17ã¯å
è¿°ã®éããSPIéä¿¡ã䜿çšããŸãã
RaspberryPiã®ã»ããSPIéä¿¡ã®ãã³ã䜿çšããŸããã
察å¿ãããã³ãããããã決ãŸã£ãŠããŸãã®ã§ãééããªãããã«æ³šæãå¿
èŠã§ãã
é ç·ã¯ãããªæãã§ããâââ
![raspberryPi-mcp23017](https://www.hobbyhappyblog.jp/wp-content/uploads/2022/12/raspberry_spi.jpg)
ç¹°ãè¿ãã«ãªããŸããã
LEDã¯7segã®LEDã䜿çšããå¿
èŠã¯ãããŸããã
ç ²åŒŸåã®æ®éã®LEDã䜿çšãããå Žåã¯ã
ãªã¬ã³ãžç·ã«LEDã®ã¢ããŒã(足ã®é·ãæ¹)ãæ¥ç¶ããŠã
ã«ãœãŒããæµæã®ãã¡ã©ã¡ããã«ã€ãªããŠãããã°ããã§ãã
ãããããI2Céä¿¡Ver.ã®MCP23017ã§ã¯éèŠã ã£ãã¢ãã¬ã¹ã«ã€ããŠã§ããã
ããã¯ä»ã¯ããŸãæ°ã«ããªããŠããã§ãã
ãšããã®ããå¥èšäºã§è§£èª¬ããäºå®ã®ããã§ãã
ãšã«ããä»åã¯ãã¡ãã®ããã«é
ç·ããŠããããã°LEDã¯å
ããŸãã
MCP23S17ãRaspberryPiãšPythonã§å¶åŸ¡ããã«ã¯
é
ç·ã¯å®äºããã®ã§ã
ããããã¯RaspberryPiã§å®éã«æäœãããŠãããŸãã
RaspberryPiåŽã§åæèšå®ãå¿
èŠã§ãã®ã§ã
ãã£ãã確èªããŠãããŸãããã
RaspberryPiã§SPIéä¿¡ãã§ããããã«ãªã£ãŠããã確èª
RaspberryPiã¯OSãæžã蟌ãã åæã®ç¶æ
ã ãšã
SPIéä¿¡ãããŠãããªãç¶æ
ã§ãã
ã§ãã®ã§ãSPIéä¿¡ãã§ããããã«ã
èšå®ãå€æŽããŠãããå¿
èŠããããŸãã
å
·äœçã«ã¯ãããèŠãŠãããã°ããã§ãã
RaspberryPiã®èšå®ã®ãšããã§ããã
![Raspberry Pi setting](https://www.hobbyhappyblog.jp/wp-content/uploads/2023/01/image.png)
äžãã3ã€ç®ã®Raspberry Piã®èšå®ãã¯ãªãã¯ããŸãããã
ãããšãããªç»é¢ãåºãŠããŸãã®ã§ãã€ã³ã¿ãŒãã§ã€ã¹ã®ã¿ããéžæããŸãã
![Raspberry Pi interface tab](https://www.hobbyhappyblog.jp/wp-content/uploads/2023/01/image-1.png)
ããã§ç¢ºèªããã®ããäžãã3ã€ç®ã®SPIãšãããšããã§ãã
ããã«æ¿ãã°ã¬ãŒã®è²ãã€ããŠããã°ã䜿ãããšããããšã«ãªããŸãã
ãããããã«è²ãã€ããŠããªããã°ã
ã¯ãªãã¯ãããŠSPIãæå¹åããŸãããã
ãŸãããã®SPIã«éããªã話ã§ããã
ããããžãã®èšå®ãå€æŽããããå¿
ãåèµ·å(reboot)ããŸãããã
åèµ·åããªããšãèšå®ãåæ ãããŸããã
ããçµæ§éèŠã§ãã
RaspberryPiã§SPIã䜿ãããã®æºå
ããŠãSPIã®æ©èœãONã«ãããšããã§ã
次ã«ããããšã¯ãpythonã§SPIéä¿¡ãããããã«å¿
èŠãªã©ã€ãã©ãªã®ååŸã§ãã
ã©ã€ãã©ãªã®ååŸãšã¯èšã£ãŠããããªã«å€§å€ãªäœæ¥ã§ã¯ãããŸããã
ããããpipã§ãã
ã¡ãªã¿ã«åæç¶æ
ã§SPIã®ã©ã€ãã©ãªã¯ã€ã³ã¹ããŒã«ãããŠãããšã®æ
å ±ããããŸããã
ãªãã©pipããã£ãŠãç¹ã«åé¡ã¯ãããŸããã
念ã®ããå®è¡ããŠããããšããªã¹ã¹ã¡ããŸãã
䜿çšããã©ã€ãã©ãªã®ååã¯ãspidevãšãããã®ã§ãã
å
·äœçã«pipã®ã³ãã³ããæžããŠãããšã
sudo pip3 install spidev
ãã®ããã«LXterminaläžã§æã¡èŸŒããšã
spidevããªãã¡ãpythonã䜿ã£ãRaspberryPiã®SPIéä¿¡çšã®ã©ã€ãã©ãªãã€ã³ã¹ããŒã«ã§ããŸãã
åé ã§ã玹ä»ããéçºç°å¢ã®çŽ¹ä»ã®ãšããã§ãæžããŸãããã
ãã®spidevã®Ver.ã¯3.5ã§å®è¡ããŠããŸãã
ãèªåã®spidevã®ver.ãç¥ãããæ¹ã¯ã
LXterminalã§ã次ã®ã³ãã³ããæãŠã°Ver.ã®äžèŠ§ãåºãŠããŸãã
pip3 list
pythonã®ã³ãŒããæžã
ããŠãã©ã€ãã©ãªãæºåã§ãããšããã§ã
ããããã³ãŒããæžããŸãã
ãŸãã¯ã³ãŒãã®å šäœãæ²èŒããŠãããŸãããã
import spidev
import time
# åæèšå®
spi = spidev.SpiDev()
# ããã®åŒæ°ã¯ã(bus,CE0orCE1)ãä»åã¯CE0ã«é
ç·ããŠããã®ã§0ã
spi.open(0,0)
spi.mode = 0
# 1MHzã§èšå®ãMCP23S17ã¯ããŒã¿ã·ãŒãäžã ãš10MHzãæé«ãããã
spi.max_speed_hz = 1000000
# CHãå«ããã¢ãã¬ã¹é¢ä¿ããŸãšããæååã
Control_Byte = 0x40
# IOã®åã(å
¥åoråºå)ã決ããã¬ãžã¹ã¿ã®ã¢ãã¬ã¹ã
REG_IODIRA = 0x00
# GPIOAã®å
¥åºåæ什ãåºãããã®ã¬ãžã¹ã¿ã®ã¢ãã¬ã¹ã
REG_GPIOA = 0x12
# ä»åã¯GPA0~A7ãŸã§å
šãŠåºåã«æå®ãåºå:0,å
¥å:1
spi.xfer2([Control_Byte,REG_IODIRA,0x00])
# whileã®ç¡éã«ãŒããäžæããããã®éé¿çšã®é¢æ°ã
def destroy():
print("end")
try:
# ããããç¡éã«ãŒã
while True:
# 0x03ã€ãŸãã00000011ãšãªããGPIOAã®0ãš1ãONããæ什ã
spi.xfer2([Control_Byte,REG_GPIOA,0x03]) #ON
time.sleep(1)
# 0x00 ã€ãŸãããã¹ãŠã®åºåæ瀺ãOFFã
spi.xfer2([Control_Byte,REG_GPIOA,0x00]) #OFF
time.sleep(1)
# Ctrl + Cã§ããã«å
¥ãã
except KeyboardInterrupt:
destroy()
ãããªæãã§ãã
ããã§ãšããããåãã¯ãã§ãã
ãã ãåŒã£æãããã€ã³ãã¯ããã€ããããšæããŸãã®ã§ã詳ãã解説ããŠãããŸãã
spi.open(0,0)ã¯ããæå€ã«èšå®æ¹æ³ããªããïŒ
ãã¡ãã¯ãã³ãŒãäžã«ã³ã¡ã³ããå
¥ããŠããŸããã
åŒæ°ã¯åãåããä»å玹ä»ããé
ç·éãã«ãªã£ãŠããã°ãã®ãŸãŸäœ¿ããŸãã
ãããè€æ°ã®MCP23S17ã䜿çšãããã
ãããã¯ãä»ã®SPIéä¿¡ã䜿çšããæ©åšãå¢èšãããã
ãããªãšãã¯ã
ãã®æ©åšãRaspberryPiäžã®CE1ã®ãã³ã«CSãã³ãã€ãªããŠãããã°ããã§ãã
ãã®åŸãspi.open(0,1)ãšããã°æ¥ç¶ã§ããŸãã
ããã¯çè«ã§ã¯ãããªãã¯ããªã®ã§ããã
å®éã«è©ŠããŠã¿ãªããšçŽåŸã§ããªãã§ãããã
ãã®ãã¡MCP23S17ã2ã€ã«ããŠæ¥ç¶ããŠã¿ãäºå®ã§ãã
spi.modeã¯0ã§ããã®ãïŒ
spiã¢ãŒãã¯ã0~4ãããŸããã
äžè¬çãªSPIéä¿¡ã®ã¢ãžã¥ãŒã«ã¯0ã§åãããã«ãªã£ãŠããããã§ãã
ãã¡ããããŒã¿ã·ãŒãã確èªããããã§æ±ºå®ããŠãã ãããã
ããã蟺ã®æ±ºãæ¹ã¯ã詳ãã解説ããŠããèšäºããããŸããã®ã§
ã玹ä»ããŠãããŸãã
SPIã¢ãŒãã«ã€ããŠè©³ãã解説ããŠããèšäº
Control_Byteã¯ãªã0x40ãªã®ïŒ
ããã¯å°ã説æãé·ããªããŸããã
ã¡ãããšèª¬æããŸãã
以åã®i2cçã®IOãšãã¹ãã³ããŒMCP23017ã®æã¯ãA0~A2ãGNDã«ã€ãªãããã
Vddã«ã€ãªãããã§ã¢ãã¬ã¹ãå€ããããšã話ããŸããã
å
·äœçã«ã¯ãA0~A2ãGNDã«ã€ãªãããšãã¢ãã¬ã¹ãã
0b010 0000ã§0x20ã«ãªãã
A0~A2ãVddã«ã€ãªãããšbitãç«ã£ãŠã
0b010 0111ã§0x27ã§ã¢ãã¬ã¹ããããããšã§æ倧8æ¬ã€ãªããããã
ãšããè«çã§ããã
ã§ã¯ä»å3æ¬ãšãGNDã«å
¥ããŠããããã0x20ãããªãã®ïŒ
ãšæããŸãããïŒéãã§ããã
å®ã¯ç§ãåéãããŠããŸãããã§ããããæåã¯0x20ãšããŠããããå
ããªã…ã
ãªããŠãã£ãŠãŸããã
ããã§éèŠã«ãªãã®ããã¢ãã¬ã¹ã決ããåŸã®ãããã§ãã
ããŒã¿ã·ãŒãã§ç¢ºèªããŸãããã
![](https://www.hobbyhappyblog.jp/wp-content/uploads/2023/01/image-2.png)
ãã¡ããèŠãŠããããšãããéããR/Wã®ããããæåŸã«å ¥ããŸãã
ã€ãŸãã0x20ã®æåŸã«0or1ãå
¥ããŸãã
ä»åã¯writeãããã®ã§ã0ãå
¥ããŸãã
ãšããããã§ã0b0010 0000ãšãªãããã§ãã
åæ§ã«ãA0~A2ãVddã«å
¥ãããšã0b0100 1110ã§ã4Eã«ãªããŸãã
ãªã®ã§ãä»å0x40ãæåã®ã³ãã³ããšããŠãããšããããã§ãã
REG_ããã¯ã©ãã§æ±ºããŠããã®ïŒ
REGã¯ãã¬ãžã¹ã¿ã®ç¥ã§ãã
ã¬ãžã¹ã¿ãšã¯ãç°¡åã«èšããšãããããã決ãŸã£ãŠããæ©èœã®çªå°ã®ãããªãã®ã§ãã
ãã®çªå°ãæå®ããŠããã®æ©èœã«åã£ãä¿¡å·ãéããšæãéãã«èšå®ã§ããŸããã
ãšããããšã§ãã
ããã¯ãi2céä¿¡Ver.ã®MCP23017ã§ã解説ããŠããŸãã
ä»åã®MCP23S17ã確èªããŠããããã°ã»ãŒäžç·ã§ããããšãããã£ãŠãããããšæããŸãã
ã©ãã§æ±ºããŠããããšããçåã®çãã¯ã
ãºã㪅ããŒã¿ã·ãŒãã§ããã
ããŒã¿ã·ãŒãã«è©³ããèšèŒããããŸãã®ã§ã
ããŒã¿ã·ãŒããåèã«ããŠã¿ãŠãã ããã
ãã£ãšã0x00ãIOã®åãã0x12ãå
¥åºåæ什ã§ãããšããã£ãŠããããã¯ãã§ãã
spi.xfer2()ã¯äœãããŠããã®ïŒ
spi.xfer2()âãã¡ãã¯ãå®éã«MCP23S17ã«ã³ãã³ããéã£ãŠããŸãã
åŒæ°()ã®ãªãã«å¿
èŠãªã³ãã³ããå
¥ããŠå®è¡ããŸãã
åŒæ°ã¯å¿
ãé
å[]ã§æž¡ããŸãã
ä»åã®MCP23S17ã®å Žåã¯ã(ã¢ãã¬ã¹+W/R+ã¬ãžã¹ã¿ã¢ãã¬ã¹+ã³ãã³ã)
ãšããåŒæ°ã«ãªã£ãŠããŸãã
ããã¯MCP23S17ã®ããŒã¿ã·ãŒãéãã«éãå Žåã®æ±ºãŸã£ããã©ãŒãããã«ãªããŸãã
ã€ãªããŠéãå ŽåãåŒæ°ã®äžã§ã«ã³ã(,)ãå
¥ããããšã§ç¶ããŠã³ãã³ããéãããŸãã
å ·äœçã«1ã€ç®ã®GPIOã®åããèšå®ãããšãããäŸã«ããŠè§£èª¬ããŸãããã
spi.xfer2([Control_Byte,REG_IODIRA,0x00])
ããŠãControl_Byteã¯ãå ã»ã©è§£èª¬ããéãã0x40ã§ãã
次ã«ãREG_IODIRAã¯0x00ã§ãã
ãã¡ãã¯ããŒã¿ã·ãŒãã§ã¬ãžã¹ã¿ã®ã¢ãã¬ã¹ã確èªããã°OKã®ã¯ãã§ãã
æåŸã«0x00ã¯ãGPIOAã®0~7ã®ãã³ããã¹ãŠåºå(:0)ã«èšå®ããŠããŸãã
ããã£ãŠããŸãã°ãããªã«é£ãããªãã§ãããïŒïŒ
ããããããšãããã°å°ãå€ããã ãã§ããããã§ãã
äŸãã°ãAã ãã§ãªããBã䜿ããã…ãšãªãã°ã
IODIRBã®ã¢ãã¬ã¹ãããŒã¿ã·ãŒãã§ç¢ºèªããã°ããã§ããã
GPIOAã®0çªã ãå
¥åã«ãããã®ã§ããã°ã
3ã€ç®ã®0x00ã0b00000001 = 0x01ãšããã°OKã
ããããã¯ã次åã«ã€ãªããMCP23017ãšç°ãªããšãã…
ããŠããããŸã§ã§åäœç¢ºèªãã§ããŸããããã
ãã€ã¯ãéèŠãªããšã説æããã«ãããŸã§æ¥ãŸãã…
ãã¡ããããã§ç®çã®åãã¯ã§ããã¯ãã§ããã
ãã2åç®ã3åç®ãšMCP23S17ãè¿œå ããããšãããšå¿
ãã¶ã€ããå£ããããŸãã
ãããCHèšå®ã§ãã
A0~A2ãŸã§GNDã«èœãšããŠããŸããã
ãã€ã¯ããã®A0~A2ãVddã«å
¥ããŠãåäœãããã§ãïŒ
CHã0x20ãããªããªããããªããïŒã§ãåäœãããã§ããã
è©ŠããŠããã ããã°ããã«ããããŸãã
ããŠãªãã§ã§ããããïŒ
ãã®ãã¯ãªãã次åã®èšäºã«ããäºå®ã§ãã
ä»åã®ãŸãšã
ä»åã¯SPIéä¿¡ã䜿çšããIOãšãã¹ãã³ã
MCP23S17ãRaspberryPi400ã§å¶åŸ¡ããŠã¿ãŸããã
ãŸãšãã«SPIéä¿¡ãããããšãç¡ãã£ãã®ã§ã
ä»åã®å
容ã§ã ãã¶å匷ã«ãªããŸããã
MSP23S17ã«éã話ã§ã¯ãããŸãããã
ããŒã¿ã·ãŒãã®ç¢ºèªãéèŠã§ããããšãå確èªããŸããã
ãã²ãã®èšäºãèªãã§SPIéä¿¡ã«ãã£ã¬ã³ãžããŠã¿ãŠãã ãããïŒ
ã³ã¡ã³ã