All posts by admin

Raspberry Pi 液晶表示盤のLED制御

数か月前、Raspberry Pi に液晶表示盤を付けたが、バックライトのLEDは常にONのため、夜は眩しい。GPIOからON/OFF制御可能にしたい。

回路図がないのため、ネットでいろいろ調べて、バックライトのLEDは、GPIOに繋ぐと、3.3V に直結したタイプあるそうです。

WebIOPiをインストールして、ブラウザから、すべてGPIO端子ON/OFFして見たが、バックライトのLEDがON/OFF現象が認めない。つまり、購入したものは3.3V に直結したタイプらしい。

基盤の結線を探し、切断してGPIOにつなぎ直し方法もあるが、なかなか決心とタイミングが必要ね。

たまたま液晶表示盤は、PCD8544 LCD使うらしい。そのPCD8544の制御方法を探す際、PCD8544-utils ( https://github.com/acidum/PCD8544-utils )見つかり、おまけに、液晶表示盤改造でバックライトのLED制御する方法まで書いた。小さな抵抗を溶かして、180度回転し、ジャンパー線でコネックターまで繋ぐ方法。

タイミングを見て、改造に取り込んだ。特に上記URLに説明した凹みを作って結線することなく。ケース入りだからそのまま結線でも問題ないと。

2015-04-27 21.51.582015-04-27 21.52.45

結線の正面と裏面、遂に成功した。手元に結線がなく、古い結線付きコネックターの結線をカットして再利用。

2015-04-27 21.51.58

近眼鏡と虫眼鏡の組み合わせて些細作業を進み、一度小さな抵抗が跳ねて見失い、諦めかけた時もあった。

2015-04-27 21.56.23

セット組み直して、WebIOPiから、21番PIN(GPIO9)のON/OFFで、バックライトのLEDがON/OFFが確認した。

これてRaspberry Piに状態変更があるとき、メッセージが届いたとき、バックライトのON/OFF、Blinkなどで表現する手法も増えた。

 

参考文献 肩に乗せてもらった巨人達:

Raspberry PiにWebIOPiをインストール

Raspberry PiのGPIOをブラウザから操作したいので、WebIOPiをインストールした。

まずパッケージをダウンロードして、解凍、セットアップ

1)sudo wget http://webiopi.googlecode.com/files/WebIOPi-0.6.0.tar.gz

2)tar xvzf WebIOPi-0.6.0.tar.gz

3)cd WebIOPi-0.6.0

4)sudo ./setup.sh

インストール終わったら、下記のメッセージが表示。Python のライブラリーがあり、細かい制御可能。またREST APIは下記にまとまっている。
RESTAPI – webiopi – Internet of Things framework – Google Project Hosting

REST APIなので、いつかApache/phpで制御する仕組みをやってみようと思う。

WebIOPi successfully installed
* To start WebIOPi foreground   : sudo webiopi [-h] [-c config] [-l log] [-s script] [-d] [port]
* To start WebIOPi background   : sudo /etc/init.d/webiopi start
* To start WebIOPi at boot      : sudo update-rc.d webiopi defaults
* Look in /home/chen/WebIOPi-0.6.0/examples for Python library usage examples

起動させる

5)sudo /etc/init.d/webiopi status

6)sudo /etc/init.d/webiopi start

ブラウザからアクセスする

7)http://raspbian-ip:8000/ for log in from other computer

8)http://localhost:8000/ for log in from Raspian itself

9)user name=webiopi and password=raspberry

image

ここで GPIO Header を開くと、実物順のRaspberry Pi GPIO表示され、適当に設定可能。

image

GPIO Listをクリックすると、Raspberry Pi GPIO番号順に表示され、適当に設定も可能。

image

サービスの停止

10)type sudo /etc/init.d/webiopi stop to stop webiopi service

Android アプリもある

11)from play store,download DrGPIO to Android phone to control the Pi

これがあると、GPIOの検証が楽だろう。

Raspberry Pi に液晶表示盤の回路図がないのため、基盤の結線を感で探すから、GPIO端子ON/OFFして見ると判断の手助けになる。

参考文献 -  肩に乗せてもらった巨人達:

Raspberry Piの通信対戦シューティングゲーム

付録のサイトを参考しながら進む。ExpressとSocket.IOを使用している。

$ git clone git://github.com/coppieee/node-shooting-demo.git
$ cd node-shooting-demo
$ npm install
$ node app

動かしてみるが、ShootingサンプルStart押して、白画面になり、反応がなく、304 Not Modified沢山でたので、どこが問題だ

