gobot I2C에서 L 치카
12474 단어 RaspberryPi전자 공작MCP230175Gobot
1. 소개
go와 gobot을 사용하여 RaspberryPi의 I2C에 연결된 IO 확장기 (MCP23017)를 조작해보십시오.
공식적으로 MCP23017 지원 되고 있으므로, 튜토리얼 챌린지로 끝날까라고 생각하면, 무려, 샘플 코드가 쓰여지지 않았기 때문에, 기억을 겸해 간단하게 정리해 보았습니다.
실행 환경
하드웨어
Raspberry Pi 4
OS
Raspbian Buster
go
Ver.1.14.3
IO 익스팬더
MCP23017
→ 이것을 RaspberryPi의 I2C 단자에 연결했습니다.
$ uname -a
Linux raspi4 4.19.97-v7l+ #1294 SMP Thu Jan 30 13:21:14 GMT 2020 armv7l GNU/Linux
$ go version
go version go1.14.3 linux/arm
$ sudo i2cdetect -r -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: 20 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
2. 준비
설치는 다른 기사에서 해설하고 있으므로, 자세한 것은 그쪽을 봐 주세요.
$ uname -a
Linux raspi4 4.19.97-v7l+ #1294 SMP Thu Jan 30 13:21:14 GMT 2020 armv7l GNU/Linux
$ go version
go version go1.14.3 linux/arm
$ sudo i2cdetect -r -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: 20 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
설치는 다른 기사에서 해설하고 있으므로, 자세한 것은 그쪽을 봐 주세요.
3.LED 점멸 예
MCP23017의 포트 A의 핀 0~7에 연결된 LED를 흐르도록 점등하는 예입니다.
이 문서를 참고 1 2 에 써 보았습니다.
중요한 함수는 다음과 같습니다.
i2c.NewMCP23017Driver
i2c.WithBus(1)
라즈파이 i2c는
1
입니다. (1을 지정하는 예 : $ sudo i2cdetect -r -y 1
)i2c.WithAddress(0x20)
MCP23017의 설정에 맞춥니다. (여기에서는 0x20)
WriteGPIO(ピン番号, 値, ポート名)
0
: 소등, 1
: 점등 "A"
혹은 "B"
raspi_blink_i2c.go
package main
import (
"time"
"gobot.io/x/gobot"
"gobot.io/x/gobot/drivers/i2c"
"gobot.io/x/gobot/platforms/raspi"
)
func main() {
//初期化
raspiAdaptor := raspi.NewAdaptor()
//MCP23017の初期化
//I2Cバス1番、アドレス0x20
i2cexp := i2c.NewMCP23017Driver(raspiAdaptor,
i2c.WithBus(1),
i2c.WithAddress(0x20))
//LEDを流れるように点灯するための制御変数
//pin: ピン番号0から開始
//val: 点灯1状態から開始
var pin, val uint8
pin, val = 0, 1
//定期実行
work := func() {
//100ms毎にループ
gobot.Every(100*time.Millisecond, func() {
//ポートAのピンを点灯/消灯
i2cexp.WriteGPIO(pin, val, "A")
//ピン番号を次に移動
pin++
if pin > 7 {
//ピン番号7になったら、ピン番号を0に戻す
pin = 0
if val == 1 {
//現在が点灯1状態なら、次は消灯0状態に
val = 0
} else {
//次は点灯1状態に
val = 1
}
}
})
}
robot := gobot.NewRobot("bot",
[]gobot.Connection{raspiAdaptor},
//デバイスに追加
[]gobot.Device{i2cexp},
work,
)
robot.Start()
}
실행
명령줄
$ go run raspi_blink_i2c.go
2020/05/31 20:56:29 Initializing connections...
2020/05/31 20:56:29 Initializing connection RaspberryPi-308BFB50 ...
2020/05/31 20:56:29 Initializing devices...
2020/05/31 20:56:29 Initializing device MCP23017-6301D4B5 ...
2020/05/31 20:56:29 Robot bot initialized.
2020/05/31 20:56:29 Starting Robot bot ...
2020/05/31 20:56:29 Starting connections...
2020/05/31 20:56:29 Starting connection RaspberryPi-308BFB50...
2020/05/31 20:56:29 Starting devices...
2020/05/31 20:56:29 Starting device MCP23017-6301D4B5...
2020/05/31 20:56:29 Starting work...
2020/05/31 20:58:30 Stopping Robot bot ...
[Ctrl-C]
$
아래의 동영상, 아래쪽의 8 개의 LED가 왼쪽에서 오른쪽으로 흐르고 있습니다.
4. 끝에
나머지 과제는 [Ctrl-C]로 멈출 때 IO 확장기를 모두 끄는 것입니다.
현재 상태가 유지되면 제어가 멈춘 시점의 점등이 남아 버립니다.
여기 3 을 참고로, SIGINT 포착 후에 IO 익스팬더의 핀 번호 모두에 L을 보내 소등하는 프로그램을 시도했습니다만, 분명히 work := func() {
의 실행이 살아 있는 동안에 소등 처리를 넣지 않으면 좋지 않은 것 같습니다. (지금은 해결할 수 없습니다)
참고 자료
htps: //아이 c. rg/고보 t. 이오/x/고보 t/d리ゔぇrs/이2c# MCP23017D리ゔぇr ↩
htps : // 기주 b. 이 m / hybi dg 납 p / 떡 t / b ぉ b / 마s r / d ri rs / 2c / mcp23017_d ri r. 고 ↩
htps : // 오히라. 기주 b. 이오 / 고비 ぁ ぇ ぇ - jp / shi g ls. HTML ↩
Reference
이 문제에 관하여(gobot I2C에서 L 치카), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/myasu/items/aa3bf62001b4aaaf9ac7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
htps: //아이 c. rg/고보 t. 이오/x/고보 t/d리ゔぇrs/이2c# MCP23017D리ゔぇr ↩
htps : // 기주 b. 이 m / hybi dg 납 p / 떡 t / b ぉ b / 마s r / d ri rs / 2c / mcp23017_d ri r. 고 ↩
htps : // 오히라. 기주 b. 이오 / 고비 ぁ ぇ ぇ - jp / shi g ls. HTML ↩
Reference
이 문제에 관하여(gobot I2C에서 L 치카), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/myasu/items/aa3bf62001b4aaaf9ac7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)