RaspberryPi3B+液晶モニター(タッチペン)


2017年、第一弾はRaspberryPiで行きたいと思います。

XojoのRaspberryPi版ライセンス購入に先立ち実行環境としてRaspberryPi3Bとビルドオン方式のRaspberryPi専用のタッチペン対応、800*480 5インチ液晶モニターを購入してみた。
価格は非常に安くAmazonで4800円ほどでした。

raspberryPi2と3に対応しているようです。
メーカーのwebに初期型に関する事項がないので2以降用かもですね。
処理速度の問題もあるので気になる方は3Bを使用したほうが宜しいかと思います。
商品は段ボールに梱包されておりますがマニュアル等は一切ありません。
と言っても取り付けはRaspberryPiのGPIOのコネクタ部に差し、同梱のHDMI接続用の基板でHDMI端子同士を接続して終わりです。
HDMIで映像信号、GPIOの端子で電源とタッチ情報のやり取りをしていると思いますのでHDMIは延長できてもGPIOの延長にはケーブル長がどれくらい取れるかは微妙、そういった用途に使う予定の方は注意です。
DSC02922DSC02923

DSC02924DSC02928

至ってシンプル。

今回はRaspberryPi3Bについては触れませんが、このために2台購入しました。

OSはRASPBIAN JESSIE WITH PIXEL(2016-11-25-raspbian-jessie.zip)を使用。
サムソンの64GBのMicroSDが安かったのでそれを使ってます。

このモニターを使うにあたりRaspberryPi3Bは推奨2.5A取れる電源が必要なのでこのモニター分電力が追加され、いささか電源が心配でしたがいつも使用しているモバイルバッテリーであっさり起動。
たまに電力不足のカミナリマークが表示されますがとりあえずは大丈夫そうです。
モバイルバッテリー自体はスペック的には5V2.1Aです。

はじめ画面の横の解像度がおかしいのでメーカーサイトにあるconfig.txtを参考に修正。

DSC02929

 

ドライバーのインストールは
https://www.elecrow.com/wiki/index.php?title=HDMI_Interface_5_Inch_800x480_TFT_Display
メーカーwebサイトを参照。

tar xvf LCD-show-150602.tar.gz
cd LCD-show
sudo ./LCD5-show

とするだけ。

DSC02936DSC02937

ペンが使えるようになりました。
専用のDS用のようなスタイラスペンが付属してきますが感圧式なようで指でも反応します。
なかなか良い感じですが、むき出しなので画面を去れって操作するのはちょっと不安。
専用のケースとかあれば良いですね。
いろいろ使用場面が膨らみそうです。

液晶自体の使用感としては5インチはやはり小さい。
パッと見た感じL版の写真程度の大きさっぽいです。
これより小さい3.5インチの製品もあるようだが私的には5インチ限界。(何しろiPhone6plusより小さいし)
左右の視野角はそこそこ良いように感じるが下方向からは見ずらい。
写真のように立てて使ってます。

私の購入目的は自作アプリの実行環境(予定)なので電卓のようにボタンを大きくすればそれなりに操作できるけど、他のアプリはやはりマウス&キーボードがないと操作しずらい。
800*480という解像度も何をするにも中途半端。

2016-12-31-152728_800x480_scrot

タブレットのように使うのはちょっと無理があるかもです。
操作パネルとか何も決まった内容を常に表示するとか用途には良さそう。

とは言え玩具としては低価格で購入できるので楽しい。
3月にXojoのライセンスの更新が必要なのでその時にProに移行してRaspberryPi開発環境がそろったらこいつを使って遊んでみたいと思います。

RASPBERRYPI応用研究(4) wiringPi導入


ハードウェア部分の制作に先立ってソフトウェア側を一部検討したい。
今回のシステムではセンサー信号を入力していろいろな処理をするという事でI/Oからの入力をラズパイ側に取り込む必要がある。合わせてリレーをOn/Offする為に出力ポートをコントロールする事も必要である。

入力としてはセンサー1~4の4点とトグルスイッチ1点の計5点
出力はとりあえずリレーの2点だが、残りのポートは出力ポートとして事にする。
RaspberryPiではGPIOというらしい。
GPIOは兼用ピンも含めると結構あり21個あり今回のシステムでは十分間に合う。
コネクタ1とコネクタ5に跨ってあるが、今回はコネクタ1のGPIOを使う事にする。
ネットや参考本ではPythonを使ったサンプルが多いようだが、いまさらPythonを習得する気にもならないのでCで書くことにした。

C言語でGPIOにアクセスする方法はいくつかあるが、wiringPiという便利なライブラリーがあるようなので此れを活用することで色々面倒な部分を省くことができそうだ。

waringPi導入

$ git clone git://git.drogon.net/wiringPi

Cloning into 'wiringPi'...
remote: Counting objects: 929, done.
remote: Compressing objects: 100% (759/759), done.
remote: Total 929 (delta 661), reused 218 (delta 142)
Receiving objects: 100% (929/929), 290.00 KiB, done.
Resolving deltas: 100% (661/661), done.

$ cd wiringPi
~/wiringPi $ ./build