chen@juno ~/node-shooting-demo $ node app
Express server listening on port 3000
GET / 200 173ms – 297
GET /stylesheets/style.css 200 162ms – 296
GET /javascripts/jquery-1.8.0.min.js 200 160ms – 90.39kb
GET / 200 28ms – 297
GET /stylesheets/style.css 304 23ms
GET /javascripts/jquery-1.8.0.min.js 304 25ms
GET /game 200 13ms – 442
GET /stylesheets/style.css 304 24ms
GET /javascripts/jquery-1.8.0.min.js 304 16ms
GET /javascripts/client.js 200 43ms – 3.54kb
GET /images/unit.png 200 42ms – 1.45kb
GET /images/bullet.png 200 40ms – 852
GET /game 200 18ms – 442
GET /stylesheets/style.css 304 61ms
GET /javascripts/jquery-1.8.0.min.js 304 49ms
GET /javascripts/client.js 304 25ms
GET /images/unit.png 304 30ms
GET /images/bullet.png 304 30ms

備考:

翌日気を取り直して、再テストしたら、上手くできた!

 

スクリーンショット 2015-04-17 21.05.40

参考文献 肩に乗せてもらった巨人達:

Raspberry Piのチャットサービス

Raspberry PiにNote.js、ExpressとSocket.IOを使用して簡単なチャットアプリを作ってみる。

chen@juno ~ $ npm install -g express
chen@juno ~ $ npm install socket.io

サンプルコードのダウンロードと実行、Socket.IOを使ったアプリではクライアントからメッセージを受け取り、処理した内容をクライアントに送信するといった処理になる。

chen@juno ~ $git clone git://github.com/coppieee/node-chat-demo.git
chen@juno ~ $cd node-chat-demo
chen@juno ~ $npm install
chen@juno ~ $node app

ブラウザからアクセスしてみる

image

複数ブラウザからチャットできると、確認した。コンソールからもログが出る

chen@juno ~/node-chat-demo $ node app
Express server listening on port 3000
GET / 200 222ms – 463
GET /stylesheets/style.css 200 233ms – 110
GET /javascripts/client.js 200 125ms – 568
GET /javascripts/jquery-1.8.0.js 200 230ms – 252.32kb
GET / 200 27ms – 463
GET /stylesheets/style.css 304 29ms
GET /javascripts/jquery-1.8.0.js 304 14ms
GET /javascripts/client.js 304 14ms

RaspberryPiにNode.js

Node.jsとは、JavaScriptの一種で、サーバーが構築できる言語。

「リアルタイムweb」とは、ほぼタイムラグなしにブラウザ上情報の更新を反映する、FacebookのメッセージやGoogleDocsなどの感じ。

Nodeには「ページに新しい情報が来たよ!」と教えてくれる機能があり、Socket.IOというパッケージにて実装できる。

間隔を開けてサーバにポーリングなどいらない分、サーバの負担が軽減てき、より多数のブラウザが接続できる。

環境構築

まず、Node.jsのバージョンを管理するためのマネージャをまずインストールする

chen@juno ~ $ curl -L git.io/nodebrew | perl – setup
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Dload  Upload   Total   Spent    Left  Speed
0     0    0     0    0     0      0      0 –:–:– –:–:– –:–:–     0
0     0    0     0    0     0      0      0 –:–:–  0:00:02 –:–:–     0
100 22630  100 22630    0     0   5045      0  0:00:04  0:00:04 –:–:– 14432
fetching nodebrew…
install nodebrew in $HOME/.nodebrew

========================================
Add path:

export PATH=$HOME/.nodebrew/current/bin:$PATH
========================================

chen@juno ~ $ vi .bashrc
chen@juno ~ $ source .bashrc

 

Node.jsのインストール

Node.jsをバイナリからインストール。参考サイトの言われたままに、Raspberry Pi向け(arm-pi)の最新版バイナリが用意されていないため、v0.10.28を使用。

chen@juno ~ $ nodebrew install-binary 0.10.28
fetch: http://nodejs.org/dist/v0.10.28/node-v0.10.28-linux-arm-pi.tar.gz
######################################################################## 100.0%
Install successful
chen@juno ~ $ nodebrew use 0.10.28
use v0.10.28
chen@juno ~ $ node -v
v0.10.28
chen@juno ~ $ npm -v
1.4.9
chen@juno ~ $

Hello Worldの表示

以下のコードをapp.jsというファイル名で保存して、Node.jsで実行してみよう。

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello Worldn');
}).listen(1337, "127.0.0.1");
console.log('Server running at http://192.168.0.207:1337/');

実行して見る:

chen@juno ~ $ node app.js

Server running at http://192.168.0.207:1337/

