RaspberryPiでLCDモニタ

aitendoの2.2インチTFT液晶をRasPiで使う - @SRCHACK.ORG(えす・あーる・しー・はっく)
を参考にやったがLCDでのコンソール表示が90度回転しなかったので、試した結果。

  • コンソールログインにする(GUIを立ち上げない)

/etc/inittab:

# The default runlevel.
id:2:initdefault:

#1:2345:respawn:/sbin/getty --noclear 38400 tty1
1:2345:respawn:/sbin/fbterm-login fb1 tty1

でランラベルを2に下げただけではだめだった。なぜ?

で、
rasp-config
を実行し
3 Enable Boot to Desktop/Scratch
Console Text console, requiring login (default)
を選択することで、LCDにログインプロンプトが出るようになったが、
90度回転していない。

/sbin/fbterm-login:

#!/bin/bash
# example: fbterm-login fb1 tty1
export FRAMEBUFFER=/dev/$1
exec /usr/bin/fbterm -r 1 --font-size=12 /bin/login < /dev/$2


/sbin/fbterm-login:

#!/bin/bash
# example: fbterm-login fb1 tty1
export FRAMEBUFFER=/dev/$1
exec /usr/bin/fbterm --screen-rotate=90 --font-size=12 /bin/login < /dev/$2

に修正したら90度回転するようになった(横長表示)

こっちで設定するのかと思っていたが、こちらはGUIのときに有効になるみたい。
/etc/modules:

# fbtft
fbtft_device name=adafruit22a rotate=90 speed=16000000

jQuery コードリーディング その2

まず、全体を俯瞰してみる。

  • ファイルサイズ:247KB
  • 総行数:9190行
  • 総文字数:247351文字

だいたい新聞朝刊二日分をくまなく読むくらいの量ですね。

では、読み始めます。
コメントは飛ばして15行目から。

