gobot I2C에서 L 치카

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. 준비



설치는 다른 기사에서 해설하고 있으므로, 자세한 것은 그쪽을 봐 주세요.
  • golang
  • gobot

  • 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 

    좋은 웹페이지 즐겨찾기