IOError: [Errno 5] Input/output error

Raspberry piでデバイスとI2C通信をしている時に
IOError: [Errno 5] Input/output error
に出会う時が有ります.基本的な設定が済んでいるものとして、このようなエラーが出る場合はいくつかの原因が考えられます。

1)信号線が長い、ノイズの影響を受けているなどで、信号そのものの波形が劣化している場合

 この場合は具体的にはオシロスコープを使って波形を確認した方が良いでしょう。オシロスコープが無い場合は信号線を出来るだけ短くすること、プルアップ抵抗が適切なものが入っているか確認する事と通信スピードを落としてみるのも有効です。

2)相手が準備できていないのにコマンドを送っている、データをリクエストしている場合
 コマンドを送る前にWaitを入れることになります.デバイスによってはコマンドを受け付けた後にいくら処理に時間がかかってそのあとにリクエストを受け付けると言ったシーケンスを明記しているものも有ります。詳しくはそれぞれのデバイスのリファレンスを参照の上で最適化するようにします。

3)初期化シーケンスをコマンド送信ごとに送ってしまっている
 本来であればSPI通信を始める場合の初期化処理は一度で良いのですが、スクリプトになっていとそれを外から呼び出した時に何度も短い間隔で呼び出して気づかない事も有ります。初期化は誰がやっているか、どのタイミングでやっているか確認し、スクリプトの最適化を行います.