2012年11月30日 星期五

Raspberry PiでキャラクタLCD(16x2)を動作させてみた(下)


実際の動きはこの感じです。
全角ひらがなカタカナと半角カナの変換辞書は未完成なので(約7割ぐらい完成)、気をつけてください。あとは英語数字と日本語と混ぜて使うとエラーが出てしまいます。

コードは以下です:

2012年11月29日 星期四

Raspberry PiでキャラクタLCD(16x2)を動作させてみた(上)

まず結果です。


今回使ったのは、秋月電子で買ったの超小型LCDキャラクタディスプレイモジュールです。はんだをやることに自信がないし、二つを買いました。(昨日の話)SD1602系を選んだ理由の一つは、端子は1列となっていて、ブレッドボードに優しいから。

LCDモジュールを動作させることについてを調べてみた。コントローラICは基本的にHD44780が使われているそうです。ということで「Raspberry Pi」「HD44780」をキーワードにして検索して、いっぱい結果(サンプルコードも)が出てきた。LCDに関するライブラリも少なくないけれど、これから半角カナを表示することが必要になるので、ライブラリをつかずサンプルコードを参考しました。

16×2 LCD Module Control Using Python
http://www.raspberrypi-spy.co.uk/2012/07/16x2-lcd-module-control-using-python/

大変詳しい説明があるので、記事が書いたとおりすれば、いい結果が出てくるはずです。

問題は半角カタカナの表示。

一般(?)使っているのは全角ひなや全角カナだが、LCDモジュールは半角カナのみ。モジュールの説明書にあるキャラクターフォントテーブルをひいて、「こんにちは」を 0xBA,0xDD,0xC6,0xC1,0xCA(コンニチハ)に変化するのも面倒だし...

実はいままだ頑張っている途中です。いまはここの記事を基づいて改造しています。

【Unicode】PythonでのUnicode下での半角カナと全角かな変換
http://pythonlife.seesaa.net/article/148816739.html

いまのところ、ひらがなを半角カナに変更し、正常に表示できました。残った部分は
濁点、半濁点の処理です。

完成したらまた報告します。

2012年11月28日 星期三

帰りました



実は日本へ旅行しにいってきた。秋月電子でLCDモジュールを買いました。こちらは16x2キャラクタータイプのLCDモジュールをうっている店もありますけれど、これから作りたいモノにカタカナ表示が必要なので...

はんだは下手すぎで、壊れてしまったかに心配していた、でも異常はないようだ。


参考リンク

http://learn.adafruit.com/drive-a-16x2-lcd-directly-with-a-raspberry-pi/overview

http://www.rpiblog.com/2012/11/interfacing-16x2-lcd-with-raspberry-pi.html

2012年11月6日 星期二

[Rasepberry Pi] GPIOコントロール用のサンプルコードを作ってみた

LXDE環境で使うGPIOコントローラです、ボタンを押すだけでGPIOをオン/オフするが可能です。LEDやモーターをテストに便利かなと思います。実際に使う様子:


2012年11月4日 星期日

Raspberry PiのGPIOテストコントロール用スクリプト(Python)

更新が遅れてしまった。

今回はRaspberry PiのGPIOテストコントロール用スクリプトを作ろうと思います。
ここは全部のGPIOがコントロールできるコードじゃない。GPIO21,22,23,24,25だけコントロールできるの部分です、全部はるのもちょっと長過ぎるという原因もありますし。もっときれいなコードがあるはずと思います(Pythonは得意じゃないから、、)


使い方は簡単、rootで起動します。例えばGPIO 25をオンにしたい場合、そのまま25を入力してください。オフにしたい場合、もう一度25を入力したらオフです。CTRL+Cを押すと中止です。

GUIバージョンを作ろうか...

import RPi.GPIO as GPIO
import time
GPIO.setmode( GPIO.BCM )
GPIO.setup(21, GPIO.OUT)
GPIO.setup(22, GPIO.OUT)
GPIO.setup(23, GPIO.OUT)
GPIO.setup(24, GPIO.OUT)
GPIO.setup(25, GPIO.OUT)
io21=0
io22=0
io23=0
io24=0
io25=0
my_input = '25'
while 1:
  my_input = raw_input("(Last input: %s):\n" % my_input) or my_input


  if my_input=="25":
     if io25==0:
        GPIO.output(25, GPIO.HIGH)
        io25=1
     else:
        GPIO.output(25, GPIO.LOW)
        io25=0
  if my_input=="24":
     if io24==0:
        GPIO.output(24, GPIO.HIGH)
        io24=1
     else:
        GPIO.output(24, GPIO.LOW)
        io24=0
  if my_input=="23":
     if io23==0:
        GPIO.output(23, GPIO.HIGH)
        io23=1
     else:
        GPIO.output(23, GPIO.LOW)
        io23=0
  if my_input=="22":
     if io22==0:
        GPIO.output(22, GPIO.HIGH)
        io22=1
     else:
        GPIO.output(22, GPIO.LOW)
        io22=0
  if my_input=="21":
     if io21==0:
        GPIO.output(21, GPIO.HIGH)
        io21=1
     else:
        GPIO.output(21, GPIO.LOW)
        io21=0