ブラウザから確認:

image

Raspberry Pi にWordPress(Lighttpd編)

Raspberry PiのApacheから、軽いLighttpdに切り替えた記録。

Raspberry PiのBタイプは2台購入して、一台目は初期ものでメモリ256Mのみ、数ヶ月後2台目のメモリは512Mに増強した。そのため一台目最初からLighttpdで運用し、2台目余裕があると思って、最初はApacheで運用したが、いろいろ用途が増やすとやはりメモリ不足に落ち、Lighttpdに切り替えた。

# /etc/init.d/apache2 stop
# dpkg -l | grep apache

ii  apache2-mpm-prefork                   2.2.22-12                          armhf        Apache HTTP Server – traditional non-threaded model
ii  apache2-utils                         2.2.22-12                          armhf        utility programs for webservers
ii  apache2.2-bin                         2.2.22-12                          armhf        Apache HTTP Server common binary files
ii  apache2.2-common                      2.2.22-12                          armhf        Apache HTTP Server common files
ii  libapache2-mod-php5                   5.4.4-14+deb7u3                    armhf        server-side, HTML-embedded scripting language (Apache 2 module)

# apt-get –purge remove apache2.2
# apt-get –purge remove libapache2-mod-php5
# apt-get install lighttpd
# lighty-enable-mod fastcgi
# lighty-enable-mod fastcgi-php
# vi /etc/lighttpd/lighttpd.conf  // 設定を確認
# lighty-enable-mod ssl
# /etc/init.d/lighttpd force-reload
# lighty-enable-mod ssl

WordPressのリダイレクト設定は、Apacheと違うので結構ネットぐぐったけど、試行錯誤で下記の設定がOKでした。

url.rewrite-if-not-file = (
“^/{$rewrite_path}(wp-.+).*/?” => “$0”,
“^/{$rewrite_path}.*?(\?.*)?$” => “/{$rewrite_path}index.php$1”
)

マルチドメインの場合、さらに複雑なり、下記の書き方がいいらしい。

url.rewrite-if-not-file = (
“^/(.*/)?files/$” => “/index.php”,
“^/(.*/)?files/(.*)” => “/wp-includes/ms-files.php?file=$2”,
“^(/wp-admin/.*)” => “$1”,
“^/({_0}+/)?(wp-.*)” => “/$2”,
“^/({_0}+/)?(.*\.php)$” => “/$2”,
“^/(.*)/?$” => “/index.php/$1”
)

Raspberry Piで無線ルーターの復帰

いつの間にか、RASPBERRY PIで無線ルーターを作る,で作った無線ルータが信号がなくなった。試行錯誤で辛うじて復帰した記録。

インストール手順から見直しと、hostapd がおかしい。

root@juno:/etc/network# hostapd -d /etc/hostapd/hostapd.conf

random: Trying to read entropy from /dev/random
Configuration file: /etc/hostapd/hostapd.conf
Line 2: invalid/unknown driver ‘rtl871xdrv’
1 errors found in configuration file ‘/etc/hostapd/hostapd.conf’

まずUSBでWLAN Adapter認識されたかを確認する

chen@juno ~ $ sudo lsusb

[sudo] password for chen:
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter

WLAN Adapterが普通に認識された模様。すると、デバイス・ドライバーが正しくインストールされない?

いつか、aptitude upgradeで、正しくインストールしたデバイス・ドライバー壊れたかも。まずRaspberry Pi firmware updateする。

chen@juno /home/www/html $ sudo rpi-update

*** If no errors appeared, your firmware was successfully updated to a32baf52832725b3fe2ebda0f4acf398b04ef105
*** A reboot is needed to activate the new firmware
chen@juno /home/www/html $ sudo reboot

それでも直らない。いろいろ調べて分かったことは、Update hostapdドライバが8192cuの場合、apt-getでインストールされるhostapdはこのデバイスに対応してない。確かに、adafruitからダウンロードして、オリジナルのバイナリを置き換えた痕跡があった。

おそらく、aptitude upgradeする際、置き換えたhostapdまた最新版のオリジナルのバイナリに戻された。

再度http://www.adafruit.com/downloads/adafruit_hostapd.zip からバイナリをダウンロードし、それでオリジナルのバイナリを置き換えると、hostapd 動くようになった。

無線ルーターが無事復帰できた。

Vesta Control Panel にMonit Service Manager導入

VESTACP は便利だが、サービス止まった時の監視、再起動ツールがないかと調べたら、あった。

monitという、GPLライセンスでLinux/BSD/Solaris上で動作可能な総合監視デーモンとしてファイルシステムからHTTPレスポンス内容・プロセス監視などの機能を持っている。