wiringPi Build script
=====================
WiringPi Library
[UnInstall]
[Compile] wiringPi.c
[Compile] wiringSerial.c
[Compile] piHiPri.c
[Compile] wiringShift.c
[Compile] piThread.c
[Compile] wiringPiSPI.c
[Compile] wiringPiI2C.c
[Compile] softPwm.c
[Compile] softTone.c
[Compile] mcp23008.c
[Compile] mcp23016.c
[Compile] mcp23017.c
[Compile] mcp23s08.c
[Compile] mcp23s17.c
[Compile] sr595.c
[Compile] pcf8574.c
[Compile] pcf8591.c
[Compile] mcp3002.c
[Compile] mcp4802.c
[Compile] mcp3004.c
[Compile] mcp3422.c
[Compile] max31855.c
[Compile] max5322.c
[Compile] sn3218.c
[Compile] drcSerial.c
[Compile] wpiExtensions.c
[Link (Dynamic)]
[Install Headers]
[Install Dynamic Lib]
WiringPi Devices Library
[UnInstall]
[Compile] ds1302.c
[Compile] gertboard.c
[Compile] maxdetect.c
[Compile] piNes.c
[Compile] piFace.c
[Compile] lcd128x64.c
[Compile] lcd.c
[Compile] piGlow.c
[Link (Dynamic)]
[Install Headers]
[Install Dynamic Lib]
GPIO Utility
[Compile] readall.c
[Compile] pins.c
[Compile] gpio.c
[Link]
[Install]
All Done.
NOTE: To compile programs with wiringPi, you need to add:
-lwiringPi
to your compile line(s) To use the Gertboard, MaxDetect, etc.
code (the devLib), you need to also add:
-lwiringPiDev
to your compile line(s).

これでソフトウェア開発の準備は大体整いました。
wiringPiのおかげで面倒なコーディングは無しにGPIOの制御ができるようになりました。
wiringPiで使用する関数などは

  • WiringPiの初期化 wiringPiSetupGpio();
  • GPIOピンのモード設定 pinMode([GPIOピン番号], [モード]);
    [モード]にはOUTPUT or INPUT
  • GPIOピンの出力 digitalWrite([GPIOピン名番号], [値]);
    [値]に0か1を指定。
  • GPIOピンの入力 digitalRead([GPIOピン名番号]);
    戻り値 GPIOピンの現在の値。

これらの関数で事足りそうです。

本当はセンサーの取り込みは割り込みなどを使ったほうが良いと思うが今回は簡単に出来るポーリング方式にした。
チップのマニュアルなど参照する気にもならないし・・・

割り込み処理は次のステップでって事にしておきます。

メール送信スクリプト

それとメールはCだと面倒なのでperlで書いてsystem関数で起動する感じで逃げる。

とりあえずメール送信のperlスクリプトを作ってみました。
恥ずかしいですがソースは

use strict;
use 5.10.0;
use Encode;
#my %h;
$h{System_coding} = ‘UTF-8’;
$h{SMTP_SERVER} = “127.0.0.1”;
$h{MAIL_FROM} = ‘from@testtest.com’;
$h{to} = $ARGV[0] || ‘to@testtest.com’;
$h{subject} = “Mail Test”;
$h{txt} = <<TEXT;
人感センサーが侵入検知しました。
(センサー番号1)
TEXT
#
# test program
#&send_mail(\%h);

#メールの送信

sub send_mail {
my $h = shift;
my $txt = $h->{txt};
Encode::from_to($txt, $h->{System_coding}, ‘iso-2022-jp’);

# ヘッダ生成
my $subject = $h->{subject};
Encode::from_to($subject, $h->{System_coding}, ‘iso-2022-jp’);
Encode::encode(‘MIME-Header-ISO_2022_JP’, $subject);
if (!ref($h->{to})) { $h->{to} = [ $h->{to} ] }
my $to = join(‘,’, @{$h->{to}});
my $header =<<TEXT;
From: $h->{MAIL_FROM}
To: $to
Subject: $subject
Mime-Version: 1.0
Content-Type: text/plain; charset = “ISO-2022-JP”
Content-Trensfer-Encoding: 7bit
TEXT

# SMTP
require Net::SMTP;
my $smtp = Net::SMTP->new($h->{SMTP_SERVER});
$smtp->mail( $h->{MAIL_FROM} );
$smtp->to( @{ $h->{to} } );
$smtp->data();
$smtp->datasend($header);
$smtp->datasend($txt);
$smtp->dataend();
$smtp->quit;
}

こんな感じ。
今回はここまで。

raspbrreyPiの電源について

本編からそれますがRaspberryPiの電源について

ラズパイを楽しんでいる皆さんは電源どうしてますか?
適当なUSBアダプタなど使っている方が多いのでしょうか。

私も一時期はスマフォの充電器やらいろいろ使用していましたが、最近ではモバイルバッテリーで済ましています。
10400mAhのものですが結構持つもので1日つけっぱなしでも充電が切れない。
コンセント要らずで快適です。

モバイルバッテリーを余らしている人にはお勧めです。