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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Raspberry Pi

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

Python

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

Q&A

解決済

1回答

22221閲覧

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

kankan_1111

総合スコア8

Raspberry Pi

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

Python

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

0グッド

1クリップ

投稿2018/01/17 13:06

###前提・実現したいこと
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がロードできていないのだと思いますが、ロード方法が分からないので困っています。調べうる限りの方法を試してみたが駄目でした。どなたか解答お願いします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

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/

投稿2018/01/18 04:38

kankan_1111

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問