4

I²C を使用して、 Arduino UnoからRaspberry PiにI²Cインターフェイス経由でデータを送信しようとしています。これは私が使用したコードでした。

アルドゥイーノでは:

#include <Wire.h>
unsigned int watt;
unsigned int watt1;
byte watt2;
byte watt3;
void setup()
{
    Wire.begin(30);
    Wire.onRequest(requestEvent);
    Serial.begin(9600);
}

void loop() {
    delay(100);
    int sensorValue = analogRead(A0);
    int sensorValue1 = analogRead(A1);
    watt = sensorValue * (5 / 1023) * 2857;
    watt1 = sensorValue1 * (5 / 1023) * 2857;
    watt2 = map(watt, 0, 4294967295, 0, 255);
    watt3 = map(watt1, 0, 4294967295, 0, 255);
    Serial.println(watt2);
    Serial.println(watt3);
}

void requestEvent()
{
    Wire.write(watt2);
    delay(30);
    Wire.write(watt3);
}

ラズベリーパイでは:

import smbus
import time
bus = smbus.SMBus(0)
address = 0x1e
while (1):
    watt=bus.read_byte_data(address,1)
    watt2=bus.read_byte_data(address,2)

次のエラーを受け取りました。

トレースバック (最新の呼び出しが最後):
ファイル "/home/pi/i2ctest.py" 、8 行目、<module>
watt = bus.read_byte_data(address,1)
IOError: [Errno 5] 入力/出力エラー

これを修正するにはどうすればよいですか? また、SMBus ライブラリ以外に Raspberry Pi で I²C を使用するための代替手段はありますか?

4

1 に答える 1

4

リビジョン2.0ボードのRaspberryPiを使用している場合は、バス0ではなくI²Cバス1を使用する必要があるため、使用するバス番号を変更する必要があります。この場合、行

bus = smbus.SMBus(0) 

になります

bus = smbus.SMBus(1)

i2ctoolsパッケージのi2cdetectプログラムを使用して、デバイスがバス上に存在することを確認できます。試す

i2cdetect 0 -y 

バス0でArduinoを探します。実行

i2cdetect 1 -y 

バス1でそれを探すために。もちろん、これが機能するためにはArduinoプログラムが実行されている必要があります。これにより、Arduinoが予想されるアドレスに存在することも確認されます。

i2cまた、I²Cを使用するための適切な権限があることを確認する必要があるため、グループのメンバーであるアカウントからPythonプログラムを実行してください。

于 2012-12-14T18:23:11.107 に答える