monitインストール:

yum -y install monit
chkconfig monit on

monit設定:

# Vesta Control Panel
wget http://c.vestacp.com/0.9.8/rhel/monit/vesta-nginx.conf -O /etc/monit.d/vesta-nginx.conf
wget http://c.vestacp.com/0.9.8/rhel/monit/vesta-php.conf -O /etc/monit.d/vesta-php.conf
# Nginx
wget http://c.vestacp.com/0.9.8/rhel/monit/nginx.conf -O /etc/monit.d/nginx.conf
# Apache
wget http://c.vestacp.com/0.9.8/rhel/monit/httpd.conf -O /etc/monit.d/httpd.conf
# MySQL
wget http://c.vestacp.com/0.9.8/rhel/monit/mysql.conf -O /etc/monit.d/mysql.conf
# Exim
wget http://c.vestacp.com/0.9.8/rhel/monit/exim.conf -O /etc/monit.d/exim.conf
# Dovecot
wget http://c.vestacp.com/0.9.8/rhel/monit/dovecot.conf -O /etc/monit.d/dovecot.conf
# ClamAV
wget http://c.vestacp.com/0.9.8/rhel/monit/clamd.conf -O /etc/monit.d/clamd.conf
# Spamassassin
wget http://c.vestacp.com/0.9.8/rhel/monit/spamassassin.conf -O /etc/monit.d/spamassassin.conf
# OpenSSH
wget http://c.vestacp.com/0.9.8/rhel/monit/sshd.conf -O /etc/monit.d/sshd.conf

最後にサービスを起動する

service monit start

sambaためのVestaCP設定

新しいASUSノートPCを自宅サーバのsambaにアクセスしようとして、サーバ見つからないと、不可解の問題にぶつかり合う。

既存PCアクセスできるのに、新しいASUSノートPCの問題と思っていろいろ試行錯誤を繰り返し。

サーバの設定は自宅のため、一番簡単な設定した。

[share]
comment = Share Files
writeable = yes
public = yes
path = /opt/share

Googleで”samba windows 設定”を検索したところ、目がsamba 「ファイアウォール設定」のところに止まった。

ファイアウォールを設定している場合、Samba サーバが使用するポート(udp:137,138, tcp:139,445)を開放する必要がある。

自宅サーバに、VestaCP後で導入したので、ファイアウォールが増設になった。

早速VestaCPのFirewall設定に下記の項目を追加した。

vestacp-samba

予想通り、新しいASUSノートPCから自宅サーバのsambaにアクセスできた。

/etc/iptables.rulesを見ると、下記の数行がついかされた。

-A INPUT -p udp -m multiport –dports 137,138 -j ACCEPT
-A INPUT -p tcp -m tcp –dport 445 -j ACCEPT
-A INPUT -p tcp -m tcp –dport 139 -j ACCEPT

しかし、なぜVesta導入前の既存PCから、ファイアウォール設定関係なくsambaにアクセスできることが、謎でした。

Raspberry Pi に液晶表示盤

AliExpress.comでRaspberry Pi 用液晶表示盤発見。送料無料8ドルで早速注文。約8日で東京自宅に届きました。

見た目右に3つ黒いピクセルがあるが、使用上支障がない模様。

Raspberry-Pi-LCD

Attached new LCD for Raspberry Pi

早速取り付けて、電源ONして、バックライト点灯したが、画面当然何も表示しない。

wiringPiのGitから取得とbuild

415  cd
416  git clone git://git.drogon.net/wiringPi
417  cd wiringPi/
418  ./build

RaspberryPiの/libraries/c/をGitから、pcd8544_test、pcd8544_test2、を実行。

419  cd
423  git clone https://github.com/binerry/RaspberryPi.git
425  cd RaspberryPi/libraries/c/PCD8544/
437  cp -p ../PCD8544.h ./
438  cc -o pcd8544_test pcd8544_test.c ../PCD8544.c  -L/usr/local/lib -lwiringPi
439  sudo ./pcd8544_test
440  cc -o pcd8544_test2 pcd8544_test2.c ../PCD8544.c  -L/usr/local/lib -lwiringPi
441  sudo ./pcd8544_test2

立ち上げ時間、CPU利用率と空きメモリの表示サンプル

442  cc -o pcd8544_rpi pcd8544_rpi.c ../PCD8544.c  -L/usr/local/lib -lwiringPi
443  sudo ./pcd8544_rpi
444  top
445  sudo ./pcd8544_rpi
446  sudo ./pcd8544_rpi &

バックグラウンド実行も可能。