回答編集履歴

1 関数仕様を把握していなかったので修正

thkana

thkana score 5166

2020/01/13 17:14  投稿

プルアップしているのなら、スイッチはピンとGNDの間に入れるのも普通にやることで、そうだとすればスイッチを押したときがL、離すと(スイッチのつながっていない端子も)Hというのは全く正常です。「出力されてしまった」というものではないでしょう。
エキスパンダーを使うということはそれ以外の端子も制御されるはずで、その時にどういう結果を期待しているのかによっても適切な手段は変わりますが、とりあえずビット反転してから8bitだけ取り出し
```Python
data = pi.i2c_read_i2c_block_data(hndl,REG_GPIOA,0x01)
print(hex(~data&0xff))
```
とでもしてみたらどうでしょう。
とでもしてみたらどうでしょう。
---
修正。
pi.i2c_read_i2c_block_data()の返り値はタプルで、最初の要素が得られたデータの数、次がbyte配列でデータそのもの、とのことです。hnd1のI2Cバスのデバイスの、REG_GPIOAレジスタから1バイトを読みだした値を使って計算をしたいのですから、
print(hex(~(data[1][0])&0xff))
ということになるかと思います。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る