ESP32でMCP23017を使う

MCP23017はI2Cで接続することができる。とりあえず動かすためには次のようなプログラムでいい。

このプログラムを使えば入力、内部プルアップで動作し、シリアル通信で結果が送られてくる。

#include <Wire.h>
int DEVICE_ADDRESS_1 = 0x20;

uint8_t U1_PA;          
uint8_t U1_PB;          
    
void setup() {  
  Serial.begin(115200);
  Wire.begin();       
 
    wrt_reg( DEVICE_ADDRESS_1 , 0x00 , 0xFF );     
    wrt_reg( DEVICE_ADDRESS_1 , 0x01 , 0xFF );     
    wrt_reg( DEVICE_ADDRESS_1 , 0x0C , 0xFF );
    wrt_reg( DEVICE_ADDRESS_1 , 0x0D , 0xFF );
}
 
void loop() {  
    U1_PA = read_reg( DEVICE_ADDRESS_1 , 0x12 );   
    U1_PB = read_reg( DEVICE_ADDRESS_1 , 0x13 );   
    Serial.print(U1_PA);
    Serial.print(',');
    Serial.println(U1_PB);
  delay(500);
}

void wrt_reg(int dvc_adrs , uint8_t reg , uint8_t value) {
    Wire.beginTransmission(dvc_adrs);           
    Wire.write(reg);                    
    Wire.write(value);               
    Wire.endTransmission();                     
}

uint8_t read_reg(int dvc_adrs , uint8_t reg) {
    Wire.beginTransmission(dvc_adrs);             
    Wire.write(reg);                           
    Wire.endTransmission(false);                  
    Wire.requestFrom(dvc_adrs , 1);              

    if (! Wire.available()) return -1;         
    return (Wire.read());                      
}

コメント

タイトルとURLをコピーしました