(function( global, factory ) {

	if ( typeof module === "object" && typeof module.exports === "object" ) {
		// For CommonJS and CommonJS-like environments where a proper window is present,
		// execute the factory and get jQuery
		// For environments that do not inherently posses a window with a document
		// (such as Node.js), expose a jQuery-making factory as module.exports
		// This accentuates the need for the creation of a real window
		// e.g. var jQuery = require("jquery")(window);
		// See ticket #14549 for more info
		module.exports = global.document ?
			factory( global, true ) :
			function( w ) {
				if ( !w.document ) {
					throw new Error( "jQuery requires a window with a document" );
				}
				return factory( w );
			};
	} else {
		factory( global );
	}

// Pass this if window is not defined yet
}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {

// Can't do this because several apps including ASP.NET trace
// the stack via arguments.caller.callee and Firefox dies if
// you try to trace through "use strict" call chains. (#13335)
// Support: Firefox 18+
//

いきなりわからん。というか最初だからこそわからないのか。
そもそも

}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {

の'{'に対応するカッコが見つからないんだが(viの % コマンドで探したが)...。
このコメントの意味がよく分からないけど、use strict をつけるとASP.NET, Firefoxでdieするのと関係あるの?よくわからん。もう少し、見てから戻ってきます。

// Can't do this because several apps including ASP.NET trace
// the stack via arguments.caller.callee and Firefox dies if
// you try to trace through "use strict" call chains. (#13335)
// Support: Firefox 18+
//

どんどんいこう。

var arr = [];

var slice = arr.slice;

var concat = arr.concat;

var push = arr.push;

var indexOf = arr.indexOf;

var class2type = {};

var toString = class2type.toString;

var hasOwn = class2type.hasOwnProperty;

var support = {};

arr で配列を準備。slice,concat,push,indexOfはarrのメソッドの対するエイリアス
class2type でプロパティを準備。プロパティは連想記憶(ハッシュ)と同じようなものだと理解している。toString, hasOwnはclass2typeのメソッドに対するエイリアス
support でプロパティを準備。

次回に続く。このペースでいくと何時終わるのやら。

jQuery コードリーディング その1

jQueryソースコードを読んで、
jQueryjavascriptを勉強する連載(予定)。
jQueryを使ったjavascriptプログラミングの勉強ではないです。

モチベーションはこれ

最近はオープンソースにもいいものがあります。例えば、jQueryは僕がMicrosoftの外に出てから、一番美しいと思ったコードですね。

ブログ主のプログラム関連スペックはこんな

  • Cはだいたいわかる
  • Railsはさわったことがある。Herokuで自分用に動かしている簡単なアプリがある。
  • javascriptは見よう見まねでコードを書いたことがある。生涯コード記述量は300行くらい。

jQueryのバージョンは現時点で最新の2.1.1を使う。

いつ終わるかわからないが、終わらせるまでやりたいと思う。

Pebble でWorldCupを楽しむ

2014 FIFA World Cup Brazil の試合スコアをライブ表示するPebble Appをつくってみた。
スコアが動くとブルッとします。多分動くと思う。
PCな方はこちら
Android/iOSな方はこちら
f:id:zinziroge:20140613230656p:plain

このあたりを使って作っています。感謝。

基本的にはこれと同じです。
Pebbleでサッカースコアライブ更新表示してみた - じんじろげのジロジロモニタ

RaspberryPiにいろいろつないでみた

この記事は書きかけです

RaspberryPiを

  • ラジオサーバ
  • 猫監視
    • WebCamでブラウザ経由監視
    • WebCamを2軸サーボで動かす
    • 室温監視してエアコンOn/Off

にすることを目的にいろいろつなげるだけつないでみた。

RaspberryPiに

  • ロータリーエンコーダ x2
  • LED
  • トグルスイッチ
  • 2.2inch LCDモニタ
  • デジタル温度計(1-Wire)
  • Arduino(ATMega328P-PU)

をつないでみた。
RaspberryPiにつないだArduino(ATMega328P-PU)に

をつないでみた。
RaspberryPiとArduino(ATMega328P-PU)の間は、SPI(スケッチ書き込み用)とシリアル通信でつないでみた。
各種デバイスをRaspberryPi, Arduinoのどっちにつなぐかはかなり適当です。
当初は、5V系デバイスはArduino, 3.3V系はRaspberryPiにするつもりでしたが必ずしもそうはなってないです。

GPIOでArduinoへスケッチ書き込み

ArduinoというかATMega328への書き込みと言った方が正確かも。
Gertboard | Arduino IDE Installation (ISP) | Gordons Projects
を実施

シリアル通信でArduinoと接続

ちょっとはまった。
何か送信できるけどうまく取り込めない。3.3V(RaspberryPi) <-> 5V(ATMega328)変換で結線ミスかPullUpが弱いのかと思って悩んだ。が、結局は、Getboard(という評価ボード)が12MHzなので、16MHzでATMega328を動かす場合は設定ファイルを書き換える必要があった。
以下を変更。

/usr/share/arduino/hardware/arduino/boards.txt:

gert328.name=Gertboard with ATmega328 (GPIO)
...
#gert328.build.f_cpu=12000000L
gert328.build.f_cpu=16000000L
...

5V電源はGPIOから供給

RaspberryPiにつないだATMega328P-PUにサーボモータをつないでいるので、RaspberryPiの5V電源で十分な電流が流せる必要がある。
が、microUSB経由だとポリフューズがあるので700mAまでしか流せない(実際、microUSB電源供給でサーボモータを動かすとすぐ落ちる)。
色々調べるとGPIOの5Vに直結するのが良さそう。
なのでmicroUSBから電源供給しないで5V 2A のAC/DCアダプタをGPIO 5Vに直結することにした。

デジタル温度計

ここを参考に実装。
Raspberry Pi で温度センサ(DS18B20+)を読んでみた - 完全に個人的な備忘録
# 1-wirearduinoで使えるようにもトライしてみたい気もするが

この記事は書きかけです

Chromecastを買いました

Chromecastを買いました。

HDMIポートを持つテレビにつないで使います。
chromecastに対応したアプリの情報をchromecastに飛ばしてテレビに表示させることができます。
セットアップは、PCをWiFiネットワークにつなげたことがあれば問題なくできると思うので省略します。
chromecastの機能のポイントは、

  1. chromecastに対応したアプリしかテレビに表示させることができない
  2. 対応アプリでは、PC/スマホからchromecastに映像を送るのではなく、chromecastがそのコンテンツをインターネットから持ってくる

です。(と、理解している)
ただ、2つ目に関しては、ローカルに保存した動画をPCのchromeブラウザで再生したらTVで見られたので、chromeブラウザで表示できるものはなんでもTVで見れると言う方が正しそうですね。でも、音がたまに途切れたりしたので、コンテンツによっては厳しそう。

全体構成のイメージはこんな感じです。
f:id:zinziroge:20140531155919p:plain

できることとかをまとめるとこんな感じだと思います。
勘違いがあれば、ご指摘ください。

現在できること

できないかと思いきやできること

できないこと

  • DVDをPCで再生してTVでみる
    • コンテンツが自分のPCにしかないものは無理。もちろん、DVDと同じコンテンツがインターネット上から見れるなら話は別です。
  • 手持ちの動画ファイルをPCで再生してTVでみる
    • 理由は同上と思っていたのですが、chromeブラウザで再生できるフォーマットだったらTVでみれた

#12/10追記 まだ正式機能ではないようだけど、デスクトップを転送できるので、↑は一応できるみたい。

ちょっと頑張るとできること

今のところのとても満足してます。
ひとつうれしい誤算だった(あんまりちゃんと考えいていなかったところなのです)のは、chromeで再生中のニコ動をchromecastに飛ばしてから、PCで別の作業を初めてもTVではニコ動が表示され続けるってことですね。
サブモニタ的な使い方もできる感じですね。