case 3 ー G P 1 0 C LR = 0x 1 F くくた 明していきます。 くく 2 2 : GPIO_CLR = u s 1 ee p ( 1 ) : G P I O_S E T u s 1 e e p ( 1 ) ; G P 1 0 S E T 1 3 1 くく くく くく 22 : 7 : 2 2 : u s 1 e e p ( 2 0 ) : G P I O_C L R = 1 た 10 ( D B4 - 7 ) と GP 10 11 ( (S) をクリア 2 2 ( E : イネーブル信号 ) = 0 7 ー 10 ( DB4 - 7 ) に 8 ビット接続設定出力 11 ( RS ) 0 / / イネーブル信号 = 1 G P 1 0 G P 1 0 G P 10 G P 1 0 イネーブル信号 = 0 / / 十分なウェイト ( 20 s ) LCD の接続モードは、 LCD 内部 ファンクションレジスタに値をセッ トして設定しますが、 SC1602 では 起動時に 3 回、ある程度のウェイト を置いて 8 ビット接続モードに設定 後、改めて 4 ビット接続モードに設 定するという手続きが必要になりま す。この手続きは無駄なようです が、 LCD 内部のコントローラーを初 期化する意味があり、欠かすことが できません。 8 ビット接続モードに設定するに はファンクションレジスタに 0X30 を書き込みます。ただし、本稿の例 ではデータバス下位 4 ビットは GND に接続しています。このため下位 4 ビットは 0 で固定なので 3 を書き込 めばよいわけです。実際の設定は図 1 0 のような手順になります。 まず、 GPIO 7 ~ 10 (DB4—DB7) と GPIO 11 (RS) をクリアします。 GPIO 22 (E) もクリアしておきま す。その後、 GPIO 7 ~ 10 (DB4— DB7) に 3 を出力し、 GPIO 11 (RS) はクリアのまま維持します。 RS が 0 ならばファンクションレジスタへの 書き込みになります。 その状態で、イネープル信号 (GP IO 22 ) を 1 にし十分なウェイトを 入れた後、イネープル信号 (GPIO 22 ) を 0 に戻します。これでファン クションレジスタに 0X30 が書き込 まれ、 8 ビット接続モードに設定さ れます。 この操作を都合 3 回行い、その上 でファンクションレジスタに 0X20 図 10 8 ビット接続モードへの設定 # i n c 1 u d e く s t d i 0 . h > LC D_I n i t ( ) : i nt ma i n ( VO i d ) #include "lcd—util . h" r e t u r n 0 : LCD_PutString("He110, Raspberry" ) : LCD_SetCursorPos(I,0); LCD_PutString("He110, Wor1d" ) : 図 11 LCD にサンプル文字を表示するプログラム日 cdtest. c 」 を書き込めば 4 ビット接続モードに 切り替わります。 4 ビット接続モードに切り替えた 後は、ファンクションレジスタへの 書き込みや、キャラクターレジスタ への書き込みは上位 4 ビット、下位 4 ビットの順で書き込みます。実際 に文字を表示する前に、カーソルの 設定などをする必要があります。 れらについては付属マニュアルを見 てください。 LCD を初期化するコードは 、ⅱ冗 者限定サイトに用意した「 lcd-util. h 」の LCD-Init() 関数を見てくださ い。前述の手順で 4 ビット接続モー ドに設定した後、カーソルなどを設 定しています。 ファンクションレジスタを設定す る際には、それぞれの設定の間に us leep() 関数を使って適当なウェイト を挿入しています。設定する内容に よってウェイトの下限値がマニュア ルに指定されていますが、本稿では かなりの余裕を持ったウェイトを入 れるようにしています。 最も大きなウェイトが必要なのは LCD 表示クリアのコマンドで、 1.5 ミリ秒以上のウェイトを入れるよう に指定されています。 lcd_util.h で定義した LCD-Wri te() 関数は、 4 ビット接続モードに切 り替えた後に使う関数で、 LCD に対 して 4 ビットモードで書き込みをし ます。上位ビット、下位ビットの順 で書き込んでいることが分かると思 います。 LCD_PutChar() 、 LCD—PutStri ng() はそれぞれ LCD に文字を表示 する関数です。 LCD_Write() に対し て RS ビットを 1 にして書き込むとキ ャラクターレジスタにデータが書き 込まれ、 LCD に文字を表示できます。 それでは、この lcd ー ut ⅱ . h を使っ て文字を表示するサンプルを図 1 1 に示します。次のようにしてコンパ イルし実行してみてください。 ラスパイマガジン 2017.10 特別付録
拡張ポド HATf を作ろう、し耳切や LCD が差すたで動ぐ ています * 6 ( 図 14 ) 。 l-wire 接続な AM2321 や AM2322 などの場合、 3 ら、 DHTII や AM2302 と使い方は 番が GND になり、 4 番がモードを選 あまり変わりありません。 択するピンになります。 4 番ピンを GND につなぐことで l-wire モード ラズバイにセンサーをつなぐ に切り替わり、 DHTII / AM2302 と DHTII と AM2302 は l-wire で接 同じ使い方ができます。 続するので、つなぎ方はとても簡単 です。ここでは、ラズバイの GP104 Device Tree Overlay を用意する ( 7 番ピン ) に DHTII / AM2302 をつ DHTII と AM2032 を今回推奨し なぐことにします ( 図 15 、図 16 ) 。 ているのは、 Raspbian でカーネルド DHTII と AM2302 の 2 番ピンが ライバとドライバを読み込むための l-wire のシリアルデータ (SDA) で Device Tree OverIay が用意されて す。 l-wire では、シリアルデータを いるからです。基本的に、この De 5 ~ 10kQ 程度の抵抗でプルアップ vice Tree OverIay をシリアル EEP しなければなりません。 3 番ピンは ROM に書き込むだけで DHTI 1 と 未接続、 1 番ピンに + 3.3V を、 4 番 AM2302 のカーネルドライバが使え ピンを GND に接続してください。 るようになります。ただし、それだ なお、 12C 接続もサポートする けでは応用が効かないので は Raspbian が用意している Device Tree OverIay をカスタマイズする 簡単な方法を紹介します。 図 16 EEPROM の回路に温湿度センサー を追加した Device Tree OverIay を作成する AM2321 を利用しているため、 3 番ヒ。ンを GND に接 には、「 Device Tree Compiler 」と 続している。 いうコンパイラが必要です。これを インストールしておきましよう。 を朝 配線図 図 15 G 円 0 第を、 ロロロロ ロロロロ ロロロロ $ cd ¯/hats/eepromutils ロ $ dtc - I dtb - 0 dt s - 0 d h tl 1 . d ts /boot/overlays/dhtll . dtbo ロ 3 2 4 1 $ s u d 0 a pt ー g et i n s t a ⅱ d e v i c e ー t ree-compiler 「 dtc 」が Device Tree Compiler の コマンドで、「 - I 」オプションが入力 形式 (Device Tree Binary) 、「 - O 」 Device Tree CompiIer は、ソース コードから Device Tree Overlay の オプションが出力形式 (Device Tr バイナリー ( 拡張子は「 . dtbo 」また ee source) 、「 - 。」が出力ファイル は「 . dtb 」 ) を作成したり、逆に De 名の指定です。これで、 DHTII 用 の Device Tree OverIay (/boot/ov vice Tree OverIay のバイナリーか らソースコード ( 拡張子は「 . dts 」 ) erlays/dhtll. dtbo) から、そのソー スコード (dhtll. dts) が作成されま を生成したりできます。 そこで、 Raspbian が用意してい す。なお、実行時には警告 (Warni る DHTII 用の Device Tree Overl * 5 1 -wire は、米 Maxim lntegrated 社が ay からソースコードを作成します。 開発しだ 2C よりもさらに簡潔な℃間インタフ 作業は¯/hats/eepromutils 以下で ェースです。 G 曰 0 ーっでデータをやり取りで きます。 行いましよう。次のようにして Dev * 6 AM2321 は既に廃番になっているよう ice Tree Compiler でソースコード です。後継として「 AM2322 」 ( 秋月電子通商 通販コード : M - 10880 ) が売られています。 を作成します。 Vdd SDA GND DHTII と AM2302 のピンアサイン 図 13 温湿度センサー「 AM2321 」 図 14 ブレッドボードに挿しやすいようにヘッダーピン をはんだ付けしている。 D HT 1 1 や A M2302 と似た ような形状をしている。 ラスパイマガジン 2011.10
$ cu - 1 /dev/ttyUSB0 -s 115200 ロ : 24907 : 00000000 : 126 : 038 : 1013d2a : 2425 : 0000 : 0000 : 1145 : 0569 : X : - 058 : 0038 : - 073 : : 24912 : 00000000 : 162 : 039 : 1013d2a : 2425 : 0000 ; 0000 : 1145 ; 0569 : X : 0006 : - 103 : - 003 : : 24917 : 00000000 : 168 : 040 ; 1013d2a : 2425 : 0000 : 0000 : 1145 : 0569 : X ; 0007 ; - 103 : - 001 : 図 10 モード 0 の出力結果を確認 - CONFIG/Samp Moni to 「 VI -04 ー 1 / 引 D X81013d2a / LID = 0X00 / RC : 9687 ー a: set App licafion ( 0X67726305 ) : set Device 田 ( ー c : set ChanneIs ( 15 ) x : set Tx Powe 「 ( 3 ) d : set SIeep Du 「 ( 5000 ) w : set Senso 「 Wait Du 「 ( 0 ) m : set Senso 「 Mode ( 0X35 ) P : set Senso 「 Pa 「 amete 「 ( 2 洋 P : set Senso 「 Pa 「 amete 「 2 ( THT=I DUR=I L Å T ニ 1 WIN= k : set Enc Key (OxA5A5A5A5) 0 : set Option Bits ( 0X0 00001 ) S : save Configu 「 ation R : 「 eset to Defaults 「 p 」を入力して 図 12 2525A とサイコロキャラメル 「 0 」と CEnter] を押せばモード 大文字の「 S 」で保存すると図 1 1 の 0 に変わります。 ような表示になります。 大文字の「 S 」を このモードはタップすると家の電 押して設定を保 気をつけるとか、音楽プレーヤーの 存し、「 ~. 」で 電源をオン / オフをするなど、工夫 終了してくださ 次第で利用価値が高そうです。 図 11 第 2 バラメーター設定時の画面 親機に対しても cu コマンドを実 モード 4 ・自由落下 作マンガ「ハルロック」で登場した 行します。すると図 10 のような出 フリーフォール ( 自由落下 ) モー 作品を再現できます。 最新版の TWELITE では、専用 力が出るはすです。データは 5 秒ご ドです。 2525A を落下させることで とに受信しています。 データを送信します。これを試すの ファームウェアを書き込んだ MON このモードは定期的に情報を収 は少々難しいのですが、手に持って OSTICK を別途用意すれば、無線で 集するときに便利なモードです。迷 上下に振っただけではデータを送信 子機のモードを変更できます。その 子防止用機器、忘れ物検知センサ しませんでした。ポールを投げるよ 場合ケープルでの接続は不要で、同 、加速度センサー情報の収集など うに 2525A を上に放り投げて受け取 じように設定できます。「 Tera Te で利用できそうです。 rm 」 (https://osdn.jp/projects/tts るとその過程でデータを送信しまし た。自由落下時にアクションさせる sh2/) などのターミナルソフトを起 モード 1 、 201 / 2 回のタップ検知 動し、通信速度 ( ボーレート ) を ことができそうです。 タップすることで情報を送るモー 「 115200 」にしてシリアルポート経 由で MONOSTICK に接続し、 CEn ドです。モード 1 はタップが 1 回、 モード 8 ・活動状態を通知 モード 2 はタップが 2 回で通知しま 活動と非活動の状態を通知する ter] キーを押すとプロンプトが表示 す。このモードからは第 2 パラメー モードです。 2525A が動いていると されます。 ターを設定することで検出するため きと動いていないときに、それぞれ の時間 (DUR) やしきい値 (THT) 異なる ID が付いたデータを送信し モード 0 ・定期送信 を細かく設定できます。このときに ます。動いているときのデータ送信 モード 0 をます試します。定期的 指定できる設定値は公式サイト (ht 間隔は固定で、動いていないときの に加速度センサーの情報を送信す tp: 〃 g00. g レ D2ANKM) に掲載され 間隔を第 2 パラメーターで変更でき るモードです。 cu コマンドで接続時 ています。ただし、筆者が試してみ ます。こちらは後ほどニコニコサイ のパラメーターを確認すると次のよ た限り標準の設定で問題なく利用 コロで実際に利用します。 うになっています。 できました。 ニコニコサイコロを 第 2 パラメーターを変更するには 作ろう 大文字「 P 」を押して、次のように カンマ区切りで入力します。 2525A 用のケースは用意されてい ません。ケースの 3D データは提供 THT=I,DUR=I,LAT=I,WIN=I されていて 3D プリンターで出力で 0 ー s 115 2 0 0 $ cu - 1 /dev/ttyUSBI 1 、 2 、 4 、 8 を組み ( 略 ) 合わせたモード 15 ↓ p: set Sensor Parameter ( 15 ) P : s e t S e n s 0 r Parameter2 ( ーラスパイマカジン 201 な 47
表 3 setgpio で指定できるモード G 日 0 入力モード INPUT G 曰 0 出力モード OUTPUT ALTO ~ ALT5 AIternative Function0 ~ 5 表 4 setgpio で指定できるオプション 変更なし DEFAULT プルアップ UP カレダウン DOWN カレアップダウン無し NONE $ cd ¯/hats/eepromutils ロ . /eepmake eeprom—settings . txt test . eep ロ Opening file eeprom—settings . txt for read UUID = 81815C9d ー 6dca ー 4e47 - ae03 ー a28f54f2b89f Done reading W r i t i n g 0 u t . Done . 図 8 シリアル EEPROM のイメージファイルの作成 容 . 4 容 オプション $ sudO . /eepflash . sh -w ー t = 24C64 -f=test. eep ロ This will attempt tO talk tO an eeprom at i2c address 0X50. Make sure there is an eeprom at this address. This script comes with ABSOLUTELY no warranty. continue only if you know what you are d0ing. DO you wish t0 continue? (yes/no): yes ロ Writing . 0 十 1 records in 0 十 1 records out 0 . 694072 s, 0 . 2 kB/s 120 bytes ( 120 B) copied, Done . 図 9 シリアル EEPROM へのイメージの書き込み ALTO ~ ALT5 を設定すること 利用したい Alternative Function に 2 を設定すると、ラズバイの USB 端 切り替わるので楽です。 で、 GPIO 端子を入出力モードでは 子から 500mA の外部電力供給が可 なく「 AIternative Function 」に設 また、 GP1014 と 15 はデフォルト 能になります。 の入力モードではなく出力モードに 定されている機能を割り当てること も可能です。これについては後で実 切り替えています。 際に試してみることにしましよう。 シリアル EEPROM に書き込もう 第 3 パラメーターのオプションで 以上の内容に従って設定したら は表 4 の設定が可能です。 ここではテストとして次のように ¯/hats/eepromutils/eeprom—setti ngs. txt を保存してください。カレン 設定します。 トディレクトリーを切り替え、図 8 のようにシリアル EEPROM のイメ setgpio 5 ージファイルを作成します。 setgpio 14 最後に「 Done. 」と表示されれば ULT setgpio 1 5 カレントディレクトリーにシリアル ULT EEPROM のイメージファイル (test. eep) が作成されます。このファイ GP105 を ALTO に設定していま ルをシリアル EEPROM に書き込み す。 Raspberry Pi 財団が公開して 「 setgpio 」には GPIO 端子の設定 いる SoC のマニュアル * 4 を参照す ましよう ( 図 9 ) 。 eepflash. sh は root を記述します。設定するときには行 権限でしか実行できません。「 - w 」 頭のコメントマーク ( # ) を取り、 ると分かりますが、 GP105 を ALTO が書き込み指定、「 - t = 」で使用して に設定すると汎用クロック出力に切 その後に続くパラメーターを書き換 り替わります。スクリプト言語など いるシリアル EEPROM のタイプを えます。 setgpio のパラメーターは、 指定します。 設定する GPIO 番号、モード、オプ から AIternative Function を切り替 えるのは結構面倒ですが、 HAT の ここでは例として 24LC64 を使っ ションの順です。モードは表 3 に示 仕組みを使えば起動時に自動的に ているので「 24C64 」を指定します したものが選択できます。 D E FA #setgpio 2 ULT #setgpio 3 ULT #setgpio 4 #setgpio 5 #setgpio 6 ULT #setgpio 7 ULT #setgpio 8 ULT #setgpio 2 5 ULT I N P U T D E FA INPUT D E FÅ I N P U T D E FA INPUT D E FA INPUT D E FA INPUT DEFAU ALTO D E FA INPUT D E FA OUTPUT ロ D E FA OUTPUT D E FA INPUT フ ( イマカジン 2011.10
ラズバイ電子工作 - 基礎からレ ( り学 0.5m ~ 2.4ms テユーティー比 4.8V 表 3 サーポモーター制御の PWM 信号の設定値 指定可能な最小値 分周値 2 0.02 x 19200000 / 2 192000 範囲 設定値 ( -90 度 ) 192000 x 0.5 / 20 4800 192000 x 2.4 / 20 設定値 ( 90 度 ) 23040 数と pwmSetMode 関数で次のよう に初期化します。 補足説明 項目 20ms (50Hz) PWM 周期 図 8 サーポモーター SG -90 の回転角度指示 データシートより引用。 ューティー比を変更するには softP wmwrite 関数を呼びます引数は softPwmWrite 関数の引数をいろ ピン番号、設定値です。設定値は いろ変えて、 LED の明るさが変化す $ sudO python3 (softPwmCreate 関数の初期値と同 > > > import wiringpi as pi ロ ることを確認してください。 じ ) 範囲にデューティー比を掛けた > 〉〉 p i . w i r i n g P i S e t u p G p i 0 ( ) ロ 値です。 pinMode 関数の引数はピン番号、 ハードウェア PWM で LED を点灯 デューティー比を 3 % から 10 % に 入出力モードで、第 2 引数に PWM ー 次はハードウェア PWM を使って 変更するときは 200X0.1 = 20 を指定 OUTPUT を指定してハードウェア みましよう。 します。以下のように実行してみて PWM を有効にします。 pwmSetMo ハードウェア PWM を pinMode 関 ください。 de 関数でハードウェア PWM の 2 種 類のモード ( バランスモードとマー クスペースモード ) を選択します。 周期とデューティー比を指定した 使い方をするときは PWM-MODE_ MS を指定します ( バランスモード はデューティー比のみで動作させ るモードで、アナログ出力を模擬す 回路図 るときに使います ) 。 サーポモーター SG-90 0 20 ) ロ > > > pi . softPwmWrite(18, 0 一三 配線図 5 [ 此 !d ん qd528 Z ・い田叩 E !d S B 2 x 0 旧 9 0 0 Raspberry Pi 3 三 E 0 5V GP ℃ 18 GND > > > pi . pinMode(18, pi . PWM_OUTP UT ) ロ > 〉 > pi . pwmSetMode()i . PWM_MODE MS ) ロ Vcc PWM GND 出力 次に周期を pwmSetClock 関数と 図 9 ラズバイとサーポモーターの配線図と回路図 import wiringpi as pi pi . wiringPiSetupGpi0() 、一ハードウェア PWM を有効化 pi . pinMode(18, pi . PWM—OUTPUT) ーマークスペースモードに設定 pi . pwmSetMode()i . PWM—MODE—MS) «- 一分周値を 2 に設定 pi . pwmSetCIock(2) ー範囲を 192000 に設定 pi . pwmSetRange(192000) ヤ -90 90 , 90 -90 を繰り返す w h ⅱ e T r u e : fo r i i n 1 i s t ( ra n g e ( ー 90 , 9 0 , 10 ) ) + 1 i s t ( ra n ge ( 90 , ヤ角度に応じたデューティー比に変更 p i . pwmW r i te ( 18 , i n t ( ( ( i + 9 0 ) / 180 ☆ ( 2 . 4 、一 0.2 秒待機 pi . de1ay(200) 図 10 サーポモーターを制御するプログラム ( se Ⅳ 0. py ) - 10 ) ) : - 9 0 , - 0 . 5 ) + 0 . 5 ) / 20 ☆ 192 00 0 ) ) ラスパイマガシン 2011.10 106
7 EXIT ・・・」の表示が出た後、再び + + + を押します。 親機ではデータを加工しやすいよ うに、シンプルに受け取るモードに 変更します。このためオプションビ ット (Option Bits) を「 0X20 」に します。図 8 の画面で「。」と入力し ます。続いて「 20 」と入力して [En ter] キーを押します。続いて大文字 の「 S 」を押すと、設定が反映され、 その結果が画面で確認できます。 確認できたら cu を終了します。 れには少々コツがいります。「 ~. 」を 入力すれば通常は「 Disconnected 」 と表示されコマンドプロンプトへ戻 ります。もし「 ~. 」が入力できな かったら一度 CEnter] キーを押し てからトライしてみましよう。なお 「 ~. 」を入力後に CEnter] を押す必 要はありません。 子機のオプションビットも変更 十十十と入力する。 します。ファームウェアを「 App_ 画面上には表示されない Tag 」に変更した親機と通信するた CONFIG/Åpp—Tag V2 - 00 - 0 / SID = 0X81027aae / LID = 0X00 / RC = 9696 - set App1ication ID ( 0X67726305 ) めの設定です。図 9 で「。」 - s et Dev i ce I D ( - ) [Enter] キーを押し、「 S 」で保存 ( 略 : c ~ 0 は図 8 と同じ ) して cu をいったん終了させます。 d : set S1eep Dur ( 5000 ) w : s e t S e n s 0 r W a i t D u r ( 3 0 ) m : s e t S e n s 0 r M 0 d e ( 0 x 10 ) 各モードを p : s e t S e n s 0 r P a r a m e t e r ( 0 ) P : set Sensor Parameter2 試してみよう ( 略 : S 、 R は図 8 と同じ ) 続いて子機の 2525A の設定を変え 図 9 2525A の設定を変更する ながらぐ実際に試してみましよう。 2525A が備える主な動作モード ( 最新の 2.0.2 の場合 ) 表 1 2525A には表 1 に示すような動作モ 通知を出す挙動を選べる。 0 「送信間隔の設定」で設定した間隔で通知 0 N 0 「 m 引 2 回たたいたとき、落としたときな 軽くたたいたときに通知 1 Tap どに通知でき、 1 ~ 8 は組み合わせ 軽く 2 回たたいたときに通知 2 DoubIe Tap 落としたときに通知 4 Free Fall ても使えます。デフォルトの動作は 動いているときと止まっているときのそれぞれを通知 8 Active/l nactive 1 、 2 、 4 、 8 の組み合わせで、モー シェイクノーマル 振られたときのカの強さに応じて DO を 4 段階で制御 32 振られているかを検出して DO を「 Lo 」か「 Hi 」に設定 33 シェイク積算モード 1 ド番号は各数字を足した 15 と指定 上向きの面を通知 64 ターン します。モード 256 はラズバイマガ スピン 角度を通知 128 省電力 スリープモードで待機 512 ジン 2015 年春号で紹介した、猫の ねこった一と互換性のあるモード 256 N ekotter 行動を見守れる「ねこったー」と互 ニュー画面が表示されるのに対し に TWELITE R 上のリセットボタ 換性があるモードです。講談社の週 て、 2525A では Connected の表示後 ンを押すか、 + + + を押して「 !INF 刊モーニングで連載していた電子工 $ dmesg ロ ( 略 ) [ 3404.743974 ] usb 1 - 1 . 4 : new full-speed USB device number 6 using dwc_otg [ 3404.868684 ] usb 1 - 1 . 4 : New USB device found, idVendor=0403, idProduct=6001 [ 3404.868709 ] usb 1 - 1.4 : New USB device strings: Mfr=1, Product=2, Seria1Number=3 [ 3404.868727 ] usb 1 - 1 . 4 : Product: TWE-Lite-R [ 3 404.876351 ] u s b 1 - 1 . 4 : FTDI USB Seria1 Device converter now attached to ttyUSB1 図 7 TWELITE R を認識させる $ cu ー 1 /dev/ttyUSB0 -s 115200 ロ Connected . 十十十と入力する。 画面上には表示されない CONFIG/App_Tag V2 - 00 ー 1 / SID = 0X81010C2d / LID = 0X00 AppIication ID ( 0X67726305 ) set C h a n n e 1 s ( 15 ) C : set Tx P ow e r ( 3 ) X : set b : UART baud ( 38400 ) set UART option ( 8N1 ) B : set Enc Key (0xA5A5A5A5) k : set Option Bits ( 0X00000001 ) 0 : set S : save Configuration R : reset to Defau1ts 図 8 MONOST ℃ K の設定を変更する ー s 115 2 0 0 ロ $ cu ー 1 /dev/ttyUSBI Connected . ! I N F E X I T I N T E RAC T I V E M 0 D E . 説明 動作モード 機能 ラスパイマガジン 201 ⅱ 0 特別付録 46
# i n c 1 u d e く s t d i 0 . h > # i n c 1 u d e く s t d 1 i b . h > #include く u n i s t d . h > #include 'gpio—setup . h" i n t ma i n ( VO i d ) setup—io(); I N P_G P 1 0 ( 1 7 ) : 0UT_GP10(17); u s 1 e e p ( 10 ) : wh i 1 e ( 1 ) { GPIO_SET = s 1 eep ( 1 ) : G P 1 0 C L R = s 1 eep ( 1 ) ; r e t u r n 0 : 図 9 LED を点滅させる [ledtest. c 」 ットアップ関数を実行します。その GPIO への出力には GPIO_SET と これで ledtest という実行ファイ GPIO ー CLR という二つのマクロを 内容はシンプルで、定数「 GPIO ルが得られます。この実行ファイル BASE 」に定義した GPIO 制御レジ 用います。どちらも 32 ビットのレ は mmap システムコールを用いて スタのアドレスプロック ()K バイ ジスタに値を書き込むだけのマクロ root 権限が必要な /dev/mem を参 で、 GPIO 番号がビットに対応して ト ) を、 mmap システムコールを使 照するため、 sudo を使って root 権 って gpio という変数にセットしてい います。例えば GP1017 に 1 を出力 限で実行する必要があります。 するなら次のように記述します。 るだけです。 併せて GPIO 制御レジスタを介し $ sudO . /ledtest ロ て GPIO を設定するためのマクロを 定義していて、そのマクロを使って これで LED が点滅するはずです。 17 ビット目に 1 を書き込むと、 GP GPIO を操作できます。 IO 17 に 1 が出力されます。 LCD を制御する G 曰 0 のモード設定と出力 GPIO の出力を 0 にするには、 GP それでは LED に続いて LCD を制 GPIO を使用する前に、 GPIO を IO ー SET で 0 を書き込むのではなく、 御します。 SC1602 は実際に文字な 入力モードで使うか出力モードで GPIO ー CLR でレジスタに 1 を書き込 どを表示する前に、いくっかのステ 使うかを設定する必要があります。 みます。 ップで内部コントローラーを初期化 BCM2837 で注意しなければならな する必要があります。 いのは、必ず 1 度だけ入力モードに 本稿の例では、 DB4—DB7 まで 設定し、その後に出力モードに設定 しか使わない 4 ビット接続を使用し する必要があることです。例えば、 GPIO CLR で 17 ビット目に 1 を ているため、最初に 4 ビット接続モ LED を接続した GPIO 17 を出力モ 書き込むと、 GPIO 17 が 0 になりま ードに LCD 側を設定しなければな ードに設定する場合、次のようにマ す。 りません。 クロを記述します。 以上が分かれば、 C 言語を使って 詳細は LCD に付属するマニュア GPIO に簡単に書き込みができます。 ルに詳しく書かれていますが、やや LED を接続した GPIO 17 番を 1 秒お 分かりにくいためマニュアルを本稿 I N P_G P 10 ( 17 ) : 0 U T_G P 1 0 ( 17 ) : きに点滅させるサンプルを図 9 に示 で補足しつつ初期設定の手順を説 るる すす る トれをを プ ット入 ッ セッを ア 0 0 力にイ ッ 入力工 セ ん出ウ の たてな つめ当 い改適 しました。 Raspberry Pi に SSH で接続して 工デイタを開き、 gpio_setup. h と le dtest. c を同じディレクトリーに作成 してください。 Raspbian には標準で C コンパイラが入っているので、一 つのソースファイルをそのままコン パイルして実行できます。 1 くく 17 ; 1 くく 17 : $ gcc ledtest . c - 0 ledtest ロ G P 1 0 S ET = 1 くく 1 7 : 1 くく 17 : G P I O_C L R ラスパイマカジン 2017.10 特別付録
表 1 2233N2- Z の主な仕様 2.6mm (w) x3.3mm (D) x2.32mm (H) モジュールサイズフレキシブルプリント基板除く 69.3mm (W) x3.3mm (D) x2.32mm (H) フレキシカレプリント基板含む フレキシカレプリント基板除く 0.02g 重量 0. lg 以下 フレキシブルプリント基板含む 1296 (H) x 816 (V) 有効画素数 約 106 万画素 プラスチック 3 枚レンズ ( F2.4 ) レンズ構成 (F 値 ) 80.7 度 ( 対角 ) 画角 300mm ~ 無限大 被写界深度 なし ( 固定焦点 ) AF 約 55mW ( 全画素読出し , 60fps, Typ. ) 消費電力 約 8mw ( 全画素読出し , 3fps, TYP. ) 内容 項目 図 15 カメラの制御基板日 U233N USB- EVB 」 ます。 サーならではといえるモジュールで IU233N2-Z と IU233N USB-EVB す ( 表 1 ) 。 図 17 ze 「 04U はラズバイと重ね合わせて は半導体の通販サイトの「チップワ IU233N2- Z は、今までイメージセ 通電させる ンストップ」で購入できます。 URL ンサーを導入することが難しかった パイ zero 用の USB 端子拡張用の基 を表 3 に示しました。 小さなエリア、例えばメガネフレー 板を使います ( 図 16 ) 。 ムの中や、小さなおもちゃ、スポー ラズバイ Zero には VI. 2 と VI. 3 の ツ用品などに活用でき、今までにな を先頭車両の電子工作 二つのバージョンがあり、それに合 い使い方を実現できます。画角は対 わせて Zer 。 4U も 2 種類あります。間 角 80.7 度あるため、その大きさにそ 違えないようにしましよう。 それでは IU233N2-Z と IU233N ぐわない広角の迫力のある映像が撮 ラズバイ zero と Zer04U の接続は USB-EVB ( 以下、両方合わせて 影可能です ( 表 2 ) 。 USB 端子の裏にあるランドと Zero IU233 と呼びます ) を使った、先頭 IU233N2-Z には、 USB 接続用の 4U の突起を接触させることで行い 車両の電子工作に入っていきまし 評価基板「 IU233N USB-EVB 」が ます ( 図 17 ) 。 あります ( 図 15 ) 。 USB VideoCla ssl. 1 に対応していますので、 PC や カメラを動かすサーボモーター ラズバイ Ze 「 0 と Ze 「 04U ラズバイに接続すれば、すぐに活用 IU233N2- Z の小ささを生かし、サ 今回使うラズバイ Zero は、 IU233 できます。例えば Windows 10 に付 ーポモーターと組み合わせて、いろ と Wi - Fi モジュールを接続するため 属しているカメラアプリを使えば、 いろな方向の景色を見られるように の十分な数の USB 端子がありませ 特別なドライバをインストールする ん。そこで「 Zer04U 」というラズ するのが今回の目標です。サーボモ ことなく IU233N2- Z の映像が見られ 表 2 2233N USB-EVB の仕様 表中の Binning モードとは隣接する画素をまとめて信号処理することで、見かけ上の受光面積を広げ、感度を 上げるモードのこと。デフォルトの状態では HD 解像度 ( 1280X720 ) の MJPG , 30fps の出力になっている。 YUV HD ( 1280X720 ) MJPEG YUV VGA ( 640X480 ) MJPEG YUV 640X400 MJPEG MJPEG 三 W 一言三 u Binning フォーマット フレームレート 出力画素数 「 / っ 0 ( 0 Binning モード Binning モード Binning モ 0 0 つな ( 0 6 1 図 16 USB ポートを四つに拡張できる 「 Zer04U 」 表 3 購入先の URL 2233 N 2-Z 2233N USB-EVB http://www.chiplstop.com/dispDetail.do?partld=SONY- 0004276 & mpn 判 U233N2- Z http://www.chiplstop.com/diSPDetail.dO?partld=APGK- 0000001 & mpn U233N % 20USB - EVB ラスパイマカジン 2017.10 84
拡張ポード HAT を作ろう、 LED や LCD が差すたけで動ぐ This script comes with ABSOLUTELY no warranty. Continue only if you know what you are doing. This will attempt to talk to an eeprom at i2c address 0X50. Make sure there is an eeprom at this address . -r - t = 24C64 -f=image . eep ロ $ s u d 0 . / e e p f 1 a s h . s h 8192 bytes ( 8 . 2 (B) copied, 1 .22469 s, 6 . 7 kB/s 16 + 0 records out 16 + 0 records in Reading . DO you wish tO continue? (yes/no): yes Done . 図 10 シリアル EEPROM の中身を読み出す が、異なる容量を使っている場合 は、そのシリアル EEPROM に合っ たタイプを指定してください。「 -f = 」の後ろに書き込むシリアル EEPR OM イメージのファイル名を指定し ます。 シェルスクリプトを実行すると本 当に書き込んでよいのか ( このスク リプトに保証はないと ) の確認を 求めてくるので、「 yes 」と入力し て CEnter] キーを押してください。 書き込みに成功すると、最後に「 Do ne. 」と表示されます。 書き込まれた内容をチェック これだけだと本当に書き込めてい るのか、少し不安になるかもしれま せん。また、将来何らかの事情で ee prom—settings. txt を失ってしまう ことも起こり得ます。そこで、本当 に書き込まれているのかをチェック する意味も含めて、シリアル EEPR OM の中身を読み出し、 eeprom_se ttings. txt に戻す方法も紹介します。 読み出しにも eepflash. sh を使い ます。図 10 のように読み出してくだ さい。これでカレントディレクトリ ーに「 image. eep 」というイメージ ファイルが作成されます。ここで使 用しているのは 64K ビットのシリア ル EEPROM なので、 image. eep の サイズは 8K バイト ( = 64K ビット ) になります。 このイメージファイルから、設定 のテキストファイルを復元します。 次のように「 eepdump 」コマンドを 実行してください。 image. eep から「 image. txt 」カゞ 作成されます。 image. txt の中をの ぞいて、先に作成した eeprom_sett ⅲ gs. txt と同じ内容になっているこ とを確かめましよう。これで確実に HAT 用のシリアル EEPROM が作成 されていることが確認できます。 シリアル EEP 日 OM の機能を確認 では、ラズバイを再起動してくだ さい。再起動後に、 HAT 用シリア ル EEPROM の設定通りに各 GPIO ピンが動作していることを確認して いきます。 まず、 GP1014 および GP1015 が 出力モードになっていることを確認 します。確認の方法はいくつかあり ますが、簡単なのは「 sysfs 」を使 う方法です。カレントディレクトリ ーを「 /sys/class/gpio 」に切り替え ましよう。 ます、 GP1014 をェクスポートし て現在のモードがどうなっているか を調べます。図 11 のように「 gpi014 / . /eepdump image . eep image . tx t ロ $ c d / sy s / c 1 a s s / g p i 0 ロ $ echo 14 〉 export ロ $ cat gpi014/direction ロ 0 u t 図 11 G 曰 014 のモード確認 direction 」の中がデフォルトのⅲか ら out に変わっているはずです。 GP 1015 も同じように「 gpi015/direct ion 」が out になっていることを確認 します。このように、 HAT 用のシ リアル EEPROM によって起動時設 定が変わったことが確認できます。 一方、 GP105 が汎用クロック出力 になっているかどうかは、オシロス コープやロジックアナライザーがな いと確認は困難です。例として GP 105 をオシロスコープで観測した様 子を画面で示しておきます。デフォ ルトでは、図 1 2 のように 800HZ の クロックが、 GP105 から出力されて いました。 Device Tree Overlay を含める 以上のように、 GPIO 端子のモー ドや Alternative Function を、シ リアル EEPROM の設定に従って起 動時に変更できることが分かりまし た。ですが、 GPIO 端子のモードだけ であれば、スクリプトなどから簡単 に設定できるので、わざわざ HAT の * 4 「 https://www.raspberrypi.org/wp- content/uploads/2012 / 02 / BCM2835- ARM-PeripheraIs. pdf 」の 1 02 ページを参 照してくださし、。「 http://elinux.org/RPi_ BCM2835 ー G 曰 0 」にもあります。 ラスパイマガジン 2011.10
日本語入力ソフトを設定△、 = ラズバイと周辺機器の買い方から OS 導入方法まて 再起動すると、日本向けの設定が 次に最新版 2.4.3 (Stretch) の作 ジは導入可能なソフトなどを指す ) 反映されます。右上の時刻は日本時 業内容です。ますは入力システム を導入すると日本語化されます。 間に変わっています。続いて日本語 「 iBus 」を設定します。メニューか $ sudO apt-get install libreoff 入力ソフトを設定します。作業内容 ら「設定」一「 iBus の設定」を開き、 i ce - 1 10n - j a ロ は最新版とそれ以前で異なります。 図 2 の手順で英語入力を削除しま ますは以前のバージョン (Jessie) す。続いて、画面上端のバーの右の 取後に、 Raspberry Pi の電源を から説明します。 方に表示されている英字の「 A 」を 切りましよう。メニューから「 Shut 画面上端のバーの右の方には、 クリックし、表示されたメニューで down 」を選び、表示されたダイアロ 「 JP 」というアイコンが表示されて 「日本語 - M 。 zc 」を選びます ( 図 3 ) 。 グで「 Shutdown 」を選びます ( 図 います。初期状態では日本語変換が 日本語入力ソフトが起動し、 [ 半角 4 ) 。その後、 USB-AC アダブターの 使えないので、「 JP 」アイコンをク / 全角 ] キーで日本語入力モードに ケープルを抜きます。また、「 Rebo リックし、表示されたメニューから 切り替わります。 ot 」を選べば再起動されます。 「日本語 - Mozc 」を選ぶと、アイコ オフィススイート「 LibreOffice 」 次ページから、端末で利用する ンが変わります ( 図 1 ) 。これで [ 半 はメニューの「オフィス」から起動 Linux コマンドの代表例を紹介しま 角 / 全角 ] キーで日本語入力モード できます。初期状態ではメニューな す。 p. 145 の「コマンドの例 14 」に に切り替わります。文字を入力して どが英語になっています。端末を起 ある、 OS のアップデートは特に重 スペースキーで変換、 CEnter] キー 動し、次のコマンドで LibreOffice 要です。数日に 1 回程度、定期的に で確定です。 用の日本語化パッケージ ( パッケー 実行するようにしましよう。 国 * 国 17 日本語 - Japanese プログラミング インターネット 旧の定 入力メソッド 追 A ) 削除 ( R ) 情報 ( A ) - 英語 - 英語に S ) Add/R«noveSchware - ー「 a を阯加 ngs ! 如 Dev s , 設定を ) 3 クリック ②クリック ・まの羅定 ーリ nM »uE ま 13 リ 0 の設定 R 懿 p / Pi の設定 キーポードとマワス 入力メソッド ④クリック アクテイプなインブットメソッドは、キーポードショートカットキ しによってリストされている中から一つのインブットメンツドをき第することで切り題えるこ ①クリック リックすること 能です . 閉じる ( C ) 日本語入力ソフト「 Mozc 」を使う 図 1 図 2 英語入力は削除 入力モード (A) ツール ・ % 1934 Shutdown options Shutdown Reboot Logout 日本語 - MOZC 日本語入力ソフトを起動 図 3 電源を切る 図 4 イマガジン 141