質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.76%

  • Python

    6912questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Raspberry Pi

    714questions

    Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

ラズパイでi2c通信ができません

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 675

kankan_1111

score 2

前提・実現したいこと

raspberry piを使って、LCDのacm1602niを動かしたいのですが、エラーが出てしまいます。

発生している問題・エラーメッセージ

Traceback (most recent call last):
/home/pi
acm1602(line6)
self.i2c.write_byte_data(self.ad, 0x00, 0x01)
IOError: [Errno 121] Remote I/O error 

該当のソースコード

LCDの制御関数acm1602.py

import smbus, time
import RPi.GPIO as GPIO

class acm1602:
def init(self,ch,ad,blpin):
self.ch = ch
self.ad = ad
self.blpin = blpin
self.cursol = 1
self.blink = 1
self.display = 1
self.x = 0
self.y = 0

self.i2c = smbus.SMBus(ch)
self.i2c.write_byte_data(self.ad, 0x00, 0x01)
time.sleep(0.15)
self.i2c.write_byte_data(self.ad, 0x00, 0x38)
time.sleep(0.1)
self.i2c.write_byte_data(self.ad, 0x00, 0x0f)
time.sleep(0.1)
self.i2c.write_byte_data(self.ad, 0x00, 0x06)
time.sleep(0.1)

GPIO.setmode(GPIO.BCM)
GPIO.setup(self.blpin,GPIO.OUT)

def clear(self):
self.i2c.write_byte_data(self.ad, 0x00, 0x01)
time.sleep(0.1)       

def set_display(self):
buf = 0x08 + 0x04 * self.display + 0x02 * self.cursol + self.blink
self.i2c.write_byte_data(self.ad, 0x00, buf)
time.sleep(0.1)

def set_cursol(self,buf):
if buf != 0:
buf = 1
self.cursol = buf
self.set_display()

def set_blink(self,buf):
if buf != 0:
buf = 1
self.blink = buf
self.set_display()        

def move_home(self):
self.x = 0
self.y = 0
self.i2c.write_byte_data(self.ad, 0x00, 0x02)
time.sleep(0.1)

def move(self,mx,my):    
self.x = mx
self.y = my
if self.x < 0:
self.x=0
if self.x > 0x0f:
self.x=0x0f
if self.y < 0:
self.y=0
if self.y > 1:
self.y=1
oy=self.y*0x40
out=self.x+oy+0x80
self.i2c.write_byte_data(self.ad, 0x00, out)
time.sleep(0.1)       

def write(self,buf):
length = len(buf)
i = 0
while i < length:
if self.x > 0x0f:
if self.y == 0:
self.move(0x00,0x01)
else:
break
out=int(buf[i].encode("hex_codec"),16)
self.i2c.write_byte_data(self.ad,0x80,out)

self.x = self.x + 1
i = i + 1
def backlight(self,buf):
if buf != 0:
GPIO.output(self.blpin, GPIO.HIGH)
else:
GPIO.output(self.blpin, GPIO.LOW)

LCDに文字を出力する関数lcd.py

import smbus, time
from acm1602 import acm1602

lcd = acm1602( 1, 0x50, 4 )
lcd.move_home()
lcd.set_cursol( 0 )
lcd.set_blink( 0 )

lcd.backlight(1)

lcd.write( "Raspberry Pi" )

試したこと

1.raspi-configでi2cを有効に設定
2./boot/config.txtにdtparam=i2c_baudrate=50000 と書き込んだ
3./etc/modprobe.d/i2c.confを作成し、options i2c_bcm2708 baudrate=50000と書き込んだ
4.$ sudo apt-get install i2c-tools python-smbus
$ sudo modprobe i2c-bcm2708
$ sudo modprobe i2c-dev の後
$ dmesg | grep i2cを実行すると、i2c-devの行だけが出てきてi2c-bcm2708のロードが確認できませんでした。
5./etc/modprobe.d/raspi-blacklist.confは存在しませんでした

補足情報(言語/FW/ツール等のバージョンなど)

おそらくbcm2708がロードできていないのだと思いますが、ロード方法が分からないので困っています。調べうる限りの方法を試してみたが駄目でした。どなたか解答お願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

以下の手順でbcm2708がロードでき、プログラムも正常に実行できました。
1.sudo raspi-config で5.Interfacing options ->i2c->Enable i2c->Finish→再起動
2./etc/modulesに
i2c-bcm2708
i2c-dev を追加して保存
3.sudo apt-get update
sudo apt-get install -y python-smbus i2c-tools
sudo reboot
4.lsmod | grep i2c_を入力しi2c_bcm2708がリストにあるのを確認

以下のサイトを参考にしました。
osoyoo.com/ja/2016/06/01/drive-i2c-lcd-screen-with-raspberry-pi/

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.76%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    raspberrypiのGPIO制御について

    raspberrypiのGPIOを用いて2つのDCモーターの制御を行うためのコードをpythonかcで書きたいです。 ソースコードは落ちてるんですが、pwmoutput.Chang

  • 解決済

    webブラウザでled点灯用のリモコン作成

    前提・実現したいこと raspberry pi をwebブラウザから操作する用にブラウザ作成をしています。CSSでボタンを作成し、カスタマイズをしているのですが変更されません。

  • 解決済

    音声出力の途中で画像を更新する方法

    前提・実現したいこと Raspberry Pi3とpythonを用いて画像出力と音声出力を行っています。そしてその音声が5秒間あり、音声出力開始から3秒後に(音声を出力したまま)

  • 解決済

    ラズパイでGPIOの値を読み取りたい

    前提・実現したいこと ラズパイでGPIOの値を取得したいのですが、ファイルを実行しようとすると次のようなエラーが出ました。 発生している問題・エラーメッセージ /home/pi

  • 解決済

    RaspberryPiで動かすPythonプログラムを強制終了した場合

    RaspberryPiで人感センサーで動きをとって、写真を映すアプリをPythonで書いて動かしています。 while Trueでずっと監視させているのですが、コントロールZで

  • 解決済

    ラズパイ3 LXTerminal

    Raspberry pi 3 ModelB ver1.2を使っています。 人感センサを4つ使ってどの方向に生物がいるか大体わかるようにしています。 人感センサ1、2、3、4のよ

  • 解決済

    トグル動作によるLEDの点灯制御について

    トグルスイッチでのLEDの点灯を制御したいのですが、 下記のようなソースで割り込みの箇所 pi.wiringPiISRの関数で、トグルスイッチを押すとプログラムが終了してしまいます

  • 解決済

    ラズパイ python3.5.1 インストール エラー

    ラズパイでpython3.5.1を入れようとしたのですが、 Raspberry PiでのPython 3.5環境構築 Downloading Python-3.5.1.ta

同じタグがついた質問を見る

  • Python

    6912questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Raspberry Pi

    714questions

    Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。