Q&A
###前提・実現したいこと
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がロードできていないのだと思いますが、ロード方法が分からないので困っています。調べうる限りの方法を試してみたが駄目でした。どなたか解答お願いします。